數據鍊路層把網絡層交下來的數據(IP數據報)添加首部和尾部封裝成幀發送到鍊路上,接收端把接收到的幀的數據部分取出并上交給網絡層。
圖3.1 數據鍊路層傳送的是幀
3.1 數據鍊路層的三個基本問題3.1.1 封裝成幀封裝成幀就是在将網絡層的IP數據報的前後分别添加首部和尾部,這樣就構成了一個幀。不同的數據鍊路層協議的幀首部和尾部包含的信息有明确的規定,幀的首部和尾部有幀開始符和幀結束符,稱為幀定界符。接收端收到物理層傳過來的數字信号讀取到幀開始字符一直到幀結束字符,就認為接收到了一個完整的幀。
在數據傳輸中出現差錯時,幀定界符的作用更加明顯。如果發送端在尚未發送完一個幀時突然出現故障,中斷發送,接收端收到了隻有幀開始符沒有幀結束符的幀,就認為是一個不完整的幀,必須丢棄。
圖3.2 幀首部和幀尾部封裝成幀
為了提高數據鍊路層傳輸效率,應當使幀的數據部分盡可能大于首部和尾部的長度。每一種數據鍊路層協議都規定了所能夠傳送的幀的數據部分長度的上限,即最大傳輸單元MTU,以太網的MTU為1500個字節(MTU≤1500字節)。
3.1.2 透明傳輸通常我們用ACSII字符代碼表中的非打印控制字符SOH作為幀開始定界符、EOT作為幀結束定界符。
當傳輸的幀的數據部分中出現了和幀結束定界符“EOT”一樣的代碼時,接收端會誤認為這就是幀的結束符,會誤認為已經接收到了一個完整的幀,而後面的部分就被丢棄了。
圖3.3 幀的數據部分出現了EOT
如何判斷幀中的“EOT”、“SOH”是數據部分還是幀定界符呢?字節填充法
(1)在數據部分出現“EOT”、“SOH”的前面插入轉義字符“ESC”
(2)接收端收到後會去掉“ESC”,并認為“ESC”後面的字符為數據
(3)如果數據部分也出現了“ESC”,同樣的在數據部分的“ESC”的前面也插入一個“ESC”,在接收端收到後會去掉“ESC”,并認為“ESC”後面的字符“ESC”為數據。
圖3.4 字節填充法
發送端在發送幀之前在原始數據中必要位置插入轉義字符,接收端收到後去掉轉義字符,得到原始數據,中間插入轉義字符是要讓傳輸的原始數據原封不動地發送到接收端,這個過程稱為“透明傳輸”。
3.1.3 差錯檢驗比特在傳輸過程中可能會産生差錯:1可能會變成0,0可能會變成1。為了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須采用各種差錯檢驗措施。
1. 循環冗餘檢驗 CRC
有線線路上的錯誤率非常低,所以對于偶然的錯誤,利用錯誤檢測和重傳機制更為有效。數據鍊路層廣泛使用循環冗餘檢驗 CRC 的差錯檢錯技術。
誤碼率(BER):接收到的錯誤碼元數在總傳送碼元數中所占的比例。例如誤碼率為10-10時,表示平均每傳送1010個比特就會出現一個比特的差錯。
誤碼率=錯誤碼元數/碼元總數
要想讓接收端能夠判斷幀在傳輸過程中是否出現差錯,需要在傳輸的幀中包含用于檢測錯誤的信息,這部分信息稱為幀校驗序列FCS。
使用CRC編碼,需要先商定一個生成多項式G(x),生成多項式的最高位和最低位必須是1。假設原始信息有m位,則對應多項式M(x)。生成校驗碼思想就是在原始信息位後追加若幹校驗位,使得追加的信息能被G(x)整除。接收方接收到帶校驗位的信息,然後用G(x)整除。餘數為0,則沒有錯誤,反之則發生錯誤。
(1)生成CRC校驗碼
使用幀的數據部分和數據鍊路層首部合起來的數據(M=101001)來計算n位幀校驗序列FCS,放到幀的尾部,那麼校驗序列如何算出來呢?
圖3.5 計算FCS
得到的餘數就作為幀校驗序列FCS,由于最高階碼為3,那麼幀校驗序列FCS應該為3位,得到的餘數為1,不足3位,應在3的左邊添加2個“0”得到001。
所以本題的CRC校驗碼就是001。
計算出的幀校驗序列FCS=001和要發送的數據M=101001一起發送到接收端。 即:101001 001
圖3.6 通過CRC計算得出的FCS
(2)CRC校驗
接收端将收到的二進制數101001001去除以生成多項式對應的二進制字符串1101,如果餘數為0,則斷定該幀沒有差錯,就接收;如果餘數不等于0,則斷定該幀有差錯(但無法确定是哪一位或哪幾位出現了差錯,同時也不能糾錯),就丢棄。
2.海明碼
海明研究了用冗餘數據位來檢測和糾正代碼差錯的理論和方法。按照海明的理論,可以在數據位代碼上添加若幹冗餘位組成碼字。碼字之間的海明距離是一個碼字要變成另一個碼字時必須要改變的最小位數。
例如:10101和00110從第一位開始有3位不同,則海明距離為3。
10101和00110進行異或運算,并計算出異或運算結果中1的個數即為碼距
結果10011中1的個數為3,所以它們的碼距為3
海明碼是一種多重奇偶檢錯系統,它具有檢錯和糾錯的功能。為确保糾錯和檢錯,碼距必須大于或大于3。
對于m位的數據位增加k位的冗餘位,則組成n=m k位的糾錯碼
對于2m個有效碼字中的每一個,都有n個無效但可以糾錯的碼字。
m為信息位的個數,k為校驗位的個數
3.2 點到點信道的數據鍊路點到點信道是指一個鍊路上就一個發送端和一個接收端的信道,通常用在廣域網鍊路。
圖3.7 點到點鍊路
3.2.1 PPP協議的特點PPP協議提供了一種在點到點鍊路上封裝網絡層協議信息的标準方法。現在全世界使用得最多的數據鍊路層協議是點對點協議 PPP (Point-to-Point Protocol)。它的優點在于簡單、具備用戶驗證能力、可以解決IP分配等。用戶使用撥号電話線接入因特網時,一般都是使用 PPP 協議。
點到點信道通常用在廣域網鍊路。PPP協議(面向字節)和HDLC協議(面向比特)是目前應用最常用的廣域網中的鍊路層協議。通信線路質量較差的年代:HDLC(高級數據鍊路控制)。
PPP協議隻支持全雙工鍊路,是面向字節的數據鍊路層協議。
圖3.8 點到點鍊路
PPP協議的特點:
(1)簡單:PPP協議不負責可靠傳輸、糾錯和流量控制,也不需要給幀編号,接收端收到幀後,就進行CRC檢驗,如果CRC檢驗正确,就收下該幀,反之,直接丢棄,其他什麼也不做。
(2)封裝成幀:PPP協議必須規定特殊的字符作為幀定界符(每種數據鍊路層協議都有特定的幀定界符),以便使接收端能從收到的比特流中準确地找出幀的開始和結束位置。
(3)透明性:PPP協議必須保證數據傳輸的透明性。如果數據中恰好出現了和幀定界符一樣的比特組合時,就要采取有效的措施來解決這個問題。字節填充法。
(4)差錯檢測:PPP協議必須能夠對接收端接收到的幀進行檢測,并立即丢棄有差錯的幀。若在數據鍊路層不進行差錯檢測,那麼已出現差錯的無用幀就還會在網絡中繼續轉發,這樣一來會浪費掉很多網絡資源。
(5)支持多種網絡層協議:PPP協議必須能夠在同一條物理鍊路上同時支持多種網絡協議(如IP和IPv6等)的運行,這就意味着IP數據包和IPv6數據包都可以封裝在PPP幀中進行傳輸。
(6)多種鍊路類型:PPP必須能夠在多種類型的鍊路上運行,例如串行(一次隻發送一個比特)或并行(一次并行的發送多個比特),同步的或異步,低速的或高速的,電的或光的,交換的(動态的)或非交換的(靜态的)點對點鍊路。
(7)檢測連接狀态:PPP協議必須具有一種機制能夠及時(不超過幾分鐘)自動檢測出鍊路是否處于正常工作狀态。當出現故障的鍊路隔了一段時間後又重新恢複正常工作時,就特别需要有這種及時檢測功能。
(8)最大傳送單元:PPP協議必須對每一種類型的點對點鍊路設置最大傳送單元MTU的标準默認值。這樣做是為了促進各實體之間的互操作性。如果高層協議發送的分組過長且超過MTU的數值,PPP就要丢棄這樣的幀,并返回差錯。需要強調的是,MTU是數據鍊路層的幀可以載荷的數據部分的最大程度,而不是幀的總長度。不超過1500字節
(9)網絡層地址協商:PPP協議必須提供一種機制使通信的兩個網絡層(如兩個IP層)的實體能夠通過協商知道或配置彼此的網絡層地址。使用ADSL調制解調器撥号訪問Internet,ISP會給撥号的計算機分配一個公網地址,這就是PPP協議的功能。
(10)數據壓縮協商:PPP協議必須提供一種方法來協商使用數據壓縮算法,但PPP協議并不要求将數據壓縮算法進行标準化。
3.2.2 PPP協議的組成(1)高級數據鍊路控制協議
高級數據鍊路控制協議是将IP數據報封裝到串行鍊路的方法。
(2)鍊路控制協議LCP
鍊路控制協議 LCP (Link Control Protocol)用來建立、配置和測試數據鍊路連接,通信的雙方可協商一些選項。LCP主要負責建立和斷開連接、設置最大接收單元(MRU,Maximum Receive Unit)、設置驗證協議(PAP或CHAP)以及設置是否進行通信質量的監控。(身份驗證、計費功能)
(3)網絡控制協議NCP
網絡控制協議 NCP (Network Control Protocol)中的每一個協議支持不同的網絡層功能,如IP、IPv6等。負責IP地址設置以及是否進行TCP/IP首部壓縮等設備(設備之間的這種交互也叫協商(Negotiation))。
圖3.9 PPP協議的三個組成部分
通過PPP連接時,通常需要進行用戶名密碼的驗證,并且對通信兩端進行雙方向的驗證(通過ISP接入互聯網時,一般對ISP端不驗證)。其驗證協議有兩種,分别為PAP(Password Authentication Protocol)和CHAP(Challenge Handshake Authentication Protocol)。
PAP是PPP連接建立時,通過兩次握手進行用戶名和密碼驗證。其中密碼以明文方式傳輸。因此一般用于安全要求并不很高的環境,否則會有竊聽或盜用連接的危險。
CHAP則使用一次性密碼OTP(One Time Password),可以有效防止竊聽。此外,在建立連接後還可以進行定期的密碼交換,用來檢驗對端是否中途被替換。
3.2.3 PPP 協議的工作狀态(1)當用戶撥号接入 ISP 後,就建立了一條從用戶個人電腦到ISP的物理連接。
(2)用戶個人電腦向ISP發送一系列的鍊路控制協議LCP 分組(封裝成多個 PPP 幀),以便建立LCP連接。
(3)這些分組及其響應選擇了将要使用的一些 PPP 參數,接着還要進行網絡層配置,網絡控制協議NCP 給新接入的用戶個人電腦分配一個臨時的 IP 地址,使用戶個人電腦成為互聯網上的一個有IP地址的主機。
(4)通信完畢時,NCP 釋放網絡層連接,收回原來分配出去的 IP 地址。接着,LCP 釋放數據鍊路層連接。最後釋放的是物理層的連接。
3.2.4 PPP協議幀格式
圖3.10 PPP幀格式
标志字段F = 0x7E:幀開始定界符 ,1個字節。
注:符号“0x”表示後面的字符是用十六進制表示。十六進制7E 的二進制表示是 01111110。
地址字段A=0xFF:固定值,1個字節。(由于是點對點通信,地址字段實際上不起作用。)
控制字段 C =0x03:固定值,1個字節。
協議字段:用來表示“信息部分”裡是什麼内容,2個字節
當協議字段為 0x0021 時,PPP 幀的信息字段就是IP 數據報。
若為 0xC021, 則信息字段是 PPP 鍊路控制數據。
若為 0x8021,則表示這是網絡控制數據。
FCS:幀校驗序列,2個字節。
标志字段F = 0x7E:幀結束定界符 ,1個字節。
PPP 是面向字節的,所有的 PPP 幀的長度都是整數字節。
3.2.5 PPP幀填充方式當信息字段中出現和幀開始定界符和幀結束定界符一樣的比特(0x7E)組合時,就必須采取一些措施使這種形式上和标志字段一樣的比特組合不出現在信息字段中。
(1)異步傳輸使用字節填充
在異步傳輸的鍊路上,數據傳輸以字節為單位,PPP協議幀定界符定義為0x7E。
圖3.11 PPP幀字節填充
發送方處理:
信息字段中出現的每一個7E(PPP幀定界符)字節轉變成為 2 字節序列(7D,5E)。
信息字段中出現一個7D(轉義字符)的字節, 則将其轉變成為 2 字節序列(7D,5D)。
信息字段中出現 ASCII 碼的控制字符(數值小于0x20的字符),則在該字符前面要加入一個7D 字節,同時将該字符的編碼加上0x20。
接收方處理:
進行反變換即可恢複出原來的幀的數據部分。
例題:一個PPP幀的數據部分(用十六進制寫出)是7D 5E FE 27 7D 5D 7D 5D 65 7D 5E,問真正的數據部分是什麼?
7D 5E——7E
7D 5D——7D
7D 5E FE 27 7D 5D 7D 5D 65 7D 5E
所以真正的數據部分應該是:7E FE 27 7D 7D 65 7E
(2)同步傳輸使用零比特填充
在同步傳輸的鍊路上,數據傳輸以幀為單位,PPP協議幀定界符定義為0x7E,寫為二進制為0111 1110,可以看到中間有6個連續的1,隻要想辦法在數據部分不要出現6個連續的1,就肯定不會出現這樣的定界符。
零比特填充法:
在發送端,隻要發現有5個連續1,則立即填入一個0。這樣就可以保證信息字段中不會出現有連續的6個1。
接收端對幀中的比特流進行掃描。每當發現5個連續1時,就把這5個連續1後的一個0删除,以還原成原來的信息比特流。
圖3.12 PPP幀零比特填充
(未完待續)
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!