計算機網路-資料鏈路層二

2。3 差錯檢測

資料傳輸過程中會由於噪聲或者其他因素而出現

差錯

。差錯分為

位錯

幀錯

兩大類。

位錯:二進位制數字出錯,如00000000變成00000001

幀錯:包括

丟失

重複

失序

三種。如傳送編號順序為1、2、3的三個幀,如果接收方收到的是13,就是發生了

丟失

,2號幀丟失;如果接收方收到的是1223,就是發生了重複,2號幀

重複

;如果接收方收到的是132,就是發生了

失序

,2 、3號幀失序。

為了保證資料傳輸的可靠性,必須採取一些措施來檢測差錯。差錯控制既可以檢測差錯然後

重傳

,也可以檢測差錯後直接

糾錯

。前者使用檢測編碼,後者使用糾錯編碼。

注:這裡的編碼是資料鏈層的編碼,針對的是

一組位元

。而物理層的編碼是針對

單個位元

,如歸零編碼、曼徹斯特編碼。

2。3。1 檢測編碼

檢測編碼有

奇偶校驗碼

CRC迴圈冗餘碼

兩種。

2。3。1。1 奇偶校驗碼

奇偶校驗碼分為

奇校驗

偶校驗

。n位的奇偶校驗碼中有n-1位資訊元和1位校驗元。在編碼時,先看資訊元中的“1”的個數是奇數還是偶數,對於奇校驗,如果資訊元中“1”的個數為奇數,則校驗位設定為0,如果為偶數,則校驗元設定為1,總之奇校驗就是透過設定校驗元時

校驗碼中“1”的個數為奇數

。而偶校驗就是透過設定校驗元時

校驗碼中“1”的個數為偶數

接收方收到資料後會檢查“1”的個數,對於奇校驗,如果“1”的個數為奇數,則認為沒有出錯,如果為偶數,則判定出錯,要求傳送方重傳。偶校驗同理。從工作過程中我們可以發現,如果判定出錯,則肯定發生了錯誤;但是如果

判定未出錯,卻不一定傳輸正確。

比如傳送奇校驗碼為000000001 ,如果接收方收到的是000000111,此時會判定正確,但實際出現了錯誤。奇偶校驗碼

只能檢測出奇數個位元的錯誤

2。3。1。2 CRC迴圈冗餘碼

CRC迴圈冗餘碼比較複雜,用一個例子來說明。比如要傳送資料1101 0110 11,首先發送方與接收方會商定一個

生成多項式

,如10011,生成多項式可以換一種形式G(x)=x4+x+1。事實上G(x)=1*x4+0*x3+0*x2+1*x1+1*x0,,取各項係數就得到了10011,然後

確定生成多項式的階

,生成多項式的階為x的最高次數,此生成多項式x的最高次數為4,故階為4。接下來在要傳送的資料後面加上4(階數)個0,得到1101 0100 11

0000

,然後進行模2除法(相同取0,不同取1,見下圖)。

計算機網路-資料鏈路層二

最後得到的餘數1110即為冗餘碼,故最終傳送的資料為1101 0110 11

1110。

接收方收到資料後除以生成多項式10011,如果得到的餘數為0,則判定沒有錯誤並

接收

;否則判定未出錯並

丟棄

值得注意的是,使用CRC迴圈冗餘校驗也不一定保證接收就沒有出錯,只是出錯機率低,一般生成多項式越高階,出錯機率越低。

2。3。2 檢錯編碼

檢錯編碼這裡介紹海明碼。海明碼工作流程:

確定校驗碼位數r→確定校驗碼和資料的位置→求出校驗碼的值→檢錯並糾錯

①確定校驗碼位數:如果資料有m位,設校驗碼為r位,則校驗碼一共有2r種取值,減去1種全對的情況,則2r-1種取值方式表示有1位出錯,而編碼後一共有m+r位,故r應滿足:

2r-1≥m+r(海明不等式)

例如傳送資料1100,m=4,代入不等式可得最小的r=3,海明碼有m+r=7位。

②確定校驗碼和資料的位置:校驗碼放在序號為2n(1,2,4,8…)的位置上,按序填上。

計算機網路-資料鏈路層二

③求出校驗碼的值:

計算機網路-資料鏈路層二

4號校驗碼,4對應的二進位制為100,則其負責1**的校驗,即1

00

、1

01

、1

10

、1

11

,再轉換為十進位制,也就是4,5,6,7。1、2號校驗碼同理。

偶校驗說明:4對於x4,5對應0,6、7均對應1,則x4取0,這樣有偶數(也就是2)個“1”。

④檢錯並糾錯:

假設接收方收到的資料:

計算機網路-資料鏈路層二

我們很容易發現5號位出錯了,但是接收方並不能直接識別,需要採用一定的方法進行判斷。

x4負責的4、5、6、7:0、1、1、1,由於是偶校驗,而這裡是奇數個1,故判定出錯。

x2負責的2、3、6、7:0、0、1、1,偶數個1,判定正確

x1負責的1、3、5、7:1、0、1、1,奇數個1,判定錯誤

據此可得出資料傳輸出錯。接下來判定出錯的位數:

法一:

計算機網路-資料鏈路層二

合起來就得到了101,轉換為十進位制就是5,也就是5號位出錯。

法二:

計算機網路-資料鏈路層二

先作圖,如圖所示。最外面三個部分是1、2、4,然後交叉的部分寫其和,3=1+2,5=1+4,6=2+4,7=1+2+4。根據前面的判斷4、5、6、7和1、3、5、7中有錯,取4、5、6、7的圓與1、3、5、7

相交

的部分,可得到錯誤在5、7中,又根據2、3、6、7正確,可以

排除

7,這樣就可以確定5號位出錯。