本文轉載自實驗樓:鏈路層簡介
簡介
網絡層協議的數據單元是 IP 數據報 ,而數據鏈路層的工作就是把網絡層交下來的 IP 數據報 封裝為 幀(frame)發送到鏈路上,以及把接收到的幀中的數據取出并上交給網絡層。 為達到這一目的,數據鏈路必須具備一系列相應的功能,主要有:
將數據封裝為幀(frame),幀是數據鏈路層的傳送單位;
控制幀的傳輸,包括處理傳輸差錯,調節發送速率與接收方相匹配;
在兩個網絡實體之間提供數據鏈路通路的建立、維持和釋放的管理。
數據幀的結構是這樣的:

控制幀的傳輸
1.差錯控制
通信系統必須具備發現差錯的能力,并采取措施糾正之,使差錯控制在所能允許的盡可能小的范圍內,這就是差錯控制過程,也是數據鏈路層的主要功能之一。
- 反饋重發
接收方通過對差錯編碼(奇偶校驗碼或 CRC 碼)的檢查,可以判定一幀在傳輸過程中是否發生了差錯。一旦發現差錯,一般可以采用反饋重發的方法來糾正。這就要求接受方收完一幀后,向發送方反饋一個接收是否正確的信息,使發送方據此做出是否需要重新發送的決定。發送方僅當收到接收方已正確接收的反饋信號后才能認為該幀已經正確發送完畢,否則需要重發直至正確為止。 - 計時器
如果某一幀發送出現問題,一直不能發送成功,為了避免傳輸過程停滯不前,通常引入 計時器 (Timer) 來限定接收方發回反饋消息的時間間隔。當發送方發送一幀的同時也啟動計時器,若在限定時間間隔內未能收到接收方的反饋信息,即計時器超時(Timeout),則可認為傳出的幀以出錯或丟失,就要重新發送。 - 序號
由于同一幀數據可能被重復發送多次,就可能引起接收方多次收到同一幀并將其遞交給網絡層的情況。為了防止這種情況,可以采用對發送的幀編號的方法,即賦予每幀一個序號,從而使接收方能從該序號來區分是新發送來的幀還是重發的幀,以此來確定要不要將接收到的幀遞交給網絡層。
2.流量控制
由于收發雙方各自使用的設備工作速率和緩沖存儲空間的差異,可能出現發送方的發送能力大于接收方接收能力的現象,此時若不對發送方的發送速率做適當的限制,前面來不及接收的幀將被后面不斷發送來的幀“淹沒”,從而造成幀的丟失而出錯。
由此可見,流量控制實際上是對發送方數據流量的控制,使其發送速率不超過接收方的速率。所以需要一些規則使得發送方知道在什么情況下可以接著發送下一幀,而在什么情況下必須暫停發送,以等待收到某種反饋信息后再繼續發送。這就是流量控制。
以太網
以太網(Ether-net)是指 DEC 公司、Intel 公司和 Xerox 公司在 1982 年聯合公布的一個標準,這個標準里面使用了一種稱作 CSMA/CD 的接入方法。而 IEEE802 提供的標準集 802.3(還有一部分定義到了 802.2 中)也提供了一個 CSMA/CD 的標準。
這兩個標準稍有不同,因此鏈路層數據幀的的封裝格式也有所不同(數據幀中的地址為 MAC 地址):
PPP(點對點協議)
PPP(點到點協議)是為在同等單元之間傳輸數據設計的鏈路層協議。這種鏈路提供全雙工操作,并按照順序傳遞數據。設計目的主要是用來通過 撥號或專線 方式建立 點對點 連接發送數據,使其成為各種主機、網橋和路由器之間簡單連接的一種共通的解決方案。
點對點協議(PPP)為在點對點連接上傳輸多協議數據包提供了一個標準方法。PPP 最初設計是為兩個對等節點之間的 IP 流量傳輸提供一種封裝協議。在 TCP/IP 協議集中它是一種用來同步調制連接的數據鏈路層協議。
SLIP 與 PPP
1.SLIP 協議
SLIP 的全稱為 Serial Line IP(串行線路 IP)。它是一種對 IP 數據報進行封裝的簡單形式。 SLIP 協議規定的幀格式規則:
IP 數據報以一個稱作 END(0xc0)的特殊字符結束。同時為了防止數據報傳輸之前的線路噪音被誤認為是數據報內容,在數據報開始處添加一個 END 字符;
如果 IP 數據報中含有 END 字符,就連續傳輸 0xdb 和 0xdc 來取代它。0xdb 是 SLIP 的 ESC 字符,但它的值與 ASCⅡ碼中的 ESC(0x1b)不同;
如果 IP 數據報中含有 ESC 字符,就連續傳輸 0xdb 和 0xdd 來取代它。

SLIP 的缺陷:
每一端必須知道對端的 IP 地址,沒有辦法把本端 IP 地址傳遞給對端;
數據幀中無類型字段,當一條串行線路使用 SLIP 時則不能使用其他協議;
SLIP 數據幀中無 checksum,只能依靠上層協議來發現和糾正錯誤。
2.PPP 協議
PPP 協議修改了 SLIP 協議中的缺陷,包括以下三個部分:
- PPP 封裝 IP 數據報既支持數據為 8 位和無奇偶校驗的異步模式,又支持面向比特的同步鏈接;
- 通過 LCP(鏈路控制協議)允許雙方進行協商;
- 通過 NCP(網絡控制協議)允許雙方在網絡層上進行協商。
PPP 協議的字符規則與 SLIP 有所不同:
- PPP 幀以標志字符 0x7e 開始和結束,緊接著是一個值為 0xff 的地址字節,然后是一個值為 0x03 的控制字節;
- 由于標志字符是 0x7e,當它出現在信息字段中時,需要連續傳送 0x7d 和 0x5e 來替代它;
- 當在信息字段中遇到 0x7d 時,需要連續傳送 0x7d 和 0x5d 來替代它。
- 默認情況下,如果字符的值小于 0x20,需要連續傳送 0x7d 和 0x21 來替代它。
PPP 與 SLIP 相比具有下列優點:
- PPP 支持在單根串行線路上運行多種網絡層協議;
- 每一幀都有 CRC 校驗;
- 通信雙方可以用 NCP 進行 IP 地址的動態協商;
- 可以類似于 CSLIP 對 TCP 和 IP 首部進行壓縮;
- LCP 可以對多個數據鏈路選項進行設置。
MTU
為了提供足夠快的響應時間,以太網和 IEEE802.3 對數據幀長度都有限制,其最大值分別為 1500 字節和 1492 字節,鏈路層的這個特性稱作 MTU ,即 最大傳輸單元 。
當網絡層傳下來一個 IP 數據報,并且其長度比鏈路層的 MTU 大,那么網絡層就需要對數據報進行分片,使每一片都小于 MTU。
MTU 分為接口 MTU 和路徑 MTU:接口 MTU 是所指定的接口所允許發送的最大數據長度;路徑 MTU 指兩臺通信主機路徑中最小的 MTU 值。路徑 MTU 是不對稱的,它在兩個方向上不一定一致。
用命令 netstat -in 可以查看網絡接口的 MTU:
