前言
上篇文章,我們一同學完了物理層的全部內(nèi)容,在本篇文章中,我們初步學習數(shù)據(jù)鏈路層,理解數(shù)據(jù)鏈路和幀的相應概念,知曉封裝成幀,透明傳輸,差錯檢測的含義。
3.1 數(shù)據(jù)鏈路和幀
3.1.1 數(shù)據(jù)鏈路和幀
鏈路是從一個節(jié)點到相鄰節(jié)點的一段物理線路,而中間沒有任何其他的交換節(jié)點。
數(shù)據(jù)鏈路則不同。這是因為當需要在一條線路上傳送數(shù)據(jù)時,除了必須有一條物理線路外,還必須有一些必須要的通信協(xié)議來控制這些數(shù)據(jù)的傳輸。若把實現(xiàn)這些協(xié)議的硬件和軟件加到鏈路上,就構成了數(shù)據(jù)鏈路,現(xiàn)在最常用的方法是使用網(wǎng)絡適配器來實
現(xiàn)這些協(xié)議。
也有人采用另外的術語。這就是把鏈路分為物理鏈路和邏輯鏈路。物理鏈路就是鏈路,邏輯鏈路就是數(shù)據(jù)鏈路,是物理鏈路加上必要的通信協(xié)議。
早起的數(shù)據(jù)通信協(xié)議層叫做通信規(guī)程。
點對點信道的數(shù)據(jù)鏈路層的協(xié)議數(shù)據(jù)單元——幀。
數(shù)據(jù)鏈路層把網(wǎng)絡層交下來的數(shù)據(jù)構成幀發(fā)送到鏈路上,以及把接收到的幀中的數(shù)據(jù)取出并上交給網(wǎng)絡層。在互聯(lián)網(wǎng)中,網(wǎng)絡層協(xié)議數(shù)據(jù)單元就是IP數(shù)據(jù)報(或簡稱為數(shù)據(jù)報、分組或包)。
點對點信道的數(shù)據(jù)鏈路層在進行通信時的主要步驟如下:
(1) 節(jié)點A的數(shù)據(jù)鏈路層把網(wǎng)絡層交下來的IP數(shù)據(jù)報添加首部和尾部封裝成幀。
(2) 節(jié)點A把封裝好的幀發(fā)送給節(jié)點B的數(shù)據(jù)鏈路層。
(3) 若節(jié)點B的數(shù)據(jù)鏈路層收到的幀無差錯,則從收到的幀中提取出IP數(shù)據(jù)報交給上面的網(wǎng)絡層;否則丟棄這個幀。
3.1.2 三個基本問題
三個基本問題是:封裝成幀、透明傳輸和差錯檢測
1、封裝成幀
封裝成幀就是在一段數(shù)據(jù)的前后分別添加首部和尾部,這樣就構成了一個幀。接收端在收到物理層上交的比特流后,就能根據(jù)首部和尾部的標記,從收到的比特流中識別幀的開始和結束。
圖中表示用幀首部和幀尾部封裝成幀的一般概念
網(wǎng)絡層的IP數(shù)據(jù)報傳送到數(shù)據(jù)鏈路層就稱為幀的數(shù)據(jù)部分。在幀的數(shù)據(jù)部分的前面和后面分別添加上首部和尾部,構成一個完整的幀。這樣的幀就是數(shù)據(jù)鏈路層的數(shù)據(jù)傳送單元。一個幀的幀長等于幀的數(shù)據(jù)部分長度加上幀首部和幀尾部的長度。首部和尾部的一個重要作用就是進行幀定界。此外,首部和尾部還包括許多必要的控制信息,在發(fā)送幀時,是從幀首部開始發(fā)送的。各種數(shù)據(jù)鏈路層協(xié)議都對幀首部和幀尾部的格式有明確的規(guī)定。
為了提高幀的傳輸效率,應當使幀的數(shù)據(jù)部分長度盡可能地大于首部和尾部的長度。但是,每一種鏈路層協(xié)議都規(guī)定了所能傳送的幀的數(shù)據(jù)部分長度上限——最大傳送單元MTU。
當數(shù)據(jù)是由可打印的ASCII碼組成的文本文件時,幀定界可以使用特殊的幀定界符。
由于使用了幀定界符,接收端就知道前面收到的數(shù)據(jù)是個不完整的幀。
2、透明傳輸
由于幀的開始和結束的標記使用專門指明的控制字符,因此,所傳輸?shù)臄?shù)據(jù)中的任何8比特的組合一定不允許和用作幀定界的控制字符的比特編碼一樣,否則就會出現(xiàn)幀定界的錯誤。
如圖:如果數(shù)據(jù)中的某個字節(jié)的二進制代碼恰好和SOH或EOT這種控制字符一樣,數(shù)據(jù)鏈路層就會錯誤地“找到幀的邊界”,把部分幀收下,而把剩下的那部分數(shù)據(jù)丟棄。
透明表示:某一個實際存在的事物看起來卻好像不存在一樣
“在數(shù)據(jù)鏈路層透明傳送數(shù)據(jù)”表示無論什么樣的比特組合的數(shù)據(jù),都能夠按照原樣沒有差錯地通過這個數(shù)據(jù)鏈路層。因此,對所傳
送的數(shù)據(jù)來說,這些數(shù)據(jù)就“看不見”數(shù)據(jù)鏈路層有什么妨礙數(shù)據(jù)傳輸?shù)臇|西?;蛘哒f,數(shù)據(jù)鏈路層對這些數(shù)據(jù)來說是透明的。
為了解決透明傳輸問題,就必須設法使數(shù)據(jù)中可能出現(xiàn)的控制字符“SOH”和“EOT”在接收端不被解釋為控制字符。具體的方法是:發(fā)送端的數(shù)據(jù)鏈路層在數(shù)據(jù)中出現(xiàn)控制字符“SOH”或“EOT”的前面插入一個轉義字符“ESC”,而在接收端的數(shù)據(jù)鏈路層在把數(shù)據(jù)送到網(wǎng)絡層之前刪除這個插入的轉義字符。這種方法稱為字節(jié)填充或字符填充。如果轉義字符也出現(xiàn)在數(shù)據(jù)當中,那么解決方法仍然是轉義字符的前面插入一個轉義字符。因此當接收端收到連續(xù)的兩個轉義字符時,就刪除其中前面的一個。
3、差錯檢測
比特在傳輸過程中可能會產(chǎn)生差錯:1可能會變成0,0也可能會變成1。這就叫做比特差錯。
在一段時間內(nèi),傳輸錯誤的比特占傳輸比特總數(shù)的比率稱為誤碼率。
誤碼率與信噪比有很大的關系。提高信噪比,就可以使誤碼率降低。
為了保證數(shù)據(jù)傳輸?shù)目煽啃?,在計算機網(wǎng)絡傳輸數(shù)據(jù)時,必須采用各種差錯檢測措施。目前在數(shù)據(jù)鏈路層廣泛使用了循環(huán)冗余檢驗CRC的檢錯技術。
在發(fā)送端,先把數(shù)據(jù)劃分為組,假定每組K個比特?,F(xiàn)假定待傳送的數(shù)據(jù)M = 101001 (k = 6)。CRC運算就是在數(shù)據(jù)M的后面添加供差錯檢測用的n位冗余碼,然后構成一個幀發(fā)送出去,一共發(fā)送(k+n)位。
n位冗余碼如此得出:用二進制的模2運算進行2n乘M的運算,這相當于在M后面添加n個0。得到的(k+m)位的數(shù)除以收發(fā)雙方事先商定的長度(n+1)位的除數(shù)P,得出商是Q而余數(shù)是R(n位)。
余數(shù)R就作為冗余碼拼接在數(shù)據(jù)M的后面發(fā)送出去。這種為了進行檢錯而添加的冗余碼常稱為幀檢驗序列FCS。
在接收端把接收到的數(shù)據(jù)以幀為單位進行CRC檢驗:把收到的每一個幀都除以同樣的除數(shù)P(模2運算),然后檢查余數(shù)R、
(1) 若得出R = 0,則判定這個幀沒有差錯,就接受。
(2) 若余數(shù)R ≠ 0,則判定這個幀有差錯,就丟棄。
用多項式P(X) = X3 + X2 + 1可代表除數(shù)P = 1101 P(X)稱為生成多項式。
在數(shù)據(jù)鏈路層若僅僅使用循環(huán)冗余檢驗CRC差錯檢測技術,則只能做到對幀的無差錯接受,即:“凡是接收端數(shù)據(jù)鏈路層接收的幀,我們都能以非常接近于1的概率認為這些幀在傳輸過程中沒有差錯“。接收端丟棄的幀雖然曾收到了,但最終還是因為有差錯被丟棄,即沒有接受。上述所述的可近似地表述為:“凡是接收端數(shù)據(jù)鏈路層接受的幀均無差錯?!?/p>
傳輸差錯可分為兩大類:一類就是最基本的比特差錯,另一類是收到的幀并沒有出現(xiàn)比特差錯,但卻出現(xiàn)了幀丟失、幀重復或幀失序。
在數(shù)據(jù)鏈路層使用CRC檢驗能夠實現(xiàn)無比特差錯的傳輸,但這還不是可靠傳輸。
在CRC檢錯的基礎上,增加了幀編號、確認和重傳機制。收到正確的幀就要想發(fā)送端發(fā)送確認。發(fā)送端在一定的期限在CEC檢錯的基礎上,增加了幀編號、確認和重傳機制。收到正確的幀就要向發(fā)送端發(fā)送確認。發(fā)送端在一定的期限內(nèi)若沒有收到對方的確認,就認為出現(xiàn)了差錯,因此就進行重傳,直到收到對方的確認為止。
現(xiàn)在的通信線路的質(zhì)量已經(jīng)大大提高了,由通信鏈路不好引起差錯的概率已經(jīng)大大降低。因此,現(xiàn)在互聯(lián)網(wǎng)就采取區(qū)別對待的方法。
對于通信質(zhì)量良好的有線傳輸鏈路,數(shù)據(jù)鏈路層協(xié)議不使用確認和重傳機制,即不要求數(shù)據(jù)鏈路層向上提供可靠傳輸?shù)姆铡H绻跀?shù)據(jù)鏈路層傳輸數(shù)據(jù)時出現(xiàn)了差錯并且需要進行改正,那么改正差錯的任務就由上層協(xié)議來完成。
對于通信質(zhì)量較差的無線傳輸鏈路,數(shù)據(jù)鏈路層協(xié)議使用了確認和重傳機制,數(shù)據(jù)鏈路層向上提供可靠傳輸?shù)姆铡?/p>
這樣做可以提高通信效率。
3.2 點對點協(xié)議PPP
高級數(shù)據(jù)鏈路控制HDLC成為通信線路質(zhì)量較差的年代比較流行的數(shù)據(jù)鏈路層協(xié)議。
而現(xiàn)在,對于點對點的鏈路,簡單得多的點對點協(xié)議PPP則是目前使用得最廣泛的數(shù)據(jù)鏈路層協(xié)議。
3.2.1 PPP協(xié)議的特點
PPP協(xié)議是用戶計算機和ISP進行通信時所使用的數(shù)據(jù)鏈路層協(xié)議。
1、PPP協(xié)議應滿足的需求:
(1) 簡單
這種數(shù)據(jù)鏈路層的協(xié)議非常簡單:接收方每收到衣蛾幀,就進行CRC檢驗。如CRC檢驗正確,就收下這個幀;反之,就會丟棄這個幀,其他什么也不做。
(2) 封裝成幀
PPP協(xié)議必須規(guī)定特殊的字符作為幀定界符。
(3) 透明性
PPP協(xié)議必須保證數(shù)據(jù)傳輸?shù)耐该餍浴?/p>
(4) 多種網(wǎng)絡層協(xié)議
PPP協(xié)議必須能夠在同一條物理鏈路上同時支持多種網(wǎng)絡層協(xié)議的運行。
(5) 多種類型鏈路
除了要支持多種網(wǎng)絡層的協(xié)議外,PPP還必須能夠在多種類型的鏈路上運行。
(6) 差錯檢測
PPP協(xié)議必須能夠對接收端收到的幀進行檢測,并立即丟棄有差錯的幀。
(7) 檢測連接狀態(tài)
PPP協(xié)議必須具有一種機制能夠及時自動檢測出鏈路是否處于正常工作狀態(tài)。
(8) 最大傳送單元
PPP協(xié)議必須對每一種類型的點對點鏈路設置最大傳送單元MTU的標準默認值。MTU是數(shù)據(jù)鏈路層的幀可以載荷的數(shù)據(jù)部分的最大長度,而不是幀的總長度。
(9) 網(wǎng)絡層地址協(xié)商
PPP協(xié)議必須提供一種機制使通行的兩個網(wǎng)絡層的實體能夠通過協(xié)商知道或能夠配置彼此的網(wǎng)絡層地址。
(10) 數(shù)據(jù)壓縮協(xié)商
PPP協(xié)議必須提供一種方法來協(xié)商使用數(shù)據(jù)壓縮算法。
在TCP/IP協(xié)議簇中,可靠傳輸由運輸層的TCP協(xié)議負責,因此數(shù)據(jù)鏈路層的PPP協(xié)議不需要進行糾錯,不需要設置序號,也不需要進行流量控制。PPP協(xié)議不支持多點線路(即一個主站輪流和鏈路上的多個從站進行通信)。而且支持點對點的鏈路通信。此外,PPP協(xié)議只支持全雙工鏈路。
2、PPP協(xié)議的組成
PPP協(xié)議有三個組成部分:
(1) 一個將IP數(shù)據(jù)報封裝到串行鏈路的方法。
(2) 一個用來建立、配置和測試數(shù)據(jù)鏈路連接的鏈路控制協(xié)議ICP。
(3) 一套網(wǎng)絡控制協(xié)議NCP。
3.2.2 PPP協(xié)議
1、各字段的意義
如圖,PPP幀的首部和尾部分別為四個字段和兩個字段。
首部的第一個字段和尾部的第二個字段都是標志字段F,規(guī)定為0x7E(符號0x表示十六進制,十六進制的7E表示01111110)。
標志字段表示一個幀的開始或結束,因此標志字段就是PPP幀的定界符。連續(xù)兩幀之間只需要用一個標志字段。如果出現(xiàn)連續(xù)兩個標志字段,就表示這是一個空幀,應當丟棄。
首部中的地址字段A規(guī)定為0xFF(即11111111),控制字段C規(guī)定為0x03(即00000011)。這兩個字段實際上并沒有攜帶PPP幀的信息。
PPP首部的第四個字段是2字節(jié)的協(xié)議字段。當協(xié)議字段為0x0021時,PPP幀的信息字段就是IP數(shù)據(jù)報。若為0xC021,則信息字段是PPP鏈路控制協(xié)議LCP的數(shù)據(jù),而0x8021表示這是網(wǎng)絡層的控制數(shù)據(jù)。
信息字段的長度是可變的,不超過1500字節(jié)。
尾部中的第一個字段(2字節(jié))是使用CRC的幀檢驗序列FCS。
2、字節(jié)填充
當信息字段中出現(xiàn)和標志字段一樣的比特(0x7E)組合時,就必須采取一系列措施使這種形式上和標志字段一樣的比特組合不出現(xiàn)在信息字段中。當PPP使用異步傳輸時,它把轉義符定義為0x7D,并使用字節(jié)填充。
RFC1662規(guī)定了如下的填充方法:
(1) 把信息字段中出現(xiàn)的每一個0x7E字節(jié)轉變成為2字節(jié)序列(0x7D,0x5E)
(2) 把信息字段中出現(xiàn)一個0x7D的字節(jié)(即出現(xiàn)了和轉義字符一樣的比特組合),則把0x7D轉變?yōu)?字節(jié)序列(0x7D,0x5D)。
(3) 把信息字段中出現(xiàn)ASCII碼的控制字符(即數(shù)值小于0x20的字符),即在該字符前面要加入一個0x7D字節(jié),同時將該字符的編碼加以改變。
由于在發(fā)送端進行了字節(jié)填充,因此在鏈路上傳送的信息字節(jié)數(shù)就超過了原來的信息字節(jié)數(shù),但接收端在收到數(shù)據(jù)后再進行與發(fā)送端字節(jié)填充相反的變換,就可以正確地恢復出原來的信息。
3、零比特填充
PPP協(xié)議用在SONET/SDH鏈路時,使用同步傳輸(一連串的比特連續(xù)傳送)而不是異步傳輸(逐個字符地傳送)。在這種情況下,PPP協(xié)議采用零比特填充方法來實現(xiàn)透明傳輸。
零比特填充的具體做法是:在發(fā)送端,先掃描整個信息字段,只要發(fā)現(xiàn)有5個連續(xù)1,則立即填入一個0。因此經(jīng)過這種零比特填充后的數(shù)據(jù),就可以保證在信息字段中不會出現(xiàn)6個連續(xù)1。接收端在收到一個幀時,先找到標志字段F以確定一個幀的邊界,接著再用硬件對其中的比特流進行掃描。每當發(fā)現(xiàn)5個連續(xù)1時,就把這5個連續(xù)1后的一個0刪除,以還原成原來的信息比特流。這樣就保證了透明傳輸:在所傳送的數(shù)據(jù)比特流中可以傳送任意組合的比特流,而不會引起對幀邊界的錯誤判斷。
3.2.3 PPP協(xié)議的工作狀態(tài)
PPP鏈路初始化如圖所示
PPP鏈路的起始和終止狀態(tài)永遠是“鏈路靜止”狀態(tài),這時在用戶個人電腦和ISP的路由器之間并不存在物理層的連接。
當用戶個人電腦通過調(diào)制解調(diào)器呼叫路由器時,路由器就能夠檢測到調(diào)制解調(diào)器發(fā)出的載波信號。在雙方建立了物理層連接后,PPP就進入“鏈路建立”狀態(tài),其目的是建立鏈路層的LCP連接。
這時LCP開始協(xié)商一些配置選項,即發(fā)送給LCP的配置請求幀,這時PPP幀,其協(xié)議字設置為LCP對應的代碼。而信息字段包含特定的配置請求。鏈路的另一端可以發(fā)送以下幾種響應中的一種。
(1) 配置確認幀:所有選項都接受
(2) 配置否認幀:所有選項都理解但不能接受
(3) 配置拒絕幀:選項有的無法識別或不能接受,需要協(xié)商
LCP配置選項包括鏈路上的最大幀長、所使用的鑒別協(xié)議的規(guī)約,以及不使用PPP幀中的地址和控制字段。
協(xié)商結束后雙方就建立了LCP鏈路,接著就進入“鑒別狀態(tài)”。這一狀態(tài),只允許傳送LCP協(xié)議的分組、鑒別協(xié)議的分組以及監(jiān)測鏈路質(zhì)量的分組。若使用口令鑒別協(xié)議RAP,則需要發(fā)起通信的一方發(fā)送身份標識和口令。系統(tǒng)可允許用戶重試若干次。如果需要有更好的安全性,則可使用更加復雜的口令握手鑒別協(xié)議CHAP。若鑒別身份失敗,則轉到“鏈路終止”狀態(tài)。若鑒別成功,則進入“網(wǎng)絡層協(xié)議”狀態(tài)。
在“網(wǎng)絡層協(xié)議”狀態(tài),PPP鏈路兩端的網(wǎng)絡控制協(xié)議NCP根據(jù)網(wǎng)絡層的不同協(xié)議互相交換網(wǎng)絡層特定的網(wǎng)絡控制分組。這個步驟是很重要的,因為現(xiàn)在的路由器都能夠同時支持多種網(wǎng)絡層協(xié)議??傊?,PPP協(xié)議兩端的網(wǎng)絡層可以運行不同的網(wǎng)絡層協(xié)議,但仍然可使用同一個PPP協(xié)議進行通信。
如果在PPP連路上運行的是IP協(xié)議,則對PPP鏈路的每一端配置IP協(xié)議模塊時就要使用NCP中支持IP的協(xié)議——IP控制協(xié)議IPCP。IPCP分組也封裝成PPP幀在PPP連路上傳送。在低速鏈路上運行時,雙方還可以協(xié)商使用壓縮的TCP和IP首部,以減少在鏈路上發(fā)送的比特數(shù)。
當網(wǎng)絡層配置完畢后,鏈路就進入可進行數(shù)據(jù)通信的“鏈路打開”狀態(tài)。鏈路的兩個PPP端點,可以彼此向對方發(fā)送分組。兩個PPP端點還可發(fā)送回送請求LCP分組和回送回答LCP分組,以檢查鏈路的狀態(tài)。
數(shù)據(jù)傳輸結束后,可以由鏈路的一端發(fā)出終止請求LCP分組請求終止鏈路連接,在收到對方發(fā)來的終止確認LCP分組后,轉到“鏈路終止”狀態(tài)。如果鏈路出現(xiàn)故障,也會從“鏈路打開”狀態(tài)轉到“鏈路終止狀態(tài)”。當調(diào)制解調(diào)器的載波停止后則回到“鏈路靜止”狀態(tài)。
PPP協(xié)議已不是純粹的數(shù)據(jù)鏈路層協(xié)議,它還包含了物理層和網(wǎng)絡層的內(nèi)容。文章來源:http://www.zghlxwxcb.cn/news/detail-443427.html
總結
當讀者耐心讀完本篇文章后,可以初步理解數(shù)據(jù)鏈路和幀的一些基本概念,重點需要理解封裝成幀,透明傳輸,差錯檢驗的原理。此外,讀者仍然需要仔細閱讀點對點協(xié)議PPP的相關知識點,深入理解其原理。文章來源地址http://www.zghlxwxcb.cn/news/detail-443427.html
到了這里,關于精煉計算機網(wǎng)絡——數(shù)據(jù)鏈路層(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!