以太网 以太网帧格式与IP报文分片

2.1.0 以太网 以太网帧格式与IP报文分片

一、以太网数据帧信息简介

以太网有两种类型的数据帧,一种是Ethernet_II另一种是IEEE802.3。

两者并没有明确的规定两种类型的使用场景,通常都是由协议/应用程序的开发者定义的。

通过观察发现:

  • 应用程序产生的包大多为Ethernet_II
  • 部分网络协议工作时产生的包为IEEE802.3(如:STP产生的BPDU)

以太网 以太网帧格式与IP报文分片_第1张图片
以太网 以太网帧格式与IP报文分片_第2张图片

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,直到满足最短帧长。
以太网 以太网帧格式与IP报文分片_第3张图片

疑惑:理论上说以太网帧不满足最小帧长,Data字段会填充0,但在终端所发送的包中并没有体现出来。

 以下是抓包用户发送的ICMP数据包结果,可以看了总帧长为45Byte(并没有将FCS字段长度计算在内),用户实际长度为3Byte,完全不符合最小帧长度的要求。
以太网 以太网帧格式与IP报文分片_第4张图片

网络设备这边,则是能够正常的进行填充,实现数据帧满足最小帧长要求

 网络设备这边可以看到帧长度为60Byte(加上FCS字段4byte就满足了最小64Byte帧长了)

如何计算填充多少字节?

64Byte-18Byte(以太网帧长度)-20Byte(IP报头)-8Byte(ICMP属于UDP报文占8Byte)-3Byte(实际发送长度)

=64-18-20-8-3 

=15Byte

以太网 以太网帧格式与IP报文分片_第5张图片

四、数据分片

以太网帧最短帧长度为64Byte(字节)、最长1518Byte,当超过1518Byte之后的数据帧就需要进行一个分片处理。

为什么数据包需要分片呢?

 因为有MTU(最大传输单元)限制,网络设备限制最大传输的MTU大小为1500Byte(此处的1500Byte指的是以太网中Data字段大小限制在1500Byte内),超过MTU值的数据包就需要进行分片,将数据包分成小于/等于MTU值大小的数据分片,到了目的地再组装起来。

换名话讲,当以太网帧长度大于1518Byte就需要进行分片。

如果数据包大小大于1518Byte,我强制不分片会怎样?

 会禁止发送该不正常的数据包。
以太网 以太网帧格式与IP报文分片_第6张图片

你可能感兴趣的:(HCIA相关知识,网络,udp,tcp/ip)