链路层基本问题 : 封装成帧、差错检测、流量控制
一、封裝成幀
1、MAC幀
類型字段 (2個字節):
用來標志上一層使用的是什么協議,以便把收到的MAC幀的數據上交給上一層的這個協議。
數據字段 (46-1500):
正式名稱是MAC客戶數據字段最小長度64 字節-18字節的首部和尾部 = 數據字段的最小長度。
FCS字段 (4 字節):
當數據字段的長度小于 46 字節時,應在數據字段的后面加入整數字節的填充字段,以保證以太網的MAC幀長不小于64 字節。
在幀的前面插入的 8 字節中的第一個字段共 7 個字節,是前同步碼,用來迅速實現 MAC幀的比特同步。第二個字段是幀開始定界符,表示后面的信息就是MAC幀
2、封裝成幀
1)、封裝成幀(framing):就是在一段數據的前后分別添加首部和尾部,這樣就構成了一個幀。
2)、接收端在收到物理層上交的比特流后,就能根據首部和尾部的標記,從收到的比特流中識別幀的開始和結束。
3)、分組交換的一個重要概念:就是所有在因特網上傳送的數據都是以分組(即IP數據報)為傳送單位。
4)、網絡層的IP數據報傳送到數據鏈路層就成為幀的數據部分。在幀的數據部分的前面和后面分別添加上首部和尾部,就構成了一個完整的幀。
幀長等于數據部分長度加上幀首部和幀尾部的長度,而首部和尾部的一個重要作用就是進行幀定界(即確定幀的界限)。
5)、首部和尾部還包含許多必要的控制信息,在發送幀時,是從幀首部開始發送。各種數據鏈路層協議都要對幀首部和幀尾部的格式有明確的規定。為了提高幀的傳輸效率,應當使幀的數據部分長度盡可能大于首部和尾部的長度。但是,每一種鏈路層協議都規定了幀的數據部分的長度上限——最大傳送單元MTU(Maximum Transfer Unit)。
注:
當數據是由可打印的ASCII碼組成的文本文件時,幀定界可以使用特殊的幀定界符。
控制字符SOH(Start Of Header)放在一幀的最前面,表示幀的首部開始。另一個控制字符EOT(End Of Transmission)表示幀的結束。他們的十六進制編碼分別是01(二進制是00000001)和04(二進制是00000100)。
發送錯誤:
當數據在傳輸中出現差錯時,幀定界符的作用更加明顯。假定發送端在尚未發完一個幀時突然出現故障,中斷了發送。但隨后很快又恢復正常,于是重新從頭開始發送剛才未發送完的幀。由于使用了幀定界符,在接收端就知道前面收到的數據時個不完整的幀(只有首部SOH,沒有傳輸結束符EOT),必須丟棄。而后面收到的數據有明顯的幀定界符(SOH和EOT),因此這是一個完整的幀,應當收下。
二、透明傳輸
透明:某一個實際存在的事物看起來卻好像不存在一樣。對于數據鏈路層傳輸數據,表示無論什么樣的比特組合都能通過這個數據鏈路層,因此數據鏈路層相對于這些數據來說就是透明的。
1、界定差錯
由于幀的開始和結束的標記是專門指明的控制字符,因此,所傳輸的數據中的任何8比特的組合一定不允許和用作幀界定符的控制字符的比特編碼一樣,否則就會出現幀界定錯誤。
當傳送的幀是用文本文件組成的幀時,其數據部分顯然不會出現像SOH和EOT這樣的幀界定符,可見不管從鍵盤上輸入什么字符都可以放在這樣的幀中傳輸,這樣的傳輸就叫做透明傳輸。
但當數據部分是非ASCII碼的文本文件時,情況就不同了。如果某個數據的某個字節的二進制代碼出現和SOH、EOT這種控制字符,數據鏈路層就會誤認為“找到幀的邊界”,收下部分幀,丟棄剩下的部分數據。
2、解決辦法
為了解決透明傳輸問題,就必須使數據中的SOH和EOT不被解釋為界定符。
發送端的數據鏈路層在數據中出現控制符”SOH”和”EOT”的前面插入一個轉義字符”ESC”(其十六進制編碼是1B)。而在接收端的數據鏈路層在將數據送往網絡層之前刪除這個插入的轉義字符。這種方法稱為字節填充(byte stuffing)或字符填充(character stuffing)。如果轉義字符也出現在數據當中,那么解決方法仍然是在轉義字符的前面插入一個轉義字符。因此,當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個。
三、差錯檢測
現實的通信鏈路不會是理想的。這就是說,比特在傳輸過程中可能會產生差錯:1可能會變成0,而0也可能變成1.這就是比特差錯。
在一段時間內,傳輸錯誤的比特占所傳輸比特總數的比率為誤碼率BER。為了保證傳輸的可靠性,目前在數據鏈路層廣泛使用了循環冗余檢驗CRC,詳情見我的另一篇博客。
CRC循環冗余檢驗
總結
以上是生活随笔為你收集整理的链路层基本问题 : 封装成帧、差错检测、流量控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言教材市场的分析
- 下一篇: 计算机控制技术课后题答案,计算机控制技术