【数据链路层】以太网帧包解析

发布于:2024-05-16 ⋅ 阅读:(74) ⋅ 点赞:(0)


以太网的帧结构

在这里插入图片描述
使用抓包工具,查看数据链路层信息:
在这里插入图片描述


解析数据链路层信息

(1)协议类型:代表上层的协议 (IP=00800 ARP=00806 IPv6=86DD )
如图中所示:
在这里插入图片描述
在每一层中都存在一个字段表示上层的协议 是什么,以太网中协议类型为0x86dd,表明上层协议是IPv6。在IPv6 中下一个协议头字段为58,表明上层协议是IPv6-ICMP。

(2)帧大小范围 :64B~1518B
(3)MTU :最大传输单元,每次发送数据的最大值(默认为1500B,大于或小于该值的数据帧都有问题)
问题一:如何计算包大小?用工具随便抓取一个包计算下大小。
在这里插入图片描述
图中 带有[ ] 符号里的数字单位为字节,具体表示为: [ 从开始到现在的字节数 / 这个字段或这个协议总字节数 ]
以太网 - II[Ethernet - II] [0/14]
    从开始到现在的字节数为0;以太网头总字节数为14
互联网协议版本6[Internet Protocol Version 6] [14/72]
    从开始到现在的字节数为14;IPv6 总字节数为72
ICMPV6 - 互联网控制消息协议版本6[ICMPV6 - Internet Control Message Protocol Version 6] [54/32]
    从开始到现在的字节数为54;ICMPV6 总字节数为32
帧校验序列[FCS - Frame Check Sequence]
    默认4字节
综上所示,包大小为 54+32+4 = 90字节。(与抓包大小显示的字节数一致,正确)

问题二、抓到的包最大1518字节,为什么不是1526字节 ?
以太网最大帧长应该是 7字节前导同步码 + 1字节帧开始定界符 + 6字节的目的MAC + 6字节的源MAC + 2字节的帧类型 + 1500 + 4字节的FCS。最大帧应该是1526字节,但是实际上我们抓包得到的最大帧是1518字节。
在数据帧到达网络接口卡(NIC)的过程中,物理层首先会移除前导同步码和帧的开始定界符。随后,NIC会执行循环冗余校验(CRC)来验证帧的完整性;如果CRC校验失败,则该帧会被丢弃。如果校验通过,NIC将检查目的MAC地址是否与自己的硬件地址匹配,或者是否是一个允许接收的多播或广播地址。只有当地址匹配时,NIC才会将帧传递给设备驱动程序进行进一步处理。此时网络抓包工具才能捕获到数据帧,但捕获内容不包括前导同步码、帧定界符。因此,实际抓取的数据帧长度最大为6字节的目的MAC、6字节的源MAC、2字节的帧类型、4字节的FCS加上最多1500字节的数据负载,总共1518字节。

问题三、ping包解析
命令行中执行:ping www.baidu.com 默认发包32字节,抓包查看32字节是在哪个字段里。
在这里插入图片描述
将ping包字节扩大到1000字节,命令行输入 ping www.baidu.com -l 1000
在这里插入图片描述
(4)FCS帧校验序列 4B :用来检测数据的完整性,不完整的会被之间丢弃(不会重传,靠上层实现重传)
在这里插入图片描述

(5)MAC地址 :代表一个网络接口的物理地址,全球唯一
在这里插入图片描述
MAC地址由两部分组成,分别是供应商代码和序列号。前24位是IEEE电气和电子工程师协会分配给厂商,后24位是厂商分配的用户。
数据链路层基于MAC地址进行帧传输。
上述问题二中有详细解析主机接收到数据帧的动作:1.检测FCS,通过下一步(反则丢弃)2.检测DMAC,通过交给上层(反则丢弃)。