




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優(yōu)質文檔-傾情為你奉上實驗二數據鏈路層實驗實驗項目性質:設計性計劃學時:4實 驗 環(huán) 境: 實驗日期:2015年10月14日一、實驗目的1、理解并掌握數據鏈路層協(xié)議的功能。2、進一步理解停止等待協(xié)議和滑動窗口協(xié)議的基本工作原理。3、掌握計算機網絡協(xié)議的基本實現技術。4、利用RS 232C通信接口實現兩臺PC間傳輸文件。二、實驗內容與要求1、設計完成數據鏈路層相關類;2、開發(fā)一個使用RS232C接口在兩臺計算機之間采用停止等待協(xié)議傳輸信息(文件)的程序;3、開發(fā)一個使用RS232C接口在兩臺計算機之間采用滑動窗口協(xié)議傳輸文件的程序。完成實驗內容中的第1、2部分,有能力的同學完成全部內容。三、
2、實驗(設計)儀器設備和材料清單計算機兩臺,串行電纜一根。四相關知識1 數據路層概述數據鏈路層協(xié)議應提供的基本功能有:(1) 數據在數據鏈路上的正常傳輸(建立、維護和釋放)。(2) 幀定界與同步,以實現透明傳輸。(3) 差錯控制和流量控制。(4) 透明傳輸。2 數據成幀方法在數據鏈路層,為實現透明傳輸及進行差錯控制和流量控制,在把數據送到物理層之前,需將若干個數據組成一幀,并在其中加上其他必要的控制信息??刂菩畔⑿纬桑〝祿蓭┑姆椒ㄓ幸韵聨追N:字符計數法、帶字符填充的首尾界符法、帶填充位的首尾標志法、物理層編碼違例法。3 差錯控制與流量控制為確保幀可靠地交付接收方,接收方在收到幀后,應向發(fā)送方
3、應答,告知是否正確收到幀,因此在數據鏈路層要建立差錯控制機制: 差錯控制方法、CRC循環(huán)冗余校驗、流量控制。4 數據鏈路層協(xié)議(1) 停止等待協(xié)議停止等待協(xié)議的基本原理是:發(fā)送方在數據幀中加入校驗碼(CRC),由接收方檢查;若出錯,返回NAK幀(否認幀),否則發(fā)送ACK幀(確認幀);發(fā)送方收到NAK幀后重發(fā)數據幀,若收到ACK幀可發(fā)送下一幀。當超時計時事件發(fā)生時,重發(fā)丟失的幀,這樣可通過等待發(fā)送來實現流量控制,如圖3-2所示。停止等待協(xié)議發(fā)送方的算法如下:(1) 從主機取一個數據幀。(2) V(s) <-0,發(fā)送方狀態(tài)變量初始化。(3) N(s)<- V(s)(置發(fā)送序號),將數據
4、幀送發(fā)送緩沖區(qū)。(4) 將發(fā)送緩沖的數據發(fā)送。(5) 置超時定時器。(6) 等待(下列三種情況)。(7) 收到回答ACK ,從主機取一個新數據幀, V(s) <-1-V(s),轉(3)。圖3-2停止等待協(xié)議工作原理示意圖(8) 收到回答NAK ,轉(4)。(9) 超時,轉(4)。接收方的算法如下:(1) V(r) <-0, 接收方狀態(tài)變量初始化。(2) 等待。(3) 收到一個數據幀后,測試正確繼續(xù);否則傳輸出錯,轉(8)。(4) 如果接收到的幀序號等于期待的幀序號( N(s) = V(r) ,繼續(xù);否則丟棄該數據,轉(7)。(5) 將接收幀的數據部分上交主機。(6) V(r) &l
5、t;-1- V(r)。 (7) 向發(fā)方發(fā)ACK ,轉(2)。(8) 向發(fā)方發(fā)NAK ,轉(2)。停止等待協(xié)議的算法流程如圖3-3所示,其中V(s) 和V(r)分別是發(fā)送方和接收方維護的狀態(tài)變量,N(s)是發(fā)送序號。圖3-3停止等待協(xié)議的算法停止等待協(xié)議算法簡單,只適合傳送少量的大的幀的情況。但大的數據塊要分成許多幀傳送,此時停止等待協(xié)議不適用,原因是本協(xié)議只允許同時只有一幀在鏈路上傳送,鏈路利用率低。(2) 連續(xù)重傳ARQ協(xié)議為了提高信道利用率,發(fā)送方發(fā)完一幀后,不必停下來等待對方的應答,可以連續(xù)發(fā)送若干幀;如果在發(fā)送過程中收到接收方的肯定應答,可以繼續(xù)發(fā)送;若收到對其中某一幀的否認幀,則從該
6、幀開始的后續(xù)幀全部重發(fā),如圖3-4。由于減少了等待時間,整個通信的吞吐量就提高了,提高了信道利用率。但回退重傳(Go-back-N)會導致某些已正確接收的幀的重傳,因此降低了發(fā)送效率。當誤碼率較低時,連續(xù)重傳ARQ優(yōu)于停止等待協(xié)議;反之則不一定。圖3-4連續(xù)重傳ARQ協(xié)議工作原理示意圖(3) 滑動窗口協(xié)議(Sliding Window Protocol)在使用連續(xù)重傳ARQ協(xié)議時,如果發(fā)送端一直沒有收到對方的確認信息,那么實際上發(fā)送端并不能無限制地發(fā)送其數據幀。這是因為:(1) 當未被確認的數據幀的數目太多時,只要有一幀出了差錯,就可能要有很多的數據幀需要重傳,這必然要白白花費較多的時間,因而
7、增大開銷。(2) 為了對所發(fā)送出去的大量數據幀進行編號,每個數據幀的發(fā)送序號也要占用較多的比特數,這樣又增加了一些不必要開銷。連續(xù)ARQ協(xié)議中,每一個要發(fā)出的幀都包含一個序列號,范圍從0到最大(0 2n 1,一般用n個二進制位表示),使得序列號能恰好放入n位的字段中,n同時表示緩存器的大小。滑動窗口協(xié)議的工作原理如下:(1) 任何時刻,發(fā)送端始終保持一個已發(fā)送但尚未確認的幀的序號表,稱為發(fā)送窗口。發(fā)送窗口的上界表示要發(fā)送的下一個幀的序號,下界表示未得到確認的幀的最小編號。發(fā)送窗口 = 上界下界,大小可變;窗口內的序列號代表已發(fā)送了的但尚未確認的幀。(2) 發(fā)送端每發(fā)送一個幀,序號取上界值,上界
8、加1;每接收到一個正確響應幀,下界加1;(3) 接收端有一個接收窗口,大小固定,但不一定與發(fā)送窗口相同。接收窗口的上界表示允許接收的序號最大的幀,下界表示希望接收的幀;(4) 接收窗口表示允許接收的信息幀,落在窗口外的幀均被丟棄。序號等于下界的幀被正確接收,并產生一個響應幀,下界加1。接收窗口大小不變。正因為收發(fā)兩端的窗口按照以上的規(guī)律不斷地向前滑動,因此這種協(xié)議又稱為滑動窗口協(xié)議。當發(fā)送窗口和接收窗口的大小都等于1時,就是最初討論的停止等待協(xié)議。下圖3-5為滑動窗口的原理,它采用三位編碼,順序號為0-7,圖中方框內表示發(fā)送方可以發(fā)送7幀,序號從6開始,每發(fā)送一幀,窗口左邊界向里收縮,每收到一
9、個確認,窗口向右滑動。接收方每一幀,窗口左邊向右收縮,每發(fā)送相應后窗口向右擴展。圖3-5滑動窗口協(xié)議中的發(fā)送窗口和接收窗口假設窗口為7幀,最上面的A發(fā)送7幀,但發(fā)送后3幀未收到確認,于是A把窗口收縮到4幀F3-F7。但此時B發(fā)送確認RR3表明已經收到0-2幀,并準備接收3-7幀。A收到確認RR3,窗口向外滑動3幀,表示A可以從F3開始發(fā)送7幀。接著發(fā)送F3-F6。 若B返回確認RR4,表示已經接收這些幀,并允許A發(fā)送F7開始的7幀。圖3-6滑動窗口協(xié)議工作原理示意圖。AB圖3-6滑動窗口協(xié)議工作原理示意圖可以證明,當用 n個比特進行編號時,若發(fā)送窗口的大小為WT,接收窗口的大小為WR,則只有W
10、T2n-1 和WT+WR2n成立時,滑動窗口協(xié)議才能正常工作。(4) 選擇重傳ARQ協(xié)議 為了進一步提高信道的利用率,可設法只重傳出現差錯的數據幀或者是定時器超時的數據幀。但這時必須加大接收窗口,以便先收下發(fā)送序號不連續(xù)但仍處在接收窗口中的那些數據幀,等到所缺序號的數據幀收到后再一并送交主機。這就是選擇重傳ARQ協(xié)議。使用選擇重傳ARQ協(xié)議可以避免重復傳送那些本來已經正確到達接收端的數據幀。但付出的代價是在接收端要設置具有相當容量的緩存空間,這在許多情況下是不夠經濟的。因此選擇重傳ARQ協(xié)議在目前就遠沒有連續(xù)重傳ARQ協(xié)議使用得那么廣泛。5 面向比特的鏈路控制規(guī)程HDLC高級數據鏈路控制HDL
11、C(High-level Data Link Control)是在IBM公司著名的體系結構SNA上的數據鏈路層的面向比特的規(guī)程SDLC(Synchronous Data Link Control)基礎上發(fā)展起來的,由ISO把SDLC修改后稱為國際標準ISO 3309。從網絡層交下來的分組,變成為數據鏈路層的數據。數據鏈路層的數據傳送是以幀為單位的。也就是說,數據鏈路層的PDU是幀。幀是一個具有固定的格式數據塊。一個HDLC幀由標志、地址、控制、信息及幀校驗等5個字段組成。如圖3-7所示。HDLC有三種幀類型,由控制字段加以區(qū)分。HDLC幀中各字段的作用及含義如下:標志F地址A控制C信息Info
12、r幀校驗序列FCS標志F幀校驗區(qū)間透明傳輸區(qū)間圖3-7HDLC幀結構(1) 標志字段F(Flag)幀的邊界,標識一個幀的開始與結束;當連續(xù)傳輸兩個幀時,前一個幀的結束標志字段F可以兼作后一幀的起始標志字段。其內容為:。在兩個標志字段之間的比特串中,如果碰巧出現了和標志字段F一樣的比特組合,那么就會誤認為是幀的邊界。為了避免出現這種錯誤,HDLC采用零比特填充法使一幀中兩個F字段之間不會出現6個連續(xù)1。 (2) 地址字段A(Address)基本單位為8比特,需要時可以8比特為單位擴展。這時用地址字段的第1位表示擴展位,其余7位為地址位。當某個地址字段的第1位為0時,則表示下一個地址字段的后7位也
13、是地址位。當這個地址字段的第1位為1時,即表示這已是最后一個地址字段了。(3) 控制字段C(Control)標志F地址A控制C信息Infor幀校驗序列FCS標志F比特序號信息幀I監(jiān)控幀S無編號幀U123456780N(S)P/FN(R)10SP/FN(R)11MP/FM控制字段占8比特,其定義如圖3-8所示。HDLC用其將幀劃分為信息幀(Information)、監(jiān)督幀(Supervisory)和無編號幀(Unnumbered)等三大類。它們的簡稱分別是I幀,S幀和U幀。圖3-8控制字段(4) 信息字段I(Information)信息字段可以任意長,只有信息幀才有該字段。(5) 幀校驗序列FC
14、S(Frame Check Sequence)字段本字段共占16bit,校驗的范圍是從地址字段的第1個比特起,到信息字段的最末1個比特為止。它采用的生成多項式是x16十x12+x5十1,即CRCCCITT。HDLC的通信過程要經過建立數據鏈路、數據傳輸、數據鏈路拆除三個階段。五、結果分析(可根據需要附加頁)6、 主要源代碼using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using S
15、ystem.Windows.Forms;using System.Threading;using System.Runtime.InteropServices;using NetProject;namespace DataLink_Exp public partial class MainForm : Form static MainForm mHANDLE=null; /主窗體名柄,在線程中訪問 static Thread Mon_Thread=null; /監(jiān)視線程 private ChildForm sendForm = null; /發(fā)送子窗口對象 private ChildForm
16、rcvForm = null; /接收子窗口對象 static Physical PHL = null; /物理層實體 static DataLink DLL = null; /數據鏈路層實體 delegate void SetTextCallback(byte buffer); public MainForm() InitializeComponent(); mHANDLE = this; private void MainForm_Load(object sender, EventArgs e) /初始化,創(chuàng)建子窗體,啟動監(jiān)視線程 sendForm = new ChildForm(); s
17、endForm.MdiParent = this; sendForm.Text = "發(fā)送窗口" /this.MdiChildren.Length.ToString(); sendForm.Name = "SendWindow" sendForm.Show(); rcvForm = new ChildForm(); rcvForm.MdiParent = this; rcvForm.Text = "接收窗口" rcvForm.Name = "ReceiveWindow" rcvForm.rtxBox.ReadOnl
18、y = true; rcvForm.Show(); this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/其他排列方法:Cascade、TileHorizontal PHL = new Physical("COM3"); DLL = new DataLink(); /創(chuàng)建數據鏈路層對象 DLL.setPHL(PHL); /連接物理層 sendForm.Enabled = false; /發(fā)送窗口禁止編輯 /創(chuàng)建并啟動監(jiān)視線程 Mon_Thread = new Thread(new ThreadStart(t
19、his.MonitorThread); Mon_Thread.Start(); private void disconnect_Click(object sender, EventArgs e) /關閉串行口 PHL.Close(); connect.Enabled = true; sendForm.Enabled = false; private void connect_Click(object sender, EventArgs e) /打開串行口/ port = new SerialPort("COM1", 9600, Parity.None, 8, StopBit
20、s.One); PHL.Open(); sendForm.Enabled = true; connect.Enabled = false; disconnect.Enabled = true; private void Receive(byte buffer) /接收數據并顯示 /寫實際接收代碼 if (this.rcvForm.rtxBox.InvokeRequired) SetTextCallback d = new SetTextCallback(Receive); this.Invoke(d, new object buffer ); else string Msg = Encodin
21、g.Unicode.GetString(buffer, 0, buffer.Length); /編碼格式轉換 this.rcvForm.rtxBox.Text += Msg; /收到的信息顯示 public static void Send(string Msg) /發(fā)送子窗體高層向低層發(fā)送數據(使用<Ctrl>+<T>) byte buffer = Encoding.Unicode.GetBytes(Msg); /發(fā)送前進行編碼格式轉換 DLL.Send(buffer);/ PHL.Send(buf); /數據送物理層SAP下行隊列,發(fā)送數據(物理層實驗用) /監(jiān)視線
22、程函數,運行協(xié)議處理方法,接收傳輸給當前應用的數據。 private void MonitorThread() byte Msg; while (true) DLL.Run(); /運行數據鏈路層協(xié)議處理方法 if (Msg = DLL.Receive() != null) /數據鏈路層有向高層遞交的數 /是,從數據鏈路層接收數據(數據存儲在Msg中) Receive(Msg); /送接收處理(本例為數據直接顯示在子窗體中) private void arrToolStripMenuItem_Click(object sender, EventArgs e) /排列子窗體 this.Layou
23、tMdi(System.Windows.Forms.MdiLayout.TileVertical); /還有其他排列方法:Cascade、TileHorizontal private void exitToolStripMenuItem_Click(object sender, EventArgs e) Close(); private void MainForm_FormClosed(object sender, FormClosedEventArgs e) if (Mon_Thread != null) Mon_Thread.Abort();using System;using Syste
24、m.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Threading;using System.Runtime.InteropServices;using NetProject;namespace DataLink_Exp public partial class MainForm : Form static MainForm mHANDLE=null;
25、 /主窗體名柄,在線程中訪問 static Thread Mon_Thread=null; /監(jiān)視線程 private ChildForm sendForm = null; /發(fā)送子窗口對象 private ChildForm rcvForm = null; /接收子窗口對象 static Physical PHL = null; /物理層實體 static DataLink DLL = null; /數據鏈路層實體 delegate void SetTextCallback(byte buffer); public MainForm() InitializeComponent(); mHAN
26、DLE = this; private void MainForm_Load(object sender, EventArgs e) /初始化,創(chuàng)建子窗體,啟動監(jiān)視線程 sendForm = new ChildForm(); sendForm.MdiParent = this; sendForm.Text = "發(fā)送窗口" /this.MdiChildren.Length.ToString(); sendForm.Name = "SendWindow" sendForm.Show(); rcvForm = new ChildForm(); rcvForm
27、.MdiParent = this; rcvForm.Text = "接收窗口" rcvForm.Name = "ReceiveWindow" rcvForm.rtxBox.ReadOnly = true; rcvForm.Show(); this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);/其他排列方法:Cascade、TileHorizontal PHL = new Physical("COM4"); DLL = new DataLink(); /創(chuàng)建數據鏈路層對
28、象 DLL.setPHL(PHL); /連接物理層 sendForm.Enabled = false; /發(fā)送窗口禁止編輯 /創(chuàng)建并啟動監(jiān)視線程 Mon_Thread = new Thread(new ThreadStart(this.MonitorThread); Mon_Thread.Start(); private void disconnect_Click(object sender, EventArgs e) /關閉串行口 PHL.Close(); connect.Enabled = true; sendForm.Enabled = false; private void conne
29、ct_Click(object sender, EventArgs e) /打開串行口/ port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One); PHL.Open(); sendForm.Enabled = true; connect.Enabled = false; disconnect.Enabled = true; private void Receive(byte buffer) /接收數據并顯示 /寫實際接收代碼 if (this.rcvForm.rtxBox.InvokeRequire
30、d) SetTextCallback d = new SetTextCallback(Receive); this.Invoke(d, new object buffer ); else string Msg = Encoding.Unicode.GetString(buffer, 0, buffer.Length); /編碼格式轉換 this.rcvForm.rtxBox.Text += Msg; /收到的信息顯示 public static void Send(string Msg) /發(fā)送子窗體高層向低層發(fā)送數據(使用<Ctrl>+<T>) byte buffer
31、 = Encoding.Unicode.GetBytes(Msg); /發(fā)送前進行編碼格式轉換 DLL.Send(buffer);/ PHL.Send(buf); /數據送物理層SAP下行隊列,發(fā)送數據(物理層實驗用) /監(jiān)視線程函數,運行協(xié)議處理方法,接收傳輸給當前應用的數據。 private void MonitorThread() byte Msg; while (true) DLL.Run(); /運行數據鏈路層協(xié)議處理方法 if (Msg = DLL.Receive() != null) /數據鏈路層有向高層遞交的數 /是,從數據鏈路層接收數據(數據存儲在Msg中) Receive(
32、Msg); /送接收處理(本例為數據直接顯示在子窗體中) private void arrToolStripMenuItem_Click(object sender, EventArgs e) /排列子窗體 this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical); /還有其他排列方法:Cascade、TileHorizontal private void exitToolStripMenuItem_Click(object sender, EventArgs e) Close(); private void MainForm_FormClosed(object sender, FormClosedEventArgs e) if (Mon_Thread != null) Mon_Thread.Abort(); 七、分析與思考1. 數據鏈
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政效能提升的途徑與實踐試題及答案
- 重要經驗分享的試題及答案匯編
- 小吃門店招牌管理制度
- 醫(yī)院倉儲消防管理制度
- 婚宴酒席財產管理制度
- 了解嵌入式設計模式試題及答案
- 婦科診室設備管理制度
- 小區(qū)物業(yè)路政管理制度
- 夜校開堂安全管理制度
- 公司扶貧基金管理制度
- 軟件專業(yè)畢業(yè)設計
- 湖北省武漢市江夏區(qū)2025屆九年級下學期5月月考語文試卷(含答案)
- 雨棚翻新合同協(xié)議書范文
- 安徽省合肥一中2025屆高三5月回歸教材讀本
- 2024年江蘇省無錫市中考歷史真題(解析版)
- 雙方房屋使用協(xié)議書
- 投資理財保本協(xié)議書
- 2025年廣東省深圳市中考道德與法治 總復習責任意識檢測卷(含答案)
- 閱讀策略在小學英語教學中的應用
- 地西半球的國家 復習課課件-2024-2025學年七年級地理下學期(人教版2024)
- 2025法語DELFA1級考試試卷
評論
0/150
提交評論