資料鏈路層的三個基本問題
阿新 • • 發佈:2020-07-20
## 封裝成幀
- 封裝成幀(framing)就是在一段資料的前後分別新增首部和尾部,然後就構成了一個幀。確定幀的界限。
- 首部和尾部的一個重要作用就是進行幀定界。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/202007200956473.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RURlRf,size_16,color_FFFFFF,t_70)
## 透明傳輸
- 若傳輸的資料是ASCll碼中“可列印字元(共95個)“集時,就正常。
- 若傳輸的資料不是僅由“可列印字元”組成時,就會出問題。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200720100231774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RURlRf,size_16,color_FFFFFF,t_70)
**用位元組填充法解決透明傳輸的問題**
- 傳送端的資料鏈路層在資料中出現控制字元`SOH`或`EOT`的前面插入一個**轉義字元**`ESC`(其十六進位制編碼是1B)。
- ==位元組填充==(byte stuffing)或==字元填充==(character stuffing)—接收端的資料鏈路層在將資料送往網路層之前刪除插入的轉義字元。
- 如果轉義字元也出現數據當中,那麼應在轉義字元前再插入一個轉義字元。當接收端收到連續的兩個轉義字元時,就刪除其中前面的一個。
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200720100620639.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RURlRf,size_16,color_FFFFFF,t_70)
## 差錯控制
- 傳輸過程中可能會產生==位元差錯==:1可能會變成0而0也可能變成1。
- 在一段時間內,傳輸錯誤的位元佔所傳輸位元總數的比率稱為==誤位元速率==`BER(Bit Error Rate)`。
誤位元速率與信噪比有很大的關係。
- 為了保證資料傳輸的可靠性,在計算機網路傳輸資料時,必須採用各種差錯檢測措施。
**迴圈冗餘檢驗`CRC(Cyclic Redundancy Check)`**
- 在傳送端,先把資料劃分為組。假定每組k個位元。
假設待傳送的一組資料M=101001(現在k=6)。我們在M的後面再新增供差錯檢測用的n位==冗餘碼==一起傳送。
**冗餘碼的計算**
- 用二進位制的模2運算進行20乘M的運算,這相當於在M後面新增n個0。
- 得到的(k+n)位的數除以事先選定好的長度為(n+1)位的==除數== P,得出商是Q而==餘數==是R,餘數R比除數P少1位,即R是n位。
**計算過程**
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200720100918256.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0RURlRf,size_16,color_FFFFFF,t_70)
- 10100是要傳輸的資料,則在後面新增n個0,再除以n+1位數,這裡是新增3個0,所以除以1101四位數(不一定是1101,自定義)
- 高位是1則夠除,商1
- 高位是0不夠除,商0
- 減的時候,上下相同為0,上下不同為1
- 然後把得到的餘數001新增到原資料後面,就是101001001,傳輸完後,再用這個數除以之前的1101,如果得到0就說明傳輸過程中沒有差錯
**幀檢驗序列FCS**
剛才最後得到的餘數,就是在資料後面新增上的冗餘碼,稱為幀檢驗序列`FCS(Frame Check Sequence)`
**迴圈冗餘檢驗CRC和幀檢驗序列FCS並不等同。**
- `CRC(Cyclic Redundancy Check)`是一種常用的檢錯方法,而FCS是新增在資料後面的冗餘碼
- `FCS(Frame Check Sequence)`可以用CRC這種方法得出,但CRC並非用來獲得FCS唯一方法。
## 小結:CRC差錯檢測技術
**僅用迴圈冗餘檢驗CRC差錯檢測技術只能做到==無差錯接受==(accept)**
- “無差錯接受”是指:“凡是接受的幀(即不包括丟棄的幀),我們以非常接近於1的概率認為這些幀在傳輸過程中沒有產生差錯”。也說:“凡是接收端資料鏈路層接受的幀都沒有傳輸差錯”(有差錯的丟棄而不接受)。
**要做到“可靠傳輸”(即傳送什麼就收到什麼)就必須再加上==確認==和==重傳==**
- 考慮:幀重複、幀丟失、幀亂序的情況
**可以說CRC是一種==無位元差錯==,而不是==無傳輸差錯==的檢測機制**
- 0Sl/RM模型的觀點:資料鏈路層要做成無傳輸差錯的!但這種理念目前不被