TCP/IP memo 1: MTU、路徑MTU、路徑MTU的發現機制

(以下內容摘自《TCP/IP詳解 1:協議》)

MTU及路徑MTU

以太網和802.3對數據幀的長度都有一個限制,其最大值分別是1500461500)和1492字節。鏈路層的這個特性稱作MTU,最大傳輸單元。不同類型的網絡大多數都有一個上限。(注:MTU是鏈路層的特性,由鏈路層物理性質決定,和上層無關。

如果兩臺主機之間的通信要通過多個網絡,那麼每個網絡的鏈路層就可能有不同的MTU。兩臺通信主機路徑中的最小MTU。它被稱作路徑MTU。兩臺主機之間的路徑MTU不一定是個常數,它取決於當時所選擇的路由。而選路不一定是對稱的(從AB的路由可能與從BA的路由不同),因此路徑MTU在兩個方向上不一定是一致的。

 

路徑MTU的發現機制

當路由器收到一份需要分片的數據報,而在IP首部又設置了不可分片(DF)的標誌位時,則會產生ICMP不可達差錯。(注:產生ICMP不可達差錯可能有3種情況,TTL0端口不可達,以及IP需要分片但又設置了不允許標誌

這種情況下的ICMP不可達差錯報文可以提供下一站的MTU。如果路由器沒有提供這種新的ICMP差錯報文格式,那麼下一站的MTU就設爲0

儘管大多數的系統不支持路徑MTU發現功能,但可以很容易地修改traceroute程序,用它來確定路徑MTU。要做的是發送分組,並設置“不可分片”標誌比特。發送的第一個分組的長度正好與出口MTU相等,每次收到ICMP“不能分片”差錯時就減小分組的長度。如果路由器發送的ICMP差錯報文是新格式,包含出口的MTU,那麼就用該MTU值來發送,否則就用下一個最小的MTU值來發送。正如RFC1191[Mogul and Deering 1990]聲明的那樣,MTU值的個數是有限的,因此在我們的程序中有一些由近似值構成的表,取下一個最小MTU值來發送。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章