ARP协议

ARP协议概述

每个网络接口都有一个48bit的硬件地址来标示自己,这就是我们常说的mac地址。在硬件层次上进行数据帧交换必须要有正确的接口地址,但是,tcp/ip有自己的32bit地址(我们常说的mac地址)。

我们访问某个主机一般是先通过DNS解析域名,获得对方的ip地址,但是我们不知道对方的mac地址,以太网驱动程序必须知道硬件地址(mac地址)才能发送数据。

ARP的功能就是在我们已知目的端ip地址前提下,去获得目的端mac地址。严格意义上来说,ARP为IP地址到对应的物理地址之间提供动态映射。之所以用动态是因为这个过程是自动完成的,应用程序和用户都不感知。

arp协议只使用两种数据包:ARP请求数据包和ARP响应数据包。

arp分组格式如下:
请添加图片描述
无论是arp请求数据包还是arp响应数据包,都是42字节。每个字节对应的含义如下:

  • 以太网报头中前两个字段是以太网源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上所有以太网接口都要接收广播数据帧。

  • 以太网帧类型表示后面数据的类型。对于arp请求和应答来说,该字段值固定为0x0806

  • 硬件类型字段表示硬件地址类型,值为1表示以太网地址。

  • 协议类型字段表示要映射的协议地址类型,值为0x0800表示ip地址

  • 硬件地址长度表示要mac地址长度,固定值为6 (字节),对应48bit

  • 协议地址长度表示协议地址长度,当前值为4 (字节), 对应ipv4的ip地址为32bit

  • 操作(op)字段指出四种操作类型:
    —>1 arp请求
    —>2 arp应答
    —>3 rarp请求
    —>4 rarp应答

  • 发送端的硬件地址

  • 发送端的ip地址

  • 接收端的硬件地址

  • 接收端的IP地址

ARP请求包分析

请添加图片描述首先看到ARP包Info信息那一栏写着 who has 192.168.1.8? Tell 192.168.1.1 这句活告诉我们这是一个ARP请求
我们可以在Packet Detail 中看到以太网头部信息来确认,首先看Frame这个帧里面看到目的地址是全1,
Destination: Broadcast (ff:ff:ff:ff:ff:ff). 这是个广播地址,说明当前数据包会被广播到当前网段中的所有设备上
这个上面的以太网的源地址(本机mac地址) fc:f2:9f:e9:3c:18

接下来看下arp请求的头部信息
依次是:
硬件类型值为1, 表示是以太网地址
协议类型值为0x0800, 表示是ipv4 ip协议
硬件地址的长度为6, 和第二节分组格式描述吻合
操作码值为1, 属于ARP请求
发送方的mac地址:fc:f2:9f:e9:3c:18 是本机的mac地址
发送方的ip地址:192.168.1.1
接收方的mac地址: 这个是需要应答信息返回的,当前填零
接收方的ip地址:192.168.1.5 对端主机的ip

ARP响应包分析

请添加图片描述
现在看下目的主机返回给源主机的应答消息:

硬件类型值为1, 表示是以太网地址
协议类型值为0x0800, 表示是ipv4 ip协议
硬件地址的长度为6, 和第二节分组格式描述吻合
协议的长度为4,和第二节描述吻合
操作码值为2, 属于ARP应答
发送方的mac地址:f8:59:71:10:07:98 是目的端的mac地址 // 可以看到这里不再是全1,arp的应答消息是单播
发送方的ip地址:192.168.1.5 目的端ip地址,
接收方的mac地址: fc:f2:9f:e9:3c:18 这个是源主机的mac,现在变成接收方
接收方的ip地址:192.168.1.1 源主机的ip地址

当目的端收到一份目的地址是本机的arp请求之后,它就把自己的硬件地址填进去(发送方mac),并将自身的ip填到发送方ip;
然后将请求包里面的发送方mac和ip拷贝到应答消息的接收方mac和ip。
接着将操作字段置为2。最后将数据发送回去即可。

最后

当源端拿到了目的端的mac地址之后,会更新到自己的arp高速缓存中。
实际上目的端收到源端的arp请求广播之后,也会将源的ip及其对应的mac更新到自己的高速缓存中。
这样每个主机里面通过这种方式就形成了一张ip映射mac地址的表。
后续的消息就可以不用广播,直接通过mac地址发送到对应的主机上。

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值