MPLS環境下的分片為何是1472而不是1476,多出的4bytes有什麼用?

NPLS環境下擴展Ping,size為1800,ICMP Data長度的為1780,三層報頭為20,為何分片長度為1472和308呢,1472加20位元組報頭長度再加4位元組標籤為1496,剩下的4位元組有什麼用處呢?

說明:

路由器是先分片再加三層報頭的和標籤的

是單層的標籤,只有MPLS


答案已經很清楚了,分片得時候需要是8位元組的整數倍,具體為何可以參考以下分析:

Identification:IP包的序列號

佔據兩個位元組的長度,0—65535,到了65535再從0開始循環往複,問題是誰會用這個序列號呢?非專業或專業同學請認真思考,這個序列號誰會用?那我先來回答,IP包的分片Fragment、重組reassemble會用!當IP

=2000byte需要從主機物理介面發送出去,而物理介面的一次最大發送單元maximum transport unit MTU=1500

位元組,IP包 2000 &>1500 MTU,怎麼辦?丟了嗎?No!切割分片,分成兩個各1000位元組的IP包,那誰來重組這些分片呢?目的地IP主機來重組,那問題來了,目的地主機如何知道誰與誰重組,分片是2片、16片還是其他片?誰是第一片,誰又是第二片呢?

第一個問題的答案是:分片的Identification是一樣的,比如都是1000,到達目的地主機就會把ID=1000放在一起重組。IP頭還有個標誌位,MF,More Fragment,如果是0,表示最後一個分片,如果是1則不是。

第二個問題的答案是:IP頭還有一個Fragment Offset,一共佔據13bit位,根據其偏移量的值可以知道其是第幾片,這裡有一個問題大家看出來了嗎?IP包長度有16位,而這個分片偏移長度只有13位,怎麼匹配他們呢?舉例,如果我的IP長度為2的16次方,那你偏移長度最大也只有2的13次方,如何解決!把後者乘以2的三次方不就可以了嗎?所以IP協議的創始者很聰明地規定,Fragment offset 的單位為8個位元組。


其實簡單做法就是抓包.用wireshark一看就知道了.

根據你說的情況,4bytes,我猜是802.1Q. 就是樓上說的L2的VLAN tag.

IEEE 802.1Q 802.1Q的wiki.

----------

丟人改自己寫錯的答案.

我後來抓包看了下.然後知道自己錯了.

因為你沒有理解另外一個概念,IP分片的時候前面的大包在傳輸過程中data只能是8bytes整數倍.所以只能是1472.或者是1480.如果達到1480.加上20+4,就超過了介面默認的MTU 1500了.所以會在1472分片.整個包就是1472+20+4.達到1496.剩下的4個bytes就是空著.

為什麼分片時候必須是8bytes的整數倍?

這是另外一個問題.可以google到的.自行搜索可以得到答案.


感謝邀請

對部分的協議細節有點模糊。

猜測是留給L2的VLAN tag之類的。

有時間再補充啦、


推薦閱讀:

通信工程專業考ccie證書有用嗎?ccie跟通信工程專業關聯性大不大?
如何備考CCIE?
如何學好 CCNP?
網路工程師3-5年後怎樣轉行?
請問你是如何考過CCIE的?

TAG:計算機網路 | CCIE |