注:本文参考了CSDN博主「OshynSong」的原创文章【https://blog.csdn.net/u010487568/article/details/39329791】
解析以太网数据帧的关键是获取类型字段,然后根据类型字段将数据字段的数据交给上层协议进行处理,同时保存下目的MAC地址和源MAC地址,以供后续其他使用。
以太网帧数据格式:
1.前同步码
前7B都是10101010,最后1B是10101011。
用于将发送方与接收方的时钟进行同步,由网卡适配器接收帧时同步时钟使用,不会在接收方显示。
由于有不同的以太网类型和不完全精确的发送、接收帧速率,因此在传输前需要进行时钟同步。
2.MAC地址
6Bytes共128bits的MAC物理地址,用于标识局域网中的每个主机。
目的MAC可以是某个机器的物理地址,也可以是FF-FF-FF-FF-FF-FF广播MAC地址。
3.类型
解析以太网数据帧的关键。接收方根据此字段进行多路分解,从而达到解析以太网帧的目的,将数据字段交给对应的上层网络层协议,这样就完成了以太网作为数据链路层协议的工作。
类型字段是网络协议分层设计减小耦合度的精心设计,允许以太网多路复用网络层协议,支持除IP协议之外的其他网络层协议,或者是承载在以太网帧里的协议(如ARP协议)。
根据 IEEE802.3,以太网类型字段(EtherType 字段)是两个字节的字段,IEEE RAC EtherType 字段批准权威机构负责检查和批准。
下表为常用的以太网承载的协议,通过判断类型字段就可以解析以太网数据帧,并交由上层协议进一步处理。
以太网类型(16进制) | 对应协议 |
0x0800 | 网际协议(IP) |
0x0806 | 地址解析协议(ARP : Address Resolution Protocol) |
0x0808 | 帧中继 ARP (Frame Relay ARP) |
0x8035 | 反向地址解析协议(RARP:Reverse Address Resolution Protocol) |
0x8035 | 动态反向地址解析协议 (DRARP:Dynamic RARP) |
0x86DD | IPv6(Internet Protocol version 6) |
0x880B | 点对点协议(PPP:Point-to-Point Protocol) |
0x88CC | 链接层发现协议(LLDP:Link Layer Discovery Protocol) |
0x07C3=1987,这个是服务端的监听端口。
TCP,UDP,ICMP,IGMP的数据包:ICMP常见应用是ping命令
4.数据
在交换式以太网中,一台主机向局域网中的另一台主机发送一个IP数据报,这个数据报封装在以太网帧结构中作为其有效载荷。
以太网的最大传输单元(MTU)是1500Bytes,如果IP数据报超过1500B,启用IP协议的分片策略进行传输。
以太网的最小传输数据长度为46Bytes,如果不够必须要填充到46B。
5.循环冗余校验CRC
用来让接收方的网卡适配器检查接收的到数据帧是否有错误。
如果校验不合格就丢弃,只有合格的数据帧才会被网卡接收,由网卡适配器硬件直接响应,因此无需管理。