[計算機網絡基礎]數據鏈路層(第一部分)
一:數據鏈路層的組幀:
組幀:網絡層的IP數據報向下傳送至數據鏈路層,成為數據鏈路層的數據單元,給數據單元加上首部和尾部,就組成數據鏈路層的一個幀。如圖所示:
其中規定數據鏈路層幀的數據單元所能傳送的最大數據長度(Max Transfer Unit),j加首部和尾部的最重要的作用就是幀定界。
特別的當幀的數據部分完全是由ASCII碼編碼形成的文本文件時,幀的首部和尾部可以使用特殊的幀界定符。即:
在ASCII碼中規定SOH(start of headline)為標題首部,在數據鏈路層規定為幀的首部,EOT (end of transmission)為傳輸結束,在數據鏈路層規定為幀的尾部,其中SOH的十六進制為01,EOT的十六進制為04。當幀的數據部分不是完全由ASCII碼編碼的文本文件時我們則不可以使用這種方法來規定首部和尾部。
二:數據鏈路層的組幀上的透明傳輸:
由上面如果我們傳送的幀數據部分完全是由ASCII碼編碼的文本文件時,使用SOT和EOT作為幀的首部和尾部是非常適合接收端識別每一個幀,和每一個幀裏面包含的數據部分。當時當我們幀的數據部分不在完全是由ASCII碼編碼的文本文件時,數據部分傳送的是圖片和二進制計算機程序時,我們很難保證每一幀的數據部分沒有和SOT和EOT一樣的十六進制編碼,如果數據部分出項十六進制的04,接收端在收到數據時,會錯誤的判斷改幀一結束。
這種情況不是我們希望看見的。所以我們引入了一些方法來,最大程度上支持數據鏈路層的透明傳輸特性。
方法一:字符填充法
字符填充法和我們再寫代碼時的轉義字符一樣。比如再上圖中,幀的數據部分爺出現了SOH,我們在其前加一個轉義字符ESC。 數據鏈路層的發送發在發送幀時,會查看幀的數據部分,如出現SOH和EOT就在其前面加一個轉義字符ESC,接收方在收到幀時,查看幀中的數據部分,如果“看見”ESC和SOH或EOT在一起,就刪除EOT.如果發送方的幀的數據存在ESC,那麽我們可以在ESC前面在加一個ESC(這是我臆造的想法,不同的協議再做透明傳輸控制時都會根據實際情況做的很靈活,比如共享以太網根本就不存在幀的首部和尾部,他通過每發送一個幀後都等待一段時間才發送下一個幀。而PPP協議的幀雖然也是用字符填充的方法,但和這裏講的思路一致,但做得很靈活)
方法二:零比特填充法
零比特填充法,它使用一個特殊的比特模式,如幀首和幀尾為01111100,在數據部分,每出現5個1,就在其後加一個0,接受方做其逆操作。
方法三:字符計數法
字符計數法,在幀首使用一個計數字段,記錄幀的數據部分有多少的字符。
方法四:違規編碼法
在物理層比特編碼通常采用違規編碼。例如,曼徹斯特編碼將數據比特“1”編碼為“高-低”電平,數據比特“0”編碼為“低-高”電平,而“高-高”,“低-低”電平在編碼中是違規的,可以依次檢查接收到的幀的正確性。
三:數據鏈路層的差錯檢驗
數據在通信信道中傳輸不可能是理想的,如在傳輸過程中,1可能變成0,0變成1。這種錯誤我們稱為比特差錯。下面所有的差錯檢驗都是針對比特差錯的。
在理解數據鏈路層的差錯檢驗技術的原理,需要一些前置知識。
前置知識:
方法一:奇偶校驗碼。(只能檢錯
原理:它是由n-1位信息元和1位校驗元組成,可以表示成為(n,n-1)。如果是奇校驗碼,在附加上一個校驗元以後,碼長為n的碼字中“1”的個數為奇數個;如果是偶校驗碼,在附加上一個校驗元以後,碼長為n的碼字中“1”的個數為偶數個。
方法二:循環冗余校驗碼 (只能檢錯)
原理:在K位信息碼後再拼接R位的校驗碼,整個編碼長度為N位,因此,這種編碼也叫(N,K)碼。對於一個給定的(N,K)碼,可以證明存在一個最高次冪為N-K=R的多項式G(x)。根據G(x)可以生成K位信息的校驗碼,而G(x)叫做這個CRC碼的生成多項式。 校驗碼的具體生成過程為:假設發送信息用信息多項式C(X)表示,將C(x)左移R位,則可表示成C(x)*x的R次方,這樣C(x)的右邊就會空出R位,這就是校驗碼的位置。通過C(x)*2的R次方除以生成多項式G(x)得到的余數就是校驗碼。
方法三:海明碼校驗(CRC)(檢錯和糾錯
[計算機網絡基礎]數據鏈路層(第一部分)