網路資料報最大長度 MTU 分片

2021-07-22 16:11:18 字數 1872 閱讀 9259



1、資料鏈路層對資料幀的長度都有乙個限制,也就是鏈路層所能承受的最大資料長度,這個值

稱為最大傳輸單元,即mtu。以乙太網為例,這個值通常是1500位元組。

2、對於ip資料報來講,也有乙個長度,在ip包頭中,以16位來描述ip包的長度,也就是說,

乙個ip包,最長可能是65535位元組。

3、結合以上兩個概念,第乙個重要的結論就出來了,如果ip包的大小,起過了mtu值,那麼就需要

分片,也就是把乙個ip包分為多個,這個概念非常容易理解,乙個載重5t的卡車,要拉10t的貨,它

當然就得分幾次來拉了。

4、ip分片是很多資料常講的內容,但是我倒是覺得分不分片其實不重要,重要的是另乙個東西。乙個

資料報穿過乙個大的網路,它其間會穿過多個網路,每個網路的mtu值是不同的。我們可以設想,如果

接受/傳送端都是乙太網,它們的mtu都是1500,我們假設傳送的時候,資料報會以1500來封裝,然而,

不幸的是,傳輸中有一段x.25網,它的mtu是576,這會發生什麼呢?我想,這個才是我們所關心的。

當然,結論是顯而易見的,這個資料報會被再次分片,咱開始用火車拉,到了半路,不通火車,只通汽車,

那一車貨會被分為很多車……僅此而已,更重要的是,這種情況下,如果ip包被設定了「不允許分片標誌」,那

會發生些什麼呢?對,資料報將被丟棄,然事收到乙份icmp不可達差錯,告訴你,需要分片!

這個網路中最小的mtu值,被稱為路徑mtu,我們應該有一種有效的手段,來發現這個值,最笨的方法或許是先

用traceroute檢視所有節點,然後乙個個ping……

5、到了傳輸層,也會有乙個最大值的限制,當然,對於只管發,其它都不管的udp來說,不再我們討論之列。這裡

說的是tcp協議。說到大小,或許會讓人想到tcp著名的滑動視窗的視窗大小,它跟收發兩端的快取有關,這裡討論

的是傳輸的最大資料報大小,所以,它也不在討論之列。

tcp的選項欄位中,有乙個最大報文段長度(mss),表示了tcp傳往另一端的最大資料的長度,當乙個連線立時,連線

的雙方都要通告各自的mss,也就是說,它說是與tcp的syn標誌在一起的。當然,對於傳輸來講,總是希望mss越大越好,

現在超載這麼嚴重,誰家不希望多拉點貨……但是,mss總是有個限制的,也就是mtu-ip頭長度-tcp頭長度,對於乙太網來講

它通常是1500-20-20=1460,雖然總是希望它能很大(如1460),但是大多數bsd實現,它都是512的倍數,如1024……

6、回到分片上來,例如,在win2000下執行如下命令:

ping 192.168.0.1 -l 1473

按剛才的說法,1473+20(ip頭)+8(icmp頭)=1501,則好大於1500,它會被分片,但是,我們關心的是:

這個資料報會被怎麼樣分法?

可以猜想,第乙個包是

以太頭+ip頭+icmp頭+1427的資料;

那第二個分片包呢?

它可以是:

以太頭+ip頭+icmp頭+1個位元組的資料

或者是:

以太頭+ip頭+1個位元組的資料

也就是省去icmp頭的封裝,當然,ip頭是不可以省的,否則怎麼傳輸了……

事實上,tcp/ip協議採用的是後一種封裝方式,這樣,一次可以節約8個位元組的空間。ip包頭中,用了三個標誌來描述乙個分片包:

1、分片標誌:如果乙個包被分片了,被置於1,最後乙個分片除外;——這樣,對於接收端來講,可以根據這個標誌位做為重組的重

要依據之一;

2、分片偏移標誌:光有乙個標誌位說明「自己是不是分片包」是不夠的,偏移標誌位說明了自己這個分片拉於原始資料報的什麼位置,

很明顯,這兩個標誌一結合,就很容易重組分片包了。

3、不允許分片標誌:如果資料報強行設定了這個標誌,那麼在應該分片的時候,…… err,剛才已經說過了

UDP資料報最大傳輸長度

乙太網 ethernet 資料幀的長度必須在46 1500位元組之間,這是由乙太網的物理特性決定的.這個1500位元組被稱為鏈路層的mtu 最大傳輸單元 但這並不是指鏈路層的長度被限制在1500位元組,其實這這個mtu指的是鏈路層的資料區.並不包括鏈路層的首部和尾部的18個位元組.所以,事實上,這個...

UDP資料報最大傳輸長度

乙太網 ethernet 資料幀的長度必須在46 1500位元組之間,這是由乙太網的物理特性決定的。這個1500位元組被稱為鏈路層的mtu 最大傳輸單元 但這並不是指鏈路層的長度被限制在1500位元組,其實這這個mtu指的是鏈路層的資料區.並不包括鏈路層的首部和尾部的18個位元組.所以,事實上,這個...

UDP資料報最大傳輸長度

概念 乙太網 ethernet 資料幀的長度必須在46 1500位元組之間,這是由乙太網的物理特性決定的.這個1500位元組被稱為鏈路層的mtu 最大傳輸單元 但這並不是指鏈路層的長度被限制在1500位元組,其實這這個mtu指的是鏈路層的資料區.並不包括鏈路層的首部和尾部的18個位元組.所以,事實上...