1. 程式人生 > 其它 >3.2 封裝成幀

3.2 封裝成幀

封裝成幀是指資料鏈路成把上層丟下來的加幀頭和幀尾。

幀頭和幀尾含有重要的資訊。作用之一就是幀定界

思考這樣的一個問題:我們傳送方發到接收方了,那接收方如何從一大堆0101位元流中知道一個幀並且提取出來?

實際上,幀頭和幀尾帶有醒目的標誌,各佔一個位元組。我們看下面點對點的傳輸

需要說明的是,並不是每一種幀都包含標誌。

比如乙太網V2的MAC幀格式

那麼接收方在這種網路下又是如何提取出幀的呢?

實際上我們在概述的時候講過,物理層看網路是什麼,如果是乙太網,就加上8位元組的前導碼。前導碼中的前7個位元組為前同步碼,作用是使接收方的時鐘同步。之後的一位元組為幀開始定界符。表明其後面緊跟著的就是MAC幀。

另外啊:乙太網還規定了幀間間隔時間為96位元的傳送時間。因此MAC幀並不需要幀結束定界符。

透明傳輸是指資料鏈路層對上層交付的資料沒有任何限制,就好像資料鏈路層不存在一樣。

我們的幀標誌是一個數值,如果我們網路層傳到資料鏈路層剛好含有相同的數值,那接收方還能收到正確的幀嗎?

  • 不能

那麼資料鏈路層是如何解決這個問題的呢?網路層傳來的時候,他加了幀頭幀尾掃描一遍標誌,如何出現相同的那就加上一個ESC標誌轉義字元(1個位元組,10進位制值為27),告訴我們的接收方跳過掃描這玩意。這是資料不是定界符。

那再來思考這樣一種情況,上層傳下來的即包含轉移字元,又包含和定界符相同的數字。這個又該怎麼處理呢?

  • 也是相同的處理方法,還是加轉義字元。

上面我們將的都是面向位元組的物理鏈路使用位元組填充(或稱字元填充)的方法實現透明傳輸。

面向位元的物理鏈路使用位元填充的方法實現透明傳輸。

為了簡單起見,在幀首部和尾部中,僅給出了幀定界標誌。而未給出其他控制欄位。

現在幀的資料部分出現兩個和標誌一樣的,那我們該怎麼處理呢?

在傳送前可以採用0位元填充法對資料部分進行掃描,每5個連續的位元1後面就插入一個位元0。這樣就確保了幀定界的唯一性。

最後還要提醒大家。為了提高幀的傳輸效率,應當使幀的資料部分的長度儘可能大些。

但是考慮到差錯控制等因素,資料鏈路層的協議也規定了幀的資料部分的長度上限。最大傳送單元MTU