TCP/IP

最大傳輸單元 (Maximum Transmission Unit, MTU)

封裝 與 拆裝 一文,
提及了 區段 (Segment)、資料包 (Datagram)、訊框 (Frame)、封包 (Packet) 的概念。
應用層的資料,經由逐層的 封裝 (Encapsulation),
最後成為 資料鏈結層 (Data-Link Layer) 的 訊框 (Frame) 並傳送。
encapsulation
 

但是,訊框 (Frame) 太大會發生什麼事?

 

 

  • 傳輸需耗損大量的 緩衝區 (buffer) 大小
  • 傳輸媒介可能被某一傳送端獨佔,造成堵塞

 
因此,資料鏈結層 (Data-Link) 規範了 訊框 (Frame) 的大小上限,
也就是 — — 最大傳輸單元 (Maximum Transmission Unit, MTU)
如果沒有這些缺點, MTU 當然越大越好啦!
 


 

最大傳輸單元 (MTU)

不同的 資料鏈結層,有不同的 MTU。
如:
乙太網路 (Ethernet)1500 個位元組,
IEEE 802.3/802.2 的 1492 個位元組,
光纖分散式數據介面 (FDDI) 的 4352 個位元組…。
 
以 乙太網路 (Etherner) 為例:
Ethernet-frame-format
 
一個 乙太網路 訊框 (Frame),最大的長度為 1518 位元組 (octet),
去掉表頭 與 尾端資訊後,酬載的最大資料長度則為 1500 octet,
且資料最小長度需為 46 octet,不足的話就用 填充位元 (padding) 填滿至 46 為止。
 


 
使用指令:

netstat -i

 
可顯示系統網路介面資訊 (含 MTU)
netstat -i
 


 

IP 分段
(IP Fragmentation)

 
網路層的 IPv4 與 IPv6,
其封包大小上限,分別為 65535 與 65575 位元組 (octet),
並提供較大的封包選項 — — 巨型封包 (jumbograms)。
遠遠超出了許多資料鏈結層的 訊框大小!
 
IP 分段 (IP Fragmentation) 即是其中一種解法:

 

IP 會將封包切割成多個較小的 (小於 MTU) 片段 (fragment),使其能透過資料鏈結層傳輸 ,
目的端接收完所有片段後,再將片段 (fragment) 進行重組。

 
分段 (fragmentation),可能由傳輸路徑中的任何一台路由器來做 (含來源主機),
且被分段的封包 — — 片段 (fragment) 可能經由不同路由方式,
只要最終達到相同的目的地即可。
(IPv6 只有來源端可以做分段)
 
將 IP 資料包 (IP Datagram) 分段的主機或路由器,
會複製必要欄位到各個片段中,
並更改 旗標、片段偏移量、(封包)總長度,與重新計算各個分段的 檢驗和
(IP 檢驗和,不含 虛擬表頭)
 
最後,目的端接收完所有片段後,再將片段 (fragment) 進行重組:

IP Datagram 格式
IP Datagram 格式
 
將在未來討論 IP 協定進一步說明。
 


 

Path MTU Discovery

如果 IP Fragmentation 任一片段遺失、毀損呢?

 
答案是: 目的端將無法重組這個封包。
 
更重要的是:

網路層的 IP 並不會處理重送

 
這對有重送機制的傳輸層 (Ex: TCP),降低了傳輸效率 (無法只重送一個 片段);
對沒有重送機制的傳輸層 (Ex: UDP),增加了資料的遺失率。
 
Path MTU Discovery 技術,有效的避免 IP Fragmentation:

找出 來源 與 目的端路徑中,
所有資料鏈結層裡的 最小 MTU。
(通常,為乙太網路的 1500 octet)

 
許多可靠的傳輸層 (如: TCP),會以此值做為參考,
調整 最大區段長度 (Maximum Segment Size, MSS)
 
最簡單的算法:

MSS = MTU - 20 octet (TCP 固定表頭) - 20 octet (IP 固定表頭)

 
或 其他動態調整演算法,
常見的 MSS 有 1460、1400、1380…。
 
而沒有此機制的傳輸層 (如: UDP),則是選擇適當的 資料包 (Datagram) 大小,
確保傳輸的 IP 封包,會小於 IPv4 的最小可重組緩衝區大小 (576 octet),避免 IP Fragmentation
 
 

作者: 鄭中勝
喜愛音樂,但不知為何總在打程式 ? 期許能重新審視、整理自身所學,幫助有需要的人。

在《最大傳輸單元 (Maximum Transmission Unit, MTU)》中有 2 則留言

發表迴響