數據鏈路層的三個問題

今天學習了關於數據鏈路層的知識,數據鏈路層使用的信道主要有以下的兩種類型:
1. 點對點信道。這種信道使用一對一的點對點信道方式。
2. 廣播信道。這種信道使用一對多的廣播通信方式,因此過程比較複雜。

通常我們使用的更多的是點對點的信道,所以在這裏我們需要了解一些相關的概念。

點對點信道的數據鏈路層在進行通信的時步驟如下:
1. 節點A的數據鏈路層把網絡層交下來的IP數據報添加首部和尾部封裝成幀。
2. 節點A把封裝好的幀發送給節點B的數據鏈路層。
3. 若節點B的數據鏈路層收到的幀無差錯,則從收到的幀當中提取出IP數據報上交給上面的網絡層,否則丟棄這個幀。

數據鏈路層的三個基本問題:
封裝成幀、透明傳輸、差錯檢測。

封裝成幀


在進行數據鏈路層傳輸的時候存在一個問題,我們需要對飲數據鏈路層的協議對應將有效的數據封裝成一個幀,封裝成幀就是在一段數據的前後分別添加首部和尾部,這樣就構成一個幀。這個時候我們就需要考慮,我們如何來識別一個幀,所以這裏提出了一個幀定界的概念,使用兩個控制字符,一個控制字符SOH放在一幀的最前面,表示幀的首部開始。另一個控制字符EOT標識幀的結束。
![enter description here][1]

所以簡單的說第一步就是在一段數據的前後分別添加首部和尾部,然後就構成了一個幀。首部和尾部就是起到幀定界的作用。

透明傳輸


關於透明傳輸,我們主要目的是因爲,在幀的有效數據當中,可能出現和幀定界的控制字符一樣的字符,爲了防止將這些字符當中幀定界的字符,錯誤的處理幀,所以我們採方法使得數據當中可能出現的控制字符“SOH”和“EOT”在接收端不被解釋爲控制字符。

方法是:發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入一個轉義字符”ESC”。而在接收端的數據鏈路層在將數據送往網絡層之前刪除這個插入的轉義字符。我們把這種方法叫做字節填充法。當然如果轉義字符”ESC“也出現在數據當中,那麼解決的方法仍然是在轉義字符的前面插入一個轉義字符,所以,當接受到連續的兩個轉義字符的時候,就去刪除其中前面的一個。
![enter description here][2]

差錯檢測


數據鏈路層點對點傳輸的第三個問題就是差錯檢測。就是我們所說的比特在傳出過程當中可能會產生差錯,1可能會變成0,0可能會變成1.這就是比特差錯。而這種差錯對於我們來說是不希望發生這種狀況的,所以爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用差錯檢測措施。目前廣泛運用的是循環冗餘檢驗CRC

CRC的基本思想就是將傳輸的數據當作一個位數很長的數,將這個書除以另外的一個數。得到的餘數作爲校驗數據附加到原數據後面。

原理:
首先把數據M劃分爲組,每個組k個比特。CRC運算就是在數據M後面添加供差錯檢測用的n位冗餘碼,然後構成一個幀發送出去,所以一共就是(k+n)位。這樣雖然是增加了數據傳輸的開銷,但是卻可以進行差錯檢測。爲了避免傳輸差錯,這種效率上的損失是值得的。

重點就是這n位冗餘的計算方法。
用二進制的模2運算再進行2^n乘M運算,模2運算相當於是二進制的不進位加法,其實也就是異或運算,而2^n乘M運算相當於是進行在M後面加上n個0。
![enter description here][3]

這種添加冗餘碼的方法叫做幀檢驗序列FCS,而CRC循環冗餘差錯檢測和這個並不是一個概念,然後我們可以對上面最後的數據進行CRC檢驗,方法就是把收到的每一幀都除以相同的除數,然後檢查得到的餘數。如果沒有差錯,那麼得到的餘數一定是0。

![enter description here][4]

所以總的來說,就是每一個接受到的幀經過了CRC檢驗後,只會有兩種情況:
1. 餘數爲0,表示結果是正確的,這個時候自然就接收這個幀。
2. 餘數不爲0,這樣標識這個幀是有問題的,這樣就丟棄這個幀。

另外一種就是使用多項式的方法進行循環冗餘檢驗過程。用多項式P(x)=x^3+x^2+1表示除數P=1101。這個多項式稱作生成多項式。生成多項式的選取是有難度的,如果選的不好,那麼檢測出錯誤的概率就會很低。現在常用的幾種多項式有:

CRC8=X8+X5+X4+X0
CRC-CCITT=X16+X12+X5+X0
CRC16=X16+X15+X2+X0
CRC12=X12+X11+X3+X2+X0
CRC32=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X0

最後需要說一下,數據鏈路層如果僅僅使用CRC循環冗餘檢驗,則只能對幀做到無差錯接受,但是,當數據鏈路層向網絡層提供傳輸的時候,這個時候就不一定是可靠的傳輸了,數據鏈路層不確保這個。所以數據鏈路層協議不適用確認和重傳機制,不向上層提供可靠傳輸的服務。所以保證可靠傳輸就需要讓上層協議(TCP)來做了。這樣的目的,也是爲了更好的提升通信的效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章