一、封裝成幀
封裝成幀就是在一段數據的前后分別添加首部和尾部,這樣就構成了一個幀。接收端在收到物理層上交的比特流后,就能根據首部和尾部的標記,從比特流中識別幀的開始和結束。
首部和尾部的一個重要作用就是進行幀定界(即確定幀的界限)。此外,首部和尾部還包括許多必要的控制信息。 為了提高幀的傳輸效率,應當使幀的數據部分長度盡量大于首部和尾部的長度。最大傳輸單元MTU:幀數據部分長度上限。
當數據是由可打印的ASCII碼組成的文本文件時,幀定界可以使用特殊的幀定界符。ASCII碼是7位編碼,一共可以組合成128個不同的ASCII碼,其中可打印的有95個,而不可打印的控制字符有33個。(可打印的字符就是可以在鍵盤上輸入的字符,我們使用的標準鍵盤有47個鍵可輸入94個字符,包括使用shift鍵,加上空格鍵,一共可以輸入95個可打印字符)
控制字符SOH放在一幀的最前面,表示幀的首部開始。另一個控制字符EOT表示幀的結束。注意:SOH和EOT都只是控制字符的名稱,他們的十六進制編碼分別是01(二進制是00000001)和04(二進制是00000100)。SOH,EOT 并不是S O H E O T這幾個字符,只是名字而已。當傳輸中出現差錯,幀定界符的作用更加明顯。假設未發送完一個幀而發生故障,接收端就知道收到的數據是不完整的幀(只有首部),必須丟棄。
二、透明傳輸
當傳送的幀是用文本文件組成的幀時(文本文件中的字都是從鍵盤上輸入的),其數據部分顯然不會出現像SOH或EOT這樣的幀定界控制字符。可見不管從鍵盤上輸入什么字符都可以放在這樣的幀中傳輸過去,因此這樣的傳輸就是透明傳輸。
但當數據部分是非ASCII碼的文本文件時(如二進制代碼的計算機程序或者圖像等),情況就不同了。如果數據中的某個字節的二進制代碼恰好和SOH或EOT這種控制字符一樣,數據鏈路層就好錯誤地“找到幀的邊界”,把部分幀收下(誤以為是個完整的幀),而把剩下的那部分數據丟棄(這部分找不到幀定界控制字符SOH)。這種情況就不是透明傳輸,因為當遇到書中碰巧出現字符“EOT”時就傳不過去了,而其后面的數據因找不到“SOH”被接收端當做無效幀而丟棄。但實際上數據中出現的字符“EOT”并非控制字符而僅僅是二進制數據00000100 。
為了解決透明傳輸問題,字節填充法或字符填充:在控制字符SOH、EOT的前面插入一個轉義字符ESC(其十六進制編碼是1B,二進制是00011011)。而接收端的數據鏈路層在把數據送往網絡層之前刪除這個插入的轉義字符。
三、差錯檢測
現實的通信鏈路都不會是理想的。傳輸過程中,1可能變成0, 0 可能變成1 。這就叫比特差錯——誤碼率。 誤碼率和信噪比有很大的關系。因此,在計算機網絡傳輸數據時,必須采用各種差錯控制技術。目前在數據鏈路層廣泛使用了循環冗余檢驗(CRC)的檢錯技術。
在數據鏈路層的CRC檢驗都是用硬件完成的,處理很迅速,因此不會延誤數據的傳輸。為什么數據鏈路層要以幀為單位來傳送數據呢?因為如果不以幀為單位,就無法加入冗余碼來進行差錯檢驗。傳輸差錯分為兩類:一類就是前面所說的最基本的比特差錯。第二類:收到的幀出現了幀丟失、幀重復和幀失序。(停止等待協議,ARQ)。數據鏈路層并不需要給網絡層提供“可靠傳輸”的服務。過去OSI的觀點是:必須讓數據鏈路層向上提供可靠傳輸。因此在CRC的基礎上,增加了幀編號、確認和重傳機制。
-
數據鏈路層
+關注
關注
0文章
56瀏覽量
11990
發布評論請先 登錄
相關推薦
評論