TCP/IP(四)數據鏈路層(一)


1. 數據鏈路層概述

數據鏈路層由來單純的電信號0和1沒有任何意義,必須規定電信號多少位一組,每組什么意思;

數據鏈路層的功能定義了電信號的組方式;

據鏈路層的數據塊幀(frame),幀是數據鏈路層的基本傳送單元;為了確保相鄰兩結點之間無差錯傳送,鏈路層對數據包分組后另加一層封裝構成“幀”。

數據包每經過網絡中的一個結點都要完成幀的拆卸和重新組裝:在驗證上一條鏈路無差錯傳送之后,拆去包裝取出數據包,再加上新的幀頭和幀尾構成新幀后往下一個結點傳送。

幀的打包有4種:

  • 1)字符計數法。在幀的開頭約定一個固定長度的字段來標明該幀的字符個數。接收方可以根據該字段的值來確定幀尾和幀頭。
  • 2)首尾界符法。在幀的起始和結束位置分別用開始和結束字符標記。
  • 3)首尾標志法。在幀開頭和結束處,分別用一位特殊組合信息來標志幀的開始和結束。
  • 4)物理層編碼違例法。在幀的開始和結束處分別用非法編碼系列作為標志。

數據鏈路層依靠物理層的服務來傳輸幀,實現數據鏈層的建立、數據傳輸、數據鏈路釋放以及信息幀的發送過程流量控制和差錯控制功能,為網絡層提供可靠的結點與結點間幀傳輸服務。

為達到這一目的,數據鏈路必須具備一系列相應的功能,主要有:如何將數據組合成數據塊,如何控制幀在物理信道上的傳輸,包括如何處理傳輸差錯,如何調節發送速率以使與接收方相匹配;以及在兩個網絡實體之間提供數據鏈路通路的建立、維持和釋放的管理。

數據鏈路層在不可靠的物理介質上提供可靠的傳輸。

該層的作用包括:物理地址尋址、數據的成幀、流量控制、數據的檢錯、重發等。

數據鏈路層之間的運輸、數據鏈路層之間的信道,見下圖。

 

 

 

 鏈路:一條點到點的物理線路段,中間沒有任何其他的交換結點,通俗的將,就是一根線,其中不經過任何東西,這樣的就是鏈路,一條鏈路只是一條通路的一個組成部分;

數據鏈路:除了物理線路外,還必須有通信協議來控制這些數據的傳輸。若把實現這些協議的硬件和軟件加到鏈路上,就構成了數據鏈路。

 

 

 

 2. 數據鏈路層的三個問題

三個基本問題

(1)封裝成幀:

在一段數據的前后分別添加首部和尾部,構成一個幀。

每一個鏈路層協議都規定了所能傳送的幀的數據部分的長度上限----最大傳送單元(MTU)。

(2)透明傳輸:

數據透明傳輸就是用戶不受協議中的任何限制,可隨機的傳輸任意比特編碼的信息,用戶可以完全不必知道協議中所規定的結束段的比特編碼或者其他的控制字符,因而不受限制的進行傳輸。

(3)差錯檢測

講解如何封裝幀,封裝完后幀的傳輸問題、傳輸到達目的地,如何檢驗該段幀是否完整。

2.1 封裝成幀

數據鏈路層就是在ip數據報的前面和末尾加了一個首部和尾部來代表ip數據包的開始和結束,首部和尾部都是由8位二進制數表示的,可以一樣也可以不一樣。

 

 2.2 透明傳輸

問題:在ip數據包中如果有一個跟幀尾部一樣的8位二進制數,系統會提前結束接受數據包,這樣數據就被破壞。出現如下圖這樣的問題:

 

 

 

 解決:通過在特殊字符前面增加一個轉義字符ESC,就可以解決上面所遇到的問題,在接收端,將數據包中所有ESC的字符刪除,

遇到兩個ESC的,就刪除第一個,這樣一開始傳輸的時候有ESC轉義字符,接受完就沒了,所以說的是透明傳輸

 

 

 

2.3 差錯檢測

問題:傳輸過程中可能會產生比特差錯:1可能會變成0而0也可能變成1。在一段時間內,傳輸錯誤的比特占所傳輸比特總數的比率稱為誤碼率BER(BitErrorRate)。

為了檢測傳送的幀中ip數據包是否完整,是否沒有被損壞,所以需要差錯檢測。

解決:循環冗余檢測CRC。

在發送端,先把數據划分為組,假定每組K個比特(K位),同時假定待傳送的一組數據M=101001(K=6),我們在M的后面再添加供差錯檢測用的N位冗余碼一起發送.

N位冗余碼求解方法:

首先,用二進制的模2運算[一種特殊的運算:00得1,11得1,01得0,10得0,但不進位/退位]進行2^N乘M的運算,這相當於在M后面添加N個0;

然后,用得到的(K+N)位的數除以事先選定好的長度為(N+1)位的除數P,得出商為Q且余數是R,余數R比除數P少1位,即R是N位;

最后,使用R替換N個0,即得到要發送的數據.

 

 

 

 檢測:

若得出的余數R=0,則判定這個幀沒有差錯,就接受(accept)。

若余數R≠0,則判定這個幀有差錯,就丟棄

生成多項式:也很簡單,例如上面的除數1101就用P(X)=X3+X2+1(X3是x的三次方的意思)最高位是2的三次方,就是x的三次方這樣算,例如,101101P(X)=X5+X3+X2+1。

注意:這種檢測方法並不能確定究竟是哪一個/幾個比特出了差錯,但是只要經過嚴格的挑選,並使用位數足夠多的除數P,那么出現檢測不到的差錯的概率就很小很小了;

因此僅用循環冗余校驗CRC差錯檢驗技術只能做到”無差錯接受”.

3. 可靠傳輸

在有些情況下,我們需要數據鏈路層向上的網絡層提供“可靠傳輸”的服務,就是發送端發送什么,在對應的接收端就收到什么,前面的CRC只能檢測出位數的差錯,不能正確的檢測出更精准的錯誤。

3.1 停止等待協議

停止等待就是每發送完一個分組就停止發送,等待對方的確認。在收到確認后再發送下一個分組。

超時重傳:解決上面如果數據分組或確認分組丟失時,發送方將會一直等待接收方的確認分組的問題,設置一個超時計時器,若到超時計時器所設置的重傳時間,而發送方仍收不到接收方的任何確認分組,則會重傳原來的分組。

重復分組:如果只使用超時重傳來解決,不用發送確認分組,那么會出現重復分組的問題,就是當接收方收到分組后,發回確認分組時,確認分組丟失,那么會觸發超時重傳,則接收方會收到兩個重復的分組,這里需要注意的是,是確認分組丟失。第一次發送的分組已經正確接收了。

停止等待算法:

 

 

 


 

 

 畫圖分析一下:

3.2 退回N步協議

其實跟停止等待協議差不多,只是使用的是流水線傳輸方式,發送方不間斷的發送分組,每次發送的分組大小有限制,如果不限制,可能會使接收方或網絡來不及處理這些分組,導致分組的丟失,所以每次發送的分組大小可能是5,6或者更多。這種限制就是回退N步協議。

回退N步協議:利用發送窗口來限制發送方連續發送分組的個數。要是發送窗口為1就是我們上面所討論的停止等待協議。

退回等待是怎么工作:

 

 

 

 

這個就是回退N步協議,根據這個原理圖,也能看出,為什么叫回退N步協議了,在哪里出錯了,就必須回退到哪里全部重傳,為了解決這個,又有了選擇重傳協議

3.3 選擇重傳協議

改進回退N布協議,方式都是一樣,在接受方必須逐一確認,但是出現錯誤,只需要重傳出現錯誤的那一個分組,不用全部重傳,這里的全部,指的是在出現錯誤的分組之后的所有分組,前提是在同一個發送窗口中。

總結:不可靠的鏈路上,通過各種協議,就能達到可靠傳輸,來保證數據的准確性。

4. 兩種信道下的數據鏈路層

點對點信道的數據鏈路層、廣播信道的數據鏈路層;

在TCP/IP協議族中,鏈路層的主要有三個目的:

(1)為IP模塊發送和接受數據報

(2)為ARP模塊發送ARP請求和接受ARP應答

(3)為RARP發送RARP請求和接受RARP應答

TCP/IP支持多種不同的鏈路層協議,這取決於網絡所使用的硬件,如以太網,令牌環網,FDDI,及RS-232串行線等。

4.1 點對點協議

概述:點對點協議PPP(PointtoPointProtocol),我們大多數用戶使用的撥號電話線接入因特網時,一般使用的就是PPP協議

 

 

 (1)PPP協議的特點

1)簡單:接收方每接收一個幀,就進行CRC檢驗,檢驗正確,就收下,否則就丟棄,它是不可靠傳輸,所以這就是簡單的原因;

2)封裝成幀:

3)多種網絡層協議:數據鏈路層的上一層就是網絡層,所以它同時支持多種網絡層協議的運行;

4)多種類型鏈路:

比如,串行的、並行的,(串行:一個比特一個比特發送,只需要一條線路,並行:一次性傳輸n個比特,所以需要n條線路,所以叫並行);

同步的、異步的(同步:以穩定的比特流的形式傳輸異步:以字節為獨立的傳輸單位,字節跟字節之間的時間間隔不確定,但字節中的每個比特仍是同步的);

低速或高速、電或光,等不同類型的鏈路都能支持。

5)差錯檢測:就是用CRC來檢驗;

6)透明傳輸:

檢測連接狀態:檢測點跟點之間的連接狀態,也就是在PC機和ISP之間的線路;

最大傳送單位:PPP協議幀有最大的傳送單元,發送的分組不能超過這個最大長度;

網絡層地址協商:使通信的兩個網絡層實體能夠通過協商知道或能夠配置彼此的網絡層地址,通俗的講,就是在分配IP地址時,就先需要這個協商才能解決;

(2)PPP協議的組成

1)在串行鏈路上封裝IP數據報的方法,PPP既支持數據為8和無奇偶檢驗的異步模式,還支持面向比特的同步連接。即適應多種性質的鏈路。

2)建立,配置及測試數據鏈路的鏈路控制協議(LCP:LinkControlProtocol)。它允許通信雙方進行協商,以確定不同的選項。

3)針對不同網絡層協議的網絡控制協議(NCP:NetWorkProtocol)體系。NCP允許點到點連接使用多種網絡層協議,也就是因為跟網絡層連接在一起,所以需要支持上一層的多種協議,這樣才能完成一系列的功能,比如,網絡層地址協商。

 

  (3)PPP協議幀格式

 

 

  (4)PPP協議幀傳輸時透明輸出問題

PPP協議的每一幀都以標志字符0x7e開始和結束,緊接着是一個地址字節,值始終是0xff,然后是一個值為0x03的控制字節,然后是協議字段,類似於以太網中的類型字段的功能。當它的值為0x0021時,表示信息字段是一個IP數據報,當它的值為0xc021時,表示信息字段時鏈路控制數據(LCP),當值為0x8021時表示信息字段是網絡控制數據(NCP)。

1)字節填充:

使用的是字節傳輸,也就是異步,所有的PPP幀的長度都是整數字節,所以會出現IP數據包中有字節跟開始結束標志字節相同的問題;

由於結束和開始的標志字符是0x7e,因此當該字符出現的時候,PPP需要對它進行轉義,在同步鏈路中,該過程是通過一種稱作比特填充的硬件技術來完成的。在異步鏈路中,特殊字符0x7d用作轉義字符,當它出現在PPP數據幀中的時候,那么緊接的字符的第六個比特要取其補碼,具體過程如下:

解決:標志字段F=0x7E

1)IP數據包中出現0x7E字節:需連續傳送兩個字符0x7d和0x5e,以實現標志字符的轉義;

2)當IP數據包遇到轉義的字符0x7d時,需連續傳送兩個字符:0x7d和0x5d,以實現轉義字符的轉義。

3)默認的情況下,如果字符的值小於0x20,一般都要進行轉義。例如,遇到0x01時需連續傳送0x7d和0x21兩個字符。

4)IP數據包中出現ASCII碼的控制字符,則在該控制字符前面加0x7D

與SLIP相似的是,由於PPP通常是用於低速的串行鏈路,因此減少每一幀的字節數可以降低應用程序的交互時延,利用鏈路控制協議,大多數的產品通過協商可以省略標志符和地址字段,並且把協議字段由2個字段減少到1個字節。如果我們把PPP的幀格式與SLIP的幀格式進行比較就會發現,PPP只增加了額外的3個字節。

2)零比特填充方法

使用的是比特流傳輸(一連串的比特連續傳送),也就是同步,PPP協議就采用零比特填充方法來實現透明傳輸。

基本原理:在發送端,只要發現有5個連續的1,則立即填入一個0.接收端對幀中的比特流進行掃描時,每當發現5個連續的1時,就把這5個連續的1之后的一個0刪除(因為01111110(6個1)表示HDLC數據塊的起始和結束,從而構成最終傳輸的幀).

注意:只要出現了5個連續的1,則必須加上一個0!

(5)PPP協議的工作流程

鏈路靜止、鏈路建立、鑒別、網絡層協議、鏈路打開、鏈路終止大概流程圖就是下面這個圖這樣:

 

 

 

 六步的具體實現細節(驗證了PPP協議的三個組成部分):

1)鏈路靜止到鏈路建立:用戶撥號接通ISP撥號服務器后,就創建了PC機到ISP服務器的物理連接,即創建一條怎么樣的信道,通過什么傳送數據,都是物理層需要做的事情。

2)鏈路建立到鑒別:建立物理連接后,PPP中LCP協商一些配置選項(鏈路上的最大幀長,所使用的鑒別協議,或者不使用PPP幀中的地址和控制字段);

跟ISP協商,即發送LCP的配置請求幀,而ISP也可以發送幾種響應,配置確認幀:所有選項都接受配置否認幀,所有選項都理解但不能接受配置拒絕幀,有的選項無法識別或不能接受,需要協商。通過一系列的協商后,此過程就結束,就到鑒別狀態;如果協商失敗,就直接回到鏈路靜止狀態。

3)鑒別到網絡層協議:這里到達網絡層協議之間做的事情就是鑒別身份。即只允許傳送LCP協議的分組、鑒別協議的分組以及檢測鏈路質量的分組。若使用口令鑒別協議PAP(PasswordAuthenticationProtocol),則需要發起通信的一方發送身份標識符和口令。

系統可運行用戶重試若干次。如果需要有更好的安全性,可使用更加復雜的口令握手鑒別協議CHAP(Challenge-HandshakeAuthenticationProtocol)。若鑒別身份失敗,則轉到鏈路終止狀態(LinkDead)。

若鑒別成功,則進入網絡層協議狀態(Network-LayerProtocol)。

4)網絡層協議到鏈路打開:前面已經經過PPP協議的前兩層,接下來就是NCP(網絡控制協議);這一階段就是給PC機分配一個IP地址和對鏈路層進行網絡層協議的設置,讓鏈路層能支持網絡層的工作;

5)鏈路打開到鏈路終止:進行傳輸數據,如果傳輸完成,就發送終止請求分組,收到終止確認分組后,就到終止狀態;

6)鏈路終止到鏈路靜止:當物理層沒有載波時,就到靜止狀態。

(6)總的來說,PPP協議有以下這些優點:

(1)PPP支持在單根串行線路上運行多種協議,不只是IP協議

(2)每一幀都有循環冗余檢驗

(3)通信雙方可以進行IP地址的動態協商(使用IP網絡控制協議)

(4)連路控制協議可以對多個數據鏈路選項進行設置。

4.2 廣播信道的數據鏈路層

(1)以太網和局域網的區別

以太網是通信協議標准,該標准定義在局域網(LAN)中采用的電纜類型和信號處理方法,比如CSMA/CD協議。

局域網:在較小范圍內組建的網絡。

以太網是一種局域網,而局域網卻不一定是以太網;大多數局域網采用以太網標准。

在局域網中,采用廣播信道;

廣播信道:就是一台PC機發送數據給另一台PC機,在同一個局域網中的計算機都能接收到該數據,這就像廣播一樣,所以這種就叫做廣播信道。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM