?從這節課開始,我們會探討數據鏈路層的差錯控制功能,差錯控制功能的主要目標是要發現并且解決一個幀內部的位錯誤,我們需要使用特殊的編碼技術去發現幀內部的位錯誤,當我們發現位錯誤之后,通常來說有兩種解決方案。第一種解決方案就是接收方只負責發現這種比特錯。如果一個幀有位錯誤,就直接把這個幀丟棄,并且想辦法通知發送方,讓他重新傳輸這個幀,關于如何通知發送方重傳幀這個問題,我們會在可靠傳輸功能里邊再進行探討。在差錯控制這個部分,我們先把注意力放在如何發現比特錯誤上。使用檢錯編碼技術可以發現比特錯,我們會學習奇偶校驗碼和 CRC,也就是循環冗余校驗碼這兩種檢錯編碼技術。除了直接把幀丟棄重傳之外,還可以有第二種解決方案,就是接收方可以發現并且糾正幀內部的比特錯誤。如果要糾正這種比特錯誤,我們就需要使用糾錯編碼的技術,之后我們會探討海明教驗碼,這就是一種糾錯編碼。既可以發現比特錯,同時還可以糾正比特錯。
在這個視頻中,我們先探討最簡單的奇偶校驗碼。我們會首先介紹奇偶校驗的這種校驗原理,如何檢測出比特錯誤,緊接著,我們會為跨考的同學補充異或運算的一個規則。在這個視頻中,我們依然需要對異或運算進行一個簡單的補充,因為除了奇偶校驗之外,接下來要學習的CRC校驗碼以及海明校驗碼都需要使用到異或運算。
接下來看奇偶校驗碼的校驗原理,奇偶校驗具體來說可以分為兩種,一種就是奇校驗,另一種是偶校驗。二者的原理類似。假設有n個有效信息位,我們會在這n個信息位之前或者之后增加一個比特的這種奇偶校驗位,如果我們采用的是奇校驗的規則,那么我們添加這一個比特之后需要確保這 n+1位當中總共有奇數個1。相應的如果是偶校驗的規則,那么我們需要確保添加了這一位之后,整體來看總共需要有偶數個1。
舉個例子,假設這兒給出了兩個比特串,我們分別求這兩個比特串的基叫頁碼和偶叫頁碼。我們假設這個校驗位是添加在有效信息位之前,那如果我們采用的是基校驗的規則。看第一個比特串,這個比特串總共有七個信息位。其中包含一個一兩個一三個一四個一,我們需要在這七個信息位之前增加一個校驗位。并且要確保整體來看總共有奇數個1,那么原本有四個1,因此這個校驗位我們就得填1,這樣的話,整體就有五個1,也就是奇數個1。再來看第二個比特串,同樣有七個比特的信息位,那么其中包含一個兩個三個四個五個一。所以前邊這個校驗位,我們只需要添零。這是采用奇校驗的規則,如果采用的是偶校驗規則,原理類似。前邊這個比特串,總共有四個1,添加這個校驗位之后,需要確保整體來看總共有偶數個1,因此這個校驗位我們只能添0。對于第二個比特串,總共有一個兩個三個四個五個一,所以為了使整體擁有偶數個1,我們需要在校驗位這兒再添加一個比特1。這就是基于偶校驗規則的校驗位的確定。在計算機網絡中,發送方給接收方發送一個幀,那么發送方的數據鏈路層,會在幀的數據部分添加這個校驗位的信息,然后把校驗位和信息位一起發給接收方,而接收方的數據鏈路層又會基于奇偶校驗的規則去檢查整個幀有沒有出錯。
接收方的數據鏈路層是這么來檢錯的,如果發送方和接收方共同約定使用奇校驗的規則,接收方的數據鏈路層收到這個幀之后會檢查這個幀的校驗位和信息位里邊含有的比特1是不是奇數個?如果是奇數個,那么就認為沒有錯誤。如果不是奇數個,就認為有錯誤。在現實應用中,偶校驗要比基校驗更常用,一些原因是偶校驗很容易用簡單的異或門來實現。
我們簡單介紹一下異或運算的規則,異或運算又稱為模2加運算,如果兩個比特進行異或運算,那么當且僅當兩個比特都相異不同的時候,運算的結果才等于1。比如說第二個式子0和1兩個比特相異,它們倆異或運算得到的結果是1,第三個式子1和0兩個比特相異,所以它們倆異或得到的結果等于1。相反,兩個零進行異或得到的結果是0,兩個0進行異或得到的結果也是零,這就是異或運算的規則。
如果我們把幾個比特的信息位全部一起來異或就可以得到偶校驗位。比如我們以這一串比特串為例,剛才我們用手算的方式得到它的偶校驗位等于0。如果用機器計算偶校驗位,我們只需要把這七個比特依次進行異或。首先1和0異或等于1,這個1和后一個0異或同樣等于1,這個1和后一個1再進行異或等于0,這個0和后一個1繼續異或等于1,這個1再和后一個0進行異或等于1,最后還有一個1再進行異或最后的結果就是0。所以把這七個信息位分別異或最終計算的結果是零,可以看到這個計算的結果和我們剛才手算求得的偶校驗位是一致的。所以如果要用硬件來求偶校驗位會非常快,只需要用異或門就可以實現。
第二個例子也是類似的,把所有的這七個信息位分別異或最終得到的結果就是1,和我們手算求得
的偶校驗位是相同的。這兒就不再贅述。
這就是數據的發送方要做的事情,他會把幀的這n個信息位分別進行異或求得一個偶校驗位,然后把這個偶校驗位加入到信息位的前面。當然,也可以加入到信息位的后面這個都 OK,那么發送方會把這個校驗位和n比特的信息位一起傳給數據的接收方,而數據的接收方他的數據鏈路層會對收到的這 n+1個比特進行偶校驗。進行偶校驗,也可以用異或運算來實現。接收方會把所有的比特依次進行異或運算。我們總共收到八個比特,大家可以自己算一下這八個比特進行異或得到的結果等于0,此時說明這八個比特并沒有發生錯誤。這個式子對應的是偶校驗的第一個,這個比特串八個比特都沒有發生錯誤,現在假設數據的接收方接收到的是后面的這八個比特,并且這八個比特當中最后一個比特1跳變成了0。此時對所有的比特進行異或運算,得到的結果就是1,結果為1,說明出現了比特錯誤。我們可以用人類視角數一數,總共有幾個1,總共有五個1,接收方收到的這八個比特當中包含奇數個1。這并不符合偶校驗的規則。所以我們從人類視角來看也能發現,這八個比特當中肯定有某些比特出現了錯誤。
接下來再看一個例子,同樣是發送這八個比特。假設最后的兩個比特發生了跳變,都是從1變成了0,那么此時數據的接收方對這八個比特進行異或運算之后,得到的結果等于零結果為零,意味著這一串比特符合偶校驗的規則。我們從人類的視角來數一下,里邊包含四個1,有偶數個1,因此這串二進制數是符合偶校驗的規則的。然而,我們從上帝視角可以知道,這一串二進制數當中有兩個比特發生了錯誤。因此,如果有偶數個比特發生錯誤,那么,數據的接收方將無法檢測出這種錯誤。
剛才我們主要介紹了偶校驗的硬件實現的原理,對于奇校驗來說,硬件實現原理也是類似的,同樣可以通過異或運算去實現。對于計算機網絡的考試來說,我們只需要能夠用人類的算法確定這個校驗位等于多少,以及能夠分辨一串二進制數是否符合校驗的規則就可以了,大家不需要深究機器實現原理。
在這個視頻中我們介紹了一種最簡單的檢錯技術:奇偶校驗碼。我們提到了信息位、校驗位這兩個概念。信息位指的就是幀內部的有效數據,而校驗位在有的教材中又會把它稱為冗余位,因為校驗位是我們為了給幀的數據部分糾錯或者檢錯而附加的一些冗余比特信息。對于奇偶校驗來說校驗原理很簡單,我們只需要在n比特信息位的首部或者尾部添加一個比特的校驗位。如果數據的發送方和接收方約定的是奇校驗規則,就需要確保添加了這個校驗位之后。整體來看,總共會有奇數個1,而如果采用偶校驗的約定,就需要確保添加校驗位之后整體來看,有偶數個1。
需要注意的是,這種奇偶校驗碼只能檢測出奇數位的錯誤,如果剛好有偶數個比特發生了這種比特跳變,奇偶校驗碼是沒辦法檢測出這種錯誤的。同時,奇偶校驗碼只能檢錯,不能糾錯。在這個視頻中,我們也為跨考的同學補充了異或運算,又叫模2加運算的運算規則。當兩個比特進行異或運算的時候,只有二者相異的時候,計算的結果才等于1,否則為0,當我們采用偶校驗規則的時候,數據的接收方會把所有的信息位和校驗位全部進行異或,如果異或的結果等于0,說明沒有錯誤,如果等于1,說明有錯誤。如果恰巧有偶數個比特發生錯誤,那么此時數據的接收方,這個異或的結果也會等于零,也就是說發現不了偶數比特的錯誤。
以上就是這個視頻的全部內容。
?