MTU 和 MSS 的學習與梳理

2021-09-23 01:59:35 字數 2661 閱讀 7455

mtu = mss + ip頭 + tcp頭

max segment size,一般會是1460 + 20 + 20 = 1500

發包大小是由mtu較小的一方決定的,

在網路拓撲中,還會有vlan、vxlan等協議的報文頭部,屆時需要根據實際情況再分析確認。

最大傳輸單元(英語:maximum transmission unit,縮寫mtu)是指一種通訊協議的某一層上面所能通過的最大資料報大小(以位元組為單位)。最大傳輸單元這個引數通常與通訊介面有關(網路介面卡、串列埠等)。

網際網路協議允許ip分片,這樣就可以將資料報包分成足夠小的片段以通過那些最大傳輸單元小於該資料報原始大小的鏈路了。這一分片過程發生在 ip 層(osi模型的第三層,即網路層),它使用的是將分組傳送到鏈路上的網路介面的最大傳輸單元的值。原始分組的分片都被加上了標記,這樣目的主機的 ip 層就能將分組重組成原始的資料報了。

在網際網路協議中,一條網際網路傳輸路徑的「路徑最大傳輸單元」被定義為從源位址到目的位址所經過「路徑」上的所有ip跳的最大傳輸單元的最小值。或者從另外乙個角度來看,就是無需進一步分片就能穿過這條「路徑」的最大傳輸單元的最大值。

rfc 1191 描述了「路徑最大傳輸單元發現方法」,這是一種確定兩個 ip 主機之間路徑最大傳輸單元的技術,其目的是為了避免 ip 分片。在這項技術中,源位址將設定資料報的 df(don』t fragment,不要分片)標記位,再逐漸增大傳送的資料報的大小——路徑上任何需要將分組進行分片的裝置都會將這種資料報丟棄並返回乙個「資料報過大」的 icmp 響應到源位址——這樣,源主機就「獲取」到了不用進行分片就能通過這條路徑的最大的最大傳輸單元了。

不幸的是,越來越多的網路**了 icmp 的傳輸(譬如說為了防範 dos 攻擊)——這使得路徑最大傳輸單元發現方法不能正常工作,其常見表現就是乙個連線在低資料流量的情況下可以正常工作,但一旦有大量資料同時傳送,就會立即掛起(例如在使用 irc 的時候,客戶會發現在傳送了乙個禁止 ip 欺騙的 ping 之後就得不到任何響應了,這是因為該連線被大量的歡迎訊息堵塞了)。而且,在乙個使用網際網路協議的網路中,從源位址到目的位址的「路徑」常常會為了響應各種各樣的事件(負載均衡、擁塞、斷電等等)而被動態地修改——這可能導致路徑最大傳輸單元在傳輸過程中發生改變——有時甚至是反覆的改變。其結果是,在主機尋找新的可以安全工作的最大傳輸單元的同時,更多的分組被丟失掉了。

對於時下大多數使用乙太網的區域網來說,最大傳輸單元的值是 1,500 位元組。但是像 pppoe 這樣的系統會減小這個數值,通常是1492(= 1500 - 2(ppp)- 6(pppoe)),這就使得在使用最大傳輸單元發現方法時可能會產生這樣的結果:一些處於配置不當的防火牆之後的站點變得不可達了。對於這種情況,還是可能找到變通的方法的,但這取決於你控制的是網路的哪一部分。這些方法包括改變用來在防火牆一端建立 tcp 連線的第乙個分組的 mss(maximum segment size,最大分段大小)。

對於一些支援老版本乙太網協議的 ibm 系統(例如 xseries),可能只有在把最大傳輸單元設為 1492 之後才能在當下常見的區域網上進行運作。

當源端傳送報文時,設定資料報的df標記位,df=1表示 接受主機不能對分組進行分片。如果分組的長度超過 mtu,又不可以分片,那麼這個分組只能丟棄。df=0,表示可以分片。

可以使用ping 命令來進行模擬實現,ping 命令 -s 選項可以指定傳送ping包大小, -m 選項可以指定df 標記位。

可以看到,由於本機mtu是1500,當不允許分片時,面對超過mtu的大包,網絡卡無法處理,就會將包丟棄。可以分片的情況下,就可以正常分片傳輸。

抓取了分片的報文,使用wireshark開啟檢視:

如果是不允許分片的情況則是:

最大分段大小(maximum segment size)是傳輸控制協議的乙個引數,以位元組數定義乙個計算機或通訊裝置所能接受的分段的最大資料量。 它並不會計算 tcp 或 ip 協議頭的大小。含有 tcp 分段的 ip 資料報可以在乙個資料報內自我包含,也可以從多個ip分片中重建。無論如何,mss 限制都對最終重建的分段起效。

預設的 tcp 最大分段大小是 536。當乙個主機想要把 mss 設定到乙個非預設的值時,mss 大小會以乙個 tcp 可選項的方式在握手時的 syn 包中定義。由於最大分段大小被乙個 tcp 引數控制,主機可以在接下來的任意分段中改變它。

每個資料流的方向都可以使用不同的 mss。

為了避免ip分片,主機應該將最大分段大小定義為最大 ip 資料報大小減去 ip 和 tcp 協議頭的大小。 於是 ipv4 主機被要求能夠承擔 536(=576-20-20) 位元組的分段大小,ipv6 主機則須能承擔 1220(= 1280[5] - 40 - 20) 位元組的分段。

較低的最大分段大小能夠減少或消除ip分片,然而會造成協議開銷增大。

對於大部分作業系統來說,最大分段大小的值由作業系統指定。

在實際的報文通訊中,會在tcp握手階段會首先宣告:

MSS和MTU的關係

網上有文章這樣描述 大家可以參考理解 mss指的是tcp中的乙個概念。mtu是乙個沒有固定到特定osi層的概念,不受其他特定協議限制。也就是說第二層會有mtu,第三層會有mtu,像mpls這樣的第2.5層協議,也有自己的mtu值。並且不同層之間存在關聯關係。舉個例子 如果你要搬家,需要把東西打包,用...

MTU與MSS有什麼區別

mtu是網路傳輸最大報文包,mss是網路傳輸資料最大值。具體分析如下 1 mss加包頭資料就等於mtu.簡單說拿tcp包做例子。報文傳輸1400位元組的資料的話,那麼mss就是1400,再加上20位元組ip包頭,20位元組tcp包頭,那麼mtu就是1400 20 20.當然傳輸的時候其他的協議還要加...

乙太網和PPPOE網路下MTU和MSS的關係

mtu maxitum transmission unit 最大傳輸單元 mss maxitum segment size 最大分段大小 pppoe ppp over ethernet 在乙太網上承載ppp協議 就是因為這個協議的出現我們才有必要修改我們的mss或者是mtu值。一般的網路環境下,mt...