数据封装
应用数据需要经过TCP/IP每一层处理后才能通过网络传输到目的端,每一层上都使用该层的协议数据单元PDU(Protocol Data Unit)交换信息。
不同层的PDU中包含不同的信息,在不同层有不同的名称。
应用层数据在传输层添加TCP报文后的PDU称为Segment(数据段);
Segment(数据段)被传递到网络层,添加IP报文头得到的PDU称为Packet(数据包);
Packet(数据包)传递到数据链路层,添加Ethernet_Ⅱ或IEEE802.3报文后得到的PDU称为Frame(数据帧)。
最后,帧转换为比特,通过网络介质传输。这种逐层向下传递数据,并添加报头和报尾的过程称为封装。
从物理层逐层传递到目的端,向上传递的过程则是解封装。
以太网帧
Ethernet_Ⅱ的帧结构如下:
- DMAC(Destination MAC)是目的MAC地址,长度为6个字节,标识帧的接收者;
- SMAC(Source MAC)是源MAC地址,长度为6个字节,标识帧的发送者;
- Type类型字段,用于标识上层使用的协议类型,长度为2个字节,常见取值0x0800代表IP协议,0x0806代表ARP协议;
- Data数据字段,最小长度必须为46字节以保证帧长至少为64字节,最大长度为1500字节;
- FCS循环冗余校验字段,提供一种错误检测机制,长度为4字节。
抓包分析
2个16进制数即8个比特,也就是1个字节,从抓包结果可以核验DMAC是4字节
SMAC是4字节
Type是4字节
Trailer字段是18字节
整个Ethernet_Ⅱ帧是6+6+2+18=32字节
ARP报文是28字节,与Ethernet_Ⅱ帧的32字节,总共是60字节。
这是因为网卡接收到一个帧,第一步就是计算FCS,并与接收到的帧尾的FCS进行对比,如果一致,则接收,如果不一则丢弃。
Wireshark抓到的帧,是FCS校验通过的帧,而帧尾的FCS会被硬件去除,所以没有帧尾4字节FCS。
实际是60字节+4字节FCS=64字节,符合以太网最小帧长度。
wireshark抓包最大长度为1514字节(缺少4字节的FCS),实际为1518字节,与上图MTU+以太网帧头+FCS帧尾的总长度1518字节符合。
所以帧最小长度为64字节,最大长度为1518字节。
除去以太网帧头14字节,帧尾4字节,Data数据字段最小为46字节。
当数据字段的长度小于46字节时,MAC子层就会在数据字段的后面填充数据以达到64字节。
由于填充数据是由MAC子层负责,也就是设备驱动程序。不同的抓包程序和设备驱动程序所处的优先层次可能不同。
抓包程序的优先级可能比设备驱动程序更高,也就是可能在驱动程序还未填充到64字节时,抓包程序已捕获到数据。
因此不同抓包工具抓到的数据帧大小可能不同,甚至小于64字节:
标签:FCS,字节,一之,流量,MAC,64,长度,以太网 From: https://www.cnblogs.com/wlhk/p/17173660.html