Wireshark-ARP数据包

ARP:地址解析协议

由于IP地址只是主机在抽象的网络层的地址,若要将网络层中传送的数据报交给目的地址,还需要传到链路层变成MAC帧后才能发送到实际的网络中。因此,不管网络层使用的是什么协议,在实际的网络链路上传送数据帧时,最终必须使用硬件地址。

由于各种原因(例如,更换网卡、网络中加入了新的主机等等),不能根据IP地址得出物理地址。这时,想到了在主机中存放一个从IP地址到硬件地址的映射表,并且这个表还得时常更新。这个映射表就是地址解析协议(ARP)。

每一个主机就有一个ARP高速缓存,这里面有所在局域网上的各主机和路由器的IP地址到硬件地址的映射表,这些就是目前该主机知道的一些地址。

如果A想和B通信,但是A是才入网,总之,在主机A的RAP查找不到B的物理地址。在这种情况下,主机A就自动运行ARP,然后进行一下的步骤:

  • ARP向本局域网广播发送一个ARP请求分组,ARP的内容包括自己的IP地址和硬件地址,以及主机B的IP地址。
  • 在本局域网上的所有主机上运行的ARP进程都会收到这个ARP请求分组。
  • 主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组。并写入自己的硬件地址,其余的主机就不理睬这个ARP请求分组。注意:请求分组是广播发送的,但是响应分组是普通的单播。
  • 主机A收到主机B的ARP响应分组后,就在它的ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

在A向B发送数据报以后,B也可能向B发送数据报,如果,主机B收到主机A的请求分组时,就到主机A的这一地址映射写入自己的ARP的高速缓存中,这样,到时候,主机B想向主机A发送数据报时就可以用不着广播一个ARP请求分组了,就直接发送。

在以太网上解析IP地址时,ARP请求和应答分组的格式如下图所示:
Wireshark-ARP数据包_第1张图片

  1. 以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全 1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
  2. 两个字节长的以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值为0x0806。形容词hardware(硬件)和protocol (协议)用来描述ARP分组中的各个字段。例如,一个ARP请求分组询问协议地址(这里是 IP地址)对应的硬件地址(这里是以太网地址)。
  3. 硬件类型字段表示硬件地址的类型。它的值为 1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为 0x0800即表示 IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同,这是有意设计的。
  4. 接下来的两个 1字节的字段,硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答报文来说,它们的值分别为 6和4。
  5. 操作字段指出四种操作类型,它们是ARP请求(值为1)、ARP应答(值为 2)、RARP请求(值为3)和RARP应答(值为4)。这个字段必需的,因为ARP请求和RARP应答的帧类型字段值是相同的。
  6. 接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。
  7. 对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的端地址分别替换两个发送端地址,并把操作字段置为 2,最后把它发送回去。

下面通过wireshark抓包抓取一个ARP包进行分析:

Wireshark-ARP数据包_第2张图片

上面是ARP帧结构的解析,下面为实际获取的帧数据(16进制),可以通过下面的数据读取相应的参数;

Wireshark-ARP数据包_第3张图片

这里可以发现获取的包字节为60而不是64(以太网的最小帧长是64),原因在于抓包软件抓到的是去掉前导同步码、帧开始分界符、FCS之外的数据,wireshark把8字节的前序和4字节的FCS都给过滤了。wireshark中所显示的报文长度是包含14字节以太类型头,28字节ARP请求/应答,但不计算尾部4字节校验FCS值的.
因此对于IP报文类似的有wireshark报文长度大小:14(以太类型头)+20(IP头)+(实际数据)

RARP:逆地址解析协议

逆地址协议和地址解析协议是刚好相反的,他通过物理地址获取相应的IP地址,一般用于网络上的无盘系统。其帧结构和RAP基本相同,它们之间主要的差别是 R A R P请求或应答的帧类型代码为 0 x 8 0 3 5,而且R A R P请求的操作代码为3,应答操作代码为4。

你可能感兴趣的:(通信网络)