一.資料鏈路層簡介
資料鏈路層屬于計算機網路的低層,資料鏈路層使用的信道主要有以下兩種型別,
(1)點對點信道,這種信道使用一對一的點對點通信方式,
(2) 廣播信道,這種信道使用一對多的廣播通信方式,因此程序比較復雜,廣播信道上可以連接多個計算機,因此必須使用專用的共享信道協議來協調這些計算機的資料發送,
二.資料鏈路與幀
資料鏈路≠幀
鏈路(Link)就是從一個結點到相鄰結點的一段物理線路,而中間沒有任何其他的交換結點,在進行資料通信時,兩臺計算機之間的通信路徑往往要經過許多這樣的鏈路,可見鏈路只是一條路徑的組成部分,
資料鏈路(Date Link)則是另一個概念,這是因為當需要在一條線路上傳送資料時,除了必須有一條物理線路外,還必須有一些必要的通信協議來控制這些資料的傳輸,若把實作這些協議的硬體和軟體加到鏈路上,就構成了資料鏈路,
幀(Frame)——資料鏈路層的協議資料單元
資料鏈路層把網路層交下來的資料構成幀發送到鏈路上,以及把接收到的幀中的資料取出并上交給網路層,
三.封裝成幀
資料鏈路層以幀為單位傳輸和處理資料,網路層的 IP 資料報必須向下傳送到資料鏈路層,成為幀的資料部分,同時它的前面和后面分別添加上首部和尾部,封裝成一個完整的幀,幀的長度等于幀的資料部分長度加上幀首部和幀尾部的長度,資料鏈路層必須使用物理層提供的服務來傳輸一個一個的幀,物理層將資料鏈路層交給的資料以位元流的形式在物理鏈路上傳輸,因此,資料鏈路層的接收方為了能以幀為單位處理接收的資料,必須正確識別每個幀的開始和結束,即進行幀定界,
此處我們假定flag為幀開始與結束標志,
例:flag123456789abcdefgflag

可是如果在所需要傳輸的資料中存在flag關鍵字,則會發生判斷錯誤,
例:flag123456flagabcdefgflag
可以看到,除了本身頭和尾部有‘flag’外中間的資料部分中也出現了一個‘flag’,定界就會發生錯誤,
為了解決上述發生的定界錯誤問題,實作‘透明傳輸’可以使用一種稱為位元組填充或字符填充的方法,該方法就是添加‘轉義字符’的概念,在接收端的資料鏈路層對轉義字符后面出現的標記字符不再解釋為幀定界符,并且在將資料送往網路層之前洗掉這個插入的轉義字符,此處以esc代表轉義字符
例1:要發送的字符:flag123456flagabcdefgflag
添加轉義字符后發送的字符:flag123456escflagabcdefgflag
接收端收到上述字符后洗掉轉義字符:flag123456flagabcdefgflag 此時原來中間的flag就會被正確的識別,而不是被當成關鍵字,
當物理鏈路提供的是面向位元的傳輸服務時,幀定界標志可以使用某個特殊的位元組合,
位元填充來實作透明傳輸:
PPP協議采用零位元填充法來說明位元填充,在發送端,先掃描整個資訊欄位(通常是用硬體實作,但也可用軟體實作,只是速度會變慢,)該方法簡單來說就是發現有5個連續的1,就在第五個1后面填入0,
例:原位元組合:0100111111001010
發送方在5個1之后填入一個0位元再發送:01001111101001010
接收方刪去5個連續1之后的一個0得到原位元組合:0100111111001010
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303013.html
標籤:其他
上一篇:【專案部署】Vue+SpringBoot前后分離個人博客專案實戰部署保姆教程 Linux+docker安裝部署啟動一條龍教程
下一篇:Linux網路基礎
