封裝成幀是指數據鏈路成把上層丟下來的加幀頭和幀尾。
幀頭和幀尾含有重要的信息。作用之一就是幀定界
實際上,幀頭和幀尾帶有醒目的標志,各占一個字節。我們看下面點對點的傳輸
需要說明的是,並不是每一種幀都包含標志。
比如以太網V2的MAC幀格式
那么接收方在這種網絡下又是如何提取出幀的呢?
實際上我們在概述的時候講過,物理層看網絡是什么,如果是以太網,就加上8字節的前導碼。前導碼中的前7個字節為前同步碼,作用是使接收方的時鍾同步。之后的一字節為幀開始定界符。表明其后面緊跟着的就是MAC幀。
另外啊:以太網還規定了幀間間隔時間為96比特的發送時間。因此MAC幀並不需要幀結束定界符。
透明傳輸是指數據鏈路層對上層交付的數據沒有任何限制,就好像數據鏈路層不存在一樣。
我們的幀標志是一個數值,如果我們網絡層傳到數據鏈路層剛好含有相同的數值,那接收方還能收到正確的幀嗎?
-
不能
那么數據鏈路層是如何解決這個問題的呢?網絡層傳來的時候,他加了幀頭幀尾掃描一遍標志,如何出現相同的那就加上一個ESC標志轉義字符(1個字節,10進制值為27),告訴我們的接收方跳過掃描這玩意。這是數據不是定界符。
那再來思考這樣一種情況,上層傳下來的即包含轉移字符,又包含和定界符相同的數字。這個又該怎么處理呢?
-
也是相同的處理方法,還是加轉義字符。
上面我們將的都是面向字節的物理鏈路使用字節填充(或稱字符填充)的方法實現透明傳輸。
面向比特的物理鏈路使用比特填充的方法實現透明傳輸。
為了簡單起見,在幀首部和尾部中,僅給出了幀定界標志。而未給出其他控制字段。
現在幀的數據部分出現兩個和標志一樣的,那我們該怎么處理呢?
在發送前可以采用0比特填充法對數據部分進行掃描,每5個連續的比特1后面就插入一個比特0。這樣就確保了幀定界的唯一性。
最后還要提醒大家。為了提高幀的傳輸效率,應當使幀的數據部分的長度盡可能大些。
但是考慮到差錯控制等因素,數據鏈路層的協議也規定了幀的數據部分的長度上限。最大傳送單元MTU