您現在的位置是:首頁 > 遊戲

MTU 和 MSS 的學習與梳理

由 海淵haiyuan 發表于 遊戲2022-02-19
簡介在這項技術中,源地址將設定資料報的 DF(Don't Fragment,不要分片)標記位,再逐漸增大發送的資料報的大小——路徑上任何需要將分組進行分片的裝置都會將這種資料報丟棄並返回一個“資料報過大”的 ICMP 響應到源地址——

海康錄影機mtu位元組什麼意思

MTU 和 MSS 的學習與梳理

1、MTU:

最大傳輸單元

(英語:

M

aximum

T

ransmission

U

nit,縮寫

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 和 MSS 的學習與梳理

MTU 和 MSS 的學習與梳理

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

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

MTU 和 MSS 的學習與梳理

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

MTU 和 MSS 的學習與梳理

2。MSS

最大分段大小

M

aximum

S

egment

S

ize)是傳輸控制協議的一個引數,以位元組數定義一個計算機或通訊裝置所能接受的分段的最大資料量。 它並不會計算 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握手階段會首先宣告:

MTU 和 MSS 的學習與梳理

推薦文章