目錄
1.回憶數據鏈路層作用
?2. 組幀
2.1?四種組幀方法
2.1.1 字符計數法
2.1.2 字節填充法
2.1.3 零比特填充法
2.1.4 違規編碼法
3. 差錯控制
3.1 檢錯編碼
3.1.1 奇偶校驗碼
3.1.2 CRC(循環冗余校驗)校驗碼
3.2 糾錯編碼
3.2.1 海明校驗碼
3.2.2 海明碼如何糾錯?
3.2.3 海明碼糾錯檢錯能力
1.回憶數據鏈路層作用
?2. 組幀
幀定界
如何讓接收方知道幀的界限?
透明傳輸
接收方如何去除“幀定界”的附加信息,把幀恢復原貌。
2.1?四種組幀方法
2.1.1 字符計數法
使用一個字節記錄幀的長度放在每一個幀開頭的位置。
缺點:任意一個計數字符出錯,那么后面的幀全部無法定界,和多米諾骨牌一樣。
2.1.2 字節填充法
使用控制字符來確定一個幀的開始和結束。
缺點:當數據的內容和指定的開始結束內容完全一致,我們該如何區分是數據還是控制字符。
改進:引入轉義字符,如果控制字符和數據內容完全一致,我們會在數據內容前面加入一個轉義字符表明:這就是普通的數據。
????????如果數據的內容和轉義字符一樣,我們就在“數據”之前?再加一個轉義字符,讓接收方知道這是一個數據,當接收方接受到數據之后,需要逆處理去掉轉義字符。
2.1.3 零比特填充法
????????使用特殊的數字作為幀的開頭和結尾(01111110六個一),我們需要對數據部分進行處理,如果有連續五個1就在后面加一個0,這樣一來就不會出現和開始字符或者結尾字符相同的情況了。
使用零比特填充法的協議:PPP,HDLC?
2.1.4 違規編碼法
? ? ? ? 我們定義每個周期的中間必須變化,沒有變化的我們視作“違規”,所以我們只需要讓數據遵守規則,讓幀頭和幀尾的部分違規即可。
3. 差錯控制
? ? ? ? 發現幀內部的位錯誤。
3.1 檢錯編碼
接收方發現比特錯誤丟棄幀,通知發送方重傳幀。
3.1.1 奇偶校驗碼
奇校驗:保持(有效信息位和校驗位)1的個數為奇數。
偶校驗:保持(有效信息位和校驗位)1的個數為偶數。
?如果,一下子有兩個二進制位跳位,那么也是會符合偶校驗的規則的,但是我們知道這是錯誤的。
3.1.2 CRC(循環冗余校驗)校驗碼
? ? ? ? 數據發送方、接收方約定一個除數,K個信息位+R個校驗位作為被除數,添加校驗位后需要保證除法的余數為0;收到數據后進行除法檢查余數是否為0,若余數非0說明出錯,則進行重傳或糾錯。
?
?
?
3.2 糾錯編碼
? ? ? ? 由接收方發現并糾正比特錯誤。
????????上面說到奇偶校驗只能察覺到奇數個比特位的錯誤,一旦錯誤的位數是偶數,此方法就會失效,并且不能進行糾錯。
3.2.1 海明校驗碼
? ? ? ? 海明碼的思路是基于偶校驗,先把所有的數據進行分組,然后每一組有一個校驗位,這樣就能表示很多種狀態,甚至出錯的位置都能夠找到。
????????這些狀態最起碼能表示信息位+校驗位出錯的位置,還有一種正確的狀態;加起來就是2的k次方≥n+k+1種狀態。將校驗位按照規定放入2的次方位置上面,信息位依次填入。
? ? ? ? 我們把信息位的下標(H3的3,H5的5......)使用二進制表示出來進行分組,H1?= P1 = 1101 = H357進行異或,H2 = P2 = 1011 = H367進行異或,H4 = P3 = 0111 = H567異或,分別異或算出校驗位。
?
? ? ? ?
3.2.2 海明碼如何糾錯?
????????我們現在的三個分組求出來對應的三個校驗位,也就是每組四個比特(3個信息位1個校驗位)直接進行異或,得數是0則沒有錯誤;
?????????若此時P2跳變成0,我們第二組異或就會為1,由低位到高位就是010->也就是十進制的2,即海明碼的第二位出現了錯誤。
3.2.3 海明碼糾錯檢錯能力
????????海明碼可以1位糾錯,2位檢錯;做到這樣的結果我們只需要增加一位作為整體偶校驗;我們就會出現以下三種情況。
①校驗方程=0且全體偶校驗成功(0):完全正確。
②校驗方程≠0且全體偶校驗失敗(1):有一位錯誤,可以定位找到。
③校驗方程≠0且全體偶校驗成功(0):有兩位錯誤,無法定位,申請重傳。