天天看點

2.1.0 以太網 以太網幀格式與IP封包分片

一、以太網資料幀資訊簡介

以太網有兩種類型的資料幀,一種是Ethernet_II另一種是IEEE802.3。

兩者并沒有明确的規定兩種類型的使用場景,通常都是由協定/應用程式的開發者定義的。

通過觀察發現:

  • 應用程式産生的包大多為Ethernet_II
  • 部分網絡協定工作時産生的包為IEEE802.3(如:STP産生的BPDU)
2.1.0 以太網 以太網幀格式與IP封包分片

DMAC字段(目标的MAC位址)

SMAC字段(發送者的MAC位址)

Type字段(描述Data中的封裝的封包類型)常見類型:ARP[0x0806]、IP[0x0800]、VLAN[0x8100]

Data字段(使用者資料,其中還包含IP報頭、TCP/UDP報頭)

其中的封裝可以看作以下的抽象描述:

【          Data資料            】
【     IP報頭【Data資料】        】
【  IP報頭【TCP報頭【使用者資料】】 】           

FCS字段(以太網校驗字段,校驗方法為循環備援檢驗)

二、以太網資料幀長度

以太網資料幀及封裝

以太網幀最短幀長度為64Byte(位元組)、最長1518Byte,當超過1518Byte之後的資料幀就需要進行一個分片處理。

以太網幀所占用的長度為:DMAC+SMAC+Type+FCS=18Byte。

已知最短幀長為64Byte,減去以太網18Byte之後就說明Date字段封裝内容最短需要有46Byte。

46Byte中還包含着IP報頭與TCP或UDP報頭:

  • 46Byte減去IP報頭的20Byte=26Byte
  • 當内部封裝TCP時:26Byte減去TCP報頭20Byte=6Byte
  • 當内部封裝UDP時:26Byte減去UDP報頭8Byte=18Byte
得出的結果大小,也就是實際使用者資料的最小長度。

三、資料填充

如果不滿足最短幀長會怎樣?

 以太網幀中的Data字段會自行填充0,直到滿足最短幀長。

2.1.0 以太網 以太網幀格式與IP封包分片

疑惑:理論上說以太網幀不滿足最小幀長,Data字段會填充0,但在終端所發送的包中并沒有展現出來。

 以下是抓包使用者發送的ICMP資料包結果,可以看了總幀長為45Byte(并沒有将FCS字段長度計算在内),使用者實際長度為3Byte,完全不符合最小幀長度的要求。

2.1.0 以太網 以太網幀格式與IP封包分片

網絡裝置這邊,則是能夠正常的進行填充,實作資料幀滿足最小幀長要求

 網絡裝置這邊可以看到幀長度為60Byte(加上FCS字段4byte就滿足了最小64Byte幀長了)

如何計算填充多少位元組?

64Byte-18Byte(以太網幀長度)-20Byte(IP報頭)-8Byte(ICMP屬于UDP封包占8Byte)-3Byte(實際發送長度)

=64-18-20-8-3 

=15Byte           
2.1.0 以太網 以太網幀格式與IP封包分片

四、資料分片

以太網幀最短幀長度為64Byte(位元組)、最長1518Byte,當超過1518Byte之後的資料幀就需要進行一個分片處理。

為什麼資料包需要分片呢?

 因為有MTU(最大傳輸單元)限制,網絡裝置限制最大傳輸的MTU大小為1500Byte(此處的1500Byte指的是以太網中Data字段大小限制在1500Byte内),超過MTU值的資料包就需要進行分片,将資料包分成小于/等于MTU值大小的資料分片,到了目的地再組裝起來。

換名話講,當以太網幀長度大于1518Byte就需要進行分片。

如果資料包大小大于1518Byte,我強制不分片會怎樣?

 會禁止發送該不正常的資料包。

2.1.0 以太網 以太網幀格式與IP封包分片