网络基础协议之ARP

ARP 报文格式

 

  • 硬件类型:16位字段,用来定义运行ARP的网络类型。每个局域网基于其类型被指派一个整数。例如:以太网的类型为1。ARP可用在任何物理网络上。
  • 协议类型:16位字段,用来定义使用的协议。例如:对IPv4协议这个字段是0800。ARP可用于任何高层协议
  • 硬件长度:8位字段,用来定义物理地址的长度,以字节为单位。例如:对于以太网的值为6。
  • 协议长度:8位字段,用来定义逻辑地址的长度,以字节为单位。例如:对于IPv4协议的值为4。
  • 操作码:16位字段,用来定义报文的类型。已定义的分组类型有两种:ARP请求(1),ARP响应(2)。
  • 源硬件地址:这是一个可变长度字段,用来定义发送方的物理地址。例如:对于以太网这个字段的长度是6字节。
  • 源逻辑地址:这是一个可变长度字段,用来定义发送方的逻辑(IP)地址。例如:对于IP协议这个字段的长度是4字节。
  • 目的硬件地址:这是一个可变长度字段,用来定义目标的物理地址,例如,对以太网来说这个字段位6字节。对于ARP请求报文,这个字段为全0,因为发送方并不知道目标的硬件地址。
  • 目的逻辑地址:这是一个可变长度字段,用来定义目标的逻辑(IP)地址,对于IPv4协议这个字段的长度为4个字节。

ARP报文总长度

首先要知道帧的概念,帧是在数据链路层传输的数据格式,比如以太网v2,以太网IEEE802.3和PPP等。Wireshark抓到的帧是包含帧头的,即包含以太网v2的帧头,长14 bytes;而ARP数据包的长度固定为28 bytes;

正常应用数据包帧总长度 = 帧头 + 网络层包头 + 传输层报文头 + 应用数据;

而ARP请求中ARP包已经是最高层,之上没有传输层和应用层,所以总长度为:
帧总长度 = 帧头 + ARP包头 = 14 + 28 = 42 bytes;

而真正发包时为了保证以太网帧的最小帧长为64 bytes,会在报文里添加一个padding字段,用来填充数据包大小。但wireshark抓包时,抓到的包为60 bytes。比以太网帧的最小帧长少了4 bytes,原因是因为wireshark抓包时不能抓到数据包最后的CRC字段。
CRC字段是为了校验以太网帧的正确性。在数据包填充完成后,回去通过算法计算一个值放到数据包的CRC字段中。当接受端收到数据包后,会同样使用算法计算一个值,然后和CRC字段的值进行对比,查看是否相同。如果不同则证明数据包被更改,如果相同则证明数据包并未被更改。

参考文档

  • https://blog.csdn.net/ever_peng/article/details/80008638
  • https://en.wikipedia.org/wiki/Ethernet_frame#Header
  • https://blog.csdn.net/weixin_42531128/article/details/112713286
心若向阳,无谓悲伤!
原文地址:https://www.cnblogs.com/guge-94/p/14518801.html