數據鏈路層—三個基本問題

本文主要介紹數據鏈路層傳輸數據需要注意的最基本的三個問題

 當我們需要傳輸數據的時候,我們應該這考慮:首先,將數據封裝成幀(幀是數據鏈路層的基本單位),考慮去怎麼封裝,才能讓接受端識別一個完整的幀,同時接收端讓所有數據都能順利傳輸,而不應該受到限制導致某些數據不能傳輸。接着,發送端發送完數據,經過信道,有時候因爲外部原因而導致幀出現變化,也就是數據發生了變化,那麼這個時候我們應該怎麼樣去進行檢測錯誤和處理。本文梳理出這三個基本問題出來,然後對每個問題進行詳細地討論。
1、封裝成幀
這裏的成幀方法參考Andrew S.Tanenbaum & David J.Wetherall著的《計算機網絡》中所提到的4中方法:
(1)字節計數法
(2)字節(字符)填充法
(3)比特填充法
(4)物理層編碼違禁法
第一種方法是字節計數法,具體是,利用頭部的一個字段來標識該幀中的字符數。但是這個方法有一個問題,如果用來標識該幀字符數的字段在傳輸過程中發生了錯誤,那麼從這個字段到後面的幀都會被弄混亂。正是由於這個原因,這個方法很少被使用,這裏只是提出來讓大家瞭解下
第二種,字節(字符填充法),網絡層上的IP數據報傳遞給數據鏈路層,就變成了幀的數據部分,在數據部分的前面和後面添加首部和尾部,就構成了一個完整的幀。(我們所說的幀的長度,就是數據部分+首部+尾部的長度)。那麼我們爲什麼要添加首部和尾部呢,其主要目的就是幀定界,確定這個幀的界限。由於首部和尾部不是我們想要的數據部分,所以爲了提高傳輸效率,我們應該儘可能地讓數據部分大於首部和尾部。同時,協議也定義了最大數據部分長度——最大傳送單位MTU(Maximum Transfer Unit)。在字節填充法中,幀定界使用的是特殊的幀定界符。一個SOH(Start Of Header)作爲幀的開頭,另外一個是EOT(End Of Transmission),作爲幀的結尾。這裏所提到的SOH和EOT都只是這兩個控制字符的名稱,而不是S、O、H(或者是E、O、T)三個字符。SOH的十六進制編碼是01(二進制編碼是00000001),EOT的十六進制編碼是04(二進制編碼是00000100)。瞭解了首尾的兩個標記之後,我們可以想到的是,在IP數據報(也就是幀的數據部分)可能會存在和SOH和EOT相同格式的數據,那麼這個時候就會出現問題,接受方就會錯誤地將和SOH以及EOT格式相同的數據當做幀定界面。要解決這個問題,就在與SOH和EOT相同格式的數據前面加上一個轉義字符“ESC”(其十六進制編碼是1B,二進制是00011011),同樣,如果轉義字符要是出現在了數據中,那麼就在轉義字符前面再加一個轉義字符。接收方在接受的時候將第一個轉義字符給刪除掉就好了。
第三種,比特填充法,這種方法是在第二種方法的思想上做了優化,第三種方法考慮到第二種方法的缺點,也就是隻能使用8比特的字節作爲幀的界定符。在比特填充法中,每個幀的開始和結束由一個特殊的比特模式(被稱爲FLAG)來標記,01111110(十六進制就是0x7E)。然後在IP數據報(也就是幀的數據部分),每當遇到了5個1就在後面填充一個比特0。可想而知,這樣的話,那麼數據中就不可能存在和FLAG同樣的格式。這種方法是爲HDLC(高級數據鏈路控制)協議開發的,USB(通用串行總線)採用了比特填充技術。
第四種,是在物理層思考,找到一種捷徑來處理問題,在比特編碼成信號的通常包括一些冗餘的比特,是用來幫助接收器同步接受的。那麼這些冗餘的數據是不會出現在常規數據中的。第四種方法就是利用這些冗餘的比特來表示幀的開始和結束。
然後,很多數據鏈路層的協議爲了安全起見,並不是單純使用了其中一種方法,我們可以看出來,除了第一種,其他的方法都是有各自的優點的,所以協議都是綜合了這。以太網和802.11(無線網絡)使用了共同的分界模式,也就是使用了一個規定好的比特模式來作爲幀的開始,這個比特模式被稱爲前導碼(preamble)

2、透明成幀

發佈了52 篇原創文章 · 獲贊 8 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章