數據鏈路層
用于兩個設備(同一種數據鏈路節點)之間進行傳遞。
認識以太網
- “以太網” 不是一種具體的網絡,而是一種技術標準;既包含了數據鏈路層的內容,也包含了一些物理層的內容。例如:規定了網絡拓撲結構,訪問控制方式,傳輸速率等;
- 例如以太網中的網線必須使用雙絞線;傳輸速率有 10M,100M,1000M 等;
- 以太網是當前應用最廣泛的局域網技術;和以太網并列的還有令牌環網,無線 LAN 等;
以太網幀格式
以太網的幀格式如下所示:
- 源地址和目的地址是指網卡的硬件地址(也叫 MAC 地址),長度是 48 位,是在網卡出廠時固化的;
- 幀協議類型字段有三種值,分別對應
IP
、ARP
、RARP
; - 幀末尾是 CRC 校驗碼。
認識MAC地址
- MAC 地址用來識別數據鏈路層中相連的節點;
- 長度為 48 位,及 6 個字節。一般用 16 進制數字加上冒號的形式來表示(例如: 08:00:27:03:fb:19);
- 在網卡出廠時就確定了,不能修改。mac 地址通常是唯一的(虛擬機中的 mac 地址不是真實的 mac 地址,可能會沖突;也有些網卡支持用戶配置 mac 地址)。
認識MTU
MTU 相當于發快遞時對包裹尺寸的限制。這個限制是不同的數據鏈路對應的物理層產生的限制。
- 以太網幀中的數據長度規定最小 46 字節,最大 1500 字節,ARP 數據包的長度不夠 46 字節,要在后面補填充位;
- 最大值 1500 稱為以太網的最大傳輸單元(MTU),不同的網絡類型有不同的 MTU;
- 如果一個數據包從以太網路由到撥號鏈路上,數據包長度大于撥號鏈路的 MTU 了,則需要對數據包進行分片(fragmentation);
- 不同的數據鏈路層標準的 MTU 是不同的;
MTU對IP協議的影響
由于數據鏈路層 MTU 的限制,對于較大的 IP 數據包要進行分包。
- 將較大的 IP 包分成多個小包,并給每個小包打上標簽;
- 每個小包 IP 協議頭的 16 位標識(id) 都是相同的;
- 每個小包的 IP 協議頭的 3 位標志字段中,第 2 位置為 0,表示允許分片,第 3 位來表示結束標記(當前是否是最后一個小包,是的話置為 1,否則置為 0);
- 到達對端時再將這些小包,會按順序重組,拼裝到一起返回給傳輸層;
- 一旦這些小包中任意一個小包丟失,接收端的重組就會失敗。但是 IP 層不會負責重新傳輸數據;
MTU對UDP協議的影響
讓我們回顧一下 UDP 協議:
- 在網絡層 UDP 多攜帶的數據超過 1472(1500 - 20(IP 首部) - 8(UDP 首部)),那么就會產生多個 IP 數據報。
- 這多個 IP 數據報有任意一個丟失,都會引起接收端網絡層重組失敗。那么這就意味著,如果 UDP 數據報在網絡層被分片,整個數據被丟失的概率就大大增加了。
MTU對于TCP協議的影響
讓我們再回顧一下 TCP 協議:
- TCP 的一個數據報也不能無限大,還是受制于 MTU。TCP 的單個數據報的最大消息長度,稱為
MSS
(Max Segment Size); - TCP 在建立連接的過程中,通信雙方會進行 MSS 協商;
- 最理想的情況下,MSS 的值正好是在 IP 不會被分片處理的最大長度(這個長度就是受制于數據鏈路層的 MTU);
- 雙方在發送 SYN 的時候會在 TCP 頭部寫入自己能支持的 MSS 值;
- 然后雙方得知對方的 MSS 值之后,選擇較小的作為最終 MSS;
- MSS 的值就在 TCP 首部的 40 字節變長選項中 (kind=2);
MSS和MTU的關系
查看硬件地址和MTU
使用 ifconfig
命令,即可查看 ip 地址,mac 地址,和 MTU;
局域網細節
- 為了避免局域網中數據碰撞問題,要保證任何時刻只有一臺主機在使用局域網資源
- 如果碰撞了,涉及到碰撞主機怎么辦?
- 碰撞檢測,碰撞避免(對臨界資源的保護)
- 整個局域網,被稱為碰撞域