1.封裝成幀
封裝成幀:就是在一段數據的前后分別添加首部和尾部,這樣就構成了一個幀。
接收端在收到物理層上交的比特流后,就能根據首部和尾部的標記,從收到的比特流中識別幀的開始和結束。
分組交換的一個重要概念:就是所有在因特網上傳送的數據都是以分組(即ip數據報)為傳送單位。
網絡層的ip數據報傳送到數據鏈路層就成為幀的數據部分。在幀的數據部分的前面和后面分別添加上首部和尾部,就構成了一個完整的幀。
幀長等於數據部分長度加上幀首部和幀尾部的長度,而首部和尾部的一個重要作用就是進行幀定界(即確定幀的界限)。
首部和尾部還包含許多必要的控制信息,在發送幀時,是從幀首部開始發送。
各種數據鏈路層協議都要對幀首部和幀尾部的格式有明確的規定。
為了提高幀的傳輸效率,應當使幀的數據部分長度盡可能大於首部和尾部的長度。但是,每一種鏈路層協議都規定了幀的數據部分的長度上限▁最大傳送單元MTU(Maximum Transfer Unit)。
當數據是由可打印的ASCII碼組成的文本文件時,幀定界可以使用特殊的幀定界符。
控制字符SOH(start of header)放在一幀的最前面,表示幀的首部開始。另一個控制字符EOT(end of transmission)表示幀的結束。他們的十六進制編碼分別是01(二進制是00000001)和04(00000100)。
當數據在傳輸中出現差錯時,幀定界符的作用更加明顯。假定發送端在尚未發完一個幀時突然出現故障,中斷了發送。但隨后很快又恢復正常,於是重新從頭開始發送剛才未發送完的幀,由於使用了幀定界符,在接收端就知道前面收到的數據是個不完整的幀(只有首部SOH,沒有傳輸結束符EOT),必須丟棄。而后面收到的數據有明顯的幀定界符(SOH和EOT),因此這是一個完整的幀,應當收下。
2.透明傳輸,用字節填充法解決透明傳輸的問題(ESC轉義字符)。
3,差錯檢測
差錯檢測:可分為兩大類,一類就是最基本的比特差錯,另一類就是收到的幀並沒有出現比特錯誤,但卻出現了幀丟失、幀重復或幀失序。
比特差錯:就是比特在傳輸過程中可能會產生差錯,即1可能會變成0,0可能會變成1。比特差錯是傳輸差錯中的一種。
誤碼率BER(Bit Error Rate):就是在一段時間內,傳輸錯誤的比特占傳輸比特總數的比率。例如,誤碼率為10^(-10)時,表示平均每傳送10^10個比特就會出現一個比特的差錯。誤碼率與信噪比有很大的關系,如果提高信噪比,就可以使誤碼率減小。
問題:實際的通信鏈路並非理想的,它不可能是誤碼率下降到零。
問題分析:為了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須采用葛總檢測措施。
解決方法:目前在數據鏈路層廣泛使用了循環冗余檢驗CRC(Cyclic Redundancy Check)的檢測技術。
注:在數據鏈路層使用CRC檢驗,能夠實現無比特差錯的傳輸,但這還不是可靠傳輸。
補充:OSI的觀點是必須把數據鏈路層做成是可靠傳輸的,因此在CRC檢測基礎上,增加了幀編號、確認和重傳機制。收到正確的幀就要向發送端發送確認。發送端在一定的期限內若沒有收到對方的確認,就認為出現了差錯,因而就進行重傳,知道收到對方的確認為止。
這種方法在歷史曾經祈禱很好的作用,但現在的通信線路的質量已經大大提高了,由通信鏈路質量不好引起差錯的概率已經大大降低。
英特網廣泛使用的數據鏈路層協議都不適用確認和重傳機制,即不要求數據鏈路層向上層提供可靠傳輸的服務(因為這要付出的代價太高,不合算)。如果在數據鏈路層傳輸數據時除了差錯並且需要進行改正,那么改正差錯的任務就由上層協議(如,運輸層tcp協議)來完成。實驗證明,這樣可以提高通信效率。