資料鏈路層的成幀方法

2021-08-14 11:20:21 字數 1682 閱讀 6050

之前說過,資料鏈路層乙個很重要的功能就是成幀和拆幀,因為幀是資料鏈路層的乙個單元,資料鏈路層是對於幀進行處理的。那麼這裡就具體講一講資料鏈路層是怎麼成幀的。

首先我們應該想想成幀所涉及的問題。第一就是網路層的資料報交給鏈路層之後,按照怎樣的格式封裝成幀?第二就是,用什麼來區分幀頭和幀尾?也就是什麼時候幀開始,什麼時候結束的問題。以及,怎麼看傳送的幀是對的?能不能看出來幀的某個位元錯了?這些都是成幀機制應該考慮的,所以幀的格式設計成如下這樣:

能看出來,幀的組成主要是標誌和字段兩個部分,標誌主要是標識了幀的開始和結束,字段部分主要有位址字段,控制字段,正文本段和校驗字段四個部分。位址字段表明了幀的去向和**,這是硬體的網絡卡位址,控制字段就是各種協議,正文本段是真正的資訊,校驗欄位是用來檢驗幀是不是有錯誤,通常有crc校驗等等。這樣來看,上面的幾個問題就都解決了。標誌是成幀的乙個重要標誌,鏈路層讀到標誌,就知道幀開始了,這也就界定了乙個幀的範圍。對於正文本段,鏈路層讀不懂,他也不會在意正文本段是什麼,他眼中的正文也就是一串0101而已。

資料鏈路層成幀的方法主要有三個:字元計數法,字元填充的首尾界定法和位元填充的首尾界定法。

1.字元計數法 用乙個幀的第一位元組來說明幀的總長度(總長度包含這個幀頭)

看這張圖,白色為幀頭,指明了長度,比如第一幀長度為5,後面就跟了4個位元組,第二幀的長度為5,後面也跟了4位元組,之後是兩個8位元組長度的,所以各自跟了7位元組的正文部分。但是很顯然,如果頭這乙個位元組出了問題,影響的就不僅僅是這一幀了,其他的都會出問題。比如:

第二個幀頭出了問題,那麼就會出現大問題:後面的全部幀都會出錯,連鎖反應。所以這種方法不太常用。

2.字元填充的首尾界定法

在幀的頭之前和尾之後加乙個特殊的字元,只要讀到這個字元幀就開始了,再次讀到就認為這個幀結束了,如下圖所示:

這種方法能夠避免上面字元計數法的頭出錯問題,但是他也有問題:如果正文裡面出現了flag特殊字元怎麼辦?解決辦法是在正文裡面flag字元前面加上轉義字元esc,這樣讀到flag之前如果沒有轉義字元esc,那麼認為幀結束,如果有esc那麼認為他就是普通的資料就行。問題又來了,那麼正文裡面如果有esc字元呢?那麼就在esc前面再加乙個esc就行了,這兩個的處理是一樣的。如下圖:

3.位元填充的字元界定法

這種方法和第二種比較類似,區別是他把flag具體化了,為6個1。這樣當正文讀取的時候一旦出現了5個連續的1,那麼在後面填充乙個0,避免出現6個1造成幀提前結束。如下圖所示:

收端接收到之後,每讀到5個連續的1之後,就把後面的0去掉乙個,這樣就得到了原文的資料了。

上面三種方法就是最常見的鏈路層成幀的方法。

資料鏈路層之服務與成幀

1.無確認的無連線服務 2.有確認的無連線服務 3.有確認的有連線服務 通常的做法是,將位元流拆分成多個離散的幀,為每個幀計算乙個稱為校驗和的短令牌,並將該校驗和和放在幀中一起傳輸。接收方同樣計算校驗和,核對。拆分位元流,有以下方法 1.位元組計數法 方法 每個幀第一位元組標識幀的大小。以此確定幀的...

資料鏈路層之服務與成幀

1.無確認的無連線服務 2.有確認的無連線服務 3.有確認的有連線服務 通常的做法是,將位元流拆分成多個離散的幀,為每個幀計算乙個稱為校驗和的短令牌,並將該校驗和和放在幀中一起傳輸。接收方同樣計算校驗和,核對。拆分位元流,有以下方法 1.位元組計數法 方法 每個幀第一位元組標識幀的大小。以此確定幀的...

資料鏈路層幀格式

首先簡單的介紹一下資料鏈路層 資料鏈路層在物理層的上面一層,它主要分兩種通道點對點通道和廣播通道。區分他們就看是一對一的點對點的通訊方式,還是一對多的廣播模式。先來談點對點通道。點對點的主要協議為ppp,以前還有一種可靠傳輸的協議hdlc,現在用的已經比較少了。ppp的主要作用是使用者pc連線到is...