地址解析协议(ARP)
ARP(Address Resolution Protocol)地址解析协议:
根据已知的IP地址解析获得其对应的MAC地址
ARP工作流程
1.HOST1 ARP缓存
HOST1通信之前需要封装数据包,其中在封装二层数据链路层时,终端查询自己的ARP缓存表,ARP缓存表维护一个IP和MAC地址的对应关系,根据对端IP地址再查询ARP缓存表可知道对方的MAC地址,然后直接封装就好了,默认ARP缓存表是没有对应关系的(ARP的默认老化时间为180秒,就是原本的ARP记录如果180秒没有被使用,那么此对应关系会被删除)
2.HOST1 ARP请求
终端1发生ARP请求来获取IP和MAC地址的对应关系并存到自己的ARP表中,由于不知道对方的MAC地址因此在封装ARP请求的Ether_II目的MAC为ff:ff:ff:ff:ff:ff(广播地址),在ARP报文中由于不知道对端的MAC地址因此设置目的MAC为00:00:00:00:00:00
3.HOST2 ARP缓存写入
HOST1发送的ARP请求为广播,在同一广播域的主机都会收到,HOST2在收到ARP请求报文后,对比ARP报文中的目的IP,发现和本机的IP匹配,讲ARP请求报文中的源IP和源MAC的对应关系写入到自己的ARP缓存表中
4.HOST2 发送ARP响应
HOST2需要对ARP请求进行回复,由于上一步中已经从ARP请求将HOST1的IP和MAC地址的对应关系写入到了ARP缓存中,在封装ARP回复时目的MAC就可以封装进去了,不用以广播的形式,而是单播,ARP Replay的封装和ARP请求一样,只是ARP类型该成了ARP Replay,在ARP Replay报文中封装了源目IP和MAC地址
5.HOST1写入ARP缓存表
HOST1收到ARP Replay后将ARP报文中的源IP和源MAC记录进ARP缓存表中,之后HOST1和HOST2通信就不需要考虑二层封装目的MAC未知问题
免费ARP报文
在终端获取到了自己的IP地址后,会发送一个免费的ARP报文,免费ARP是一个ARP请求报文,封装ARP时源目IP和源MAC都是自己,Ether_II的源MAC是自己,目的MAC是广播地址,如果有人回ARP Replay,代表此IP已经和其他MAC地址绑定了,免费ARP报文的作用是查询自己的IP是否和其他终端冲突了
抓包
在GE0/0/0上抓
AR1
sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sys AR1
[AR1]inte gi 0/0/0
[AR1-GigabitEthernet0/0/0]ip addr 192.168.1.1 255.255.255.0
Aug 27 2023 22:47:03-08:00 AR1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP
on the interface GigabitEthernet0/0/0 has entered the UP state.
AR2
sys
Enter system view, return user view with Ctrl+Z.
[Huawei]sys AR2
[AR2]inte gi 0/0/0
[AR2-GigabitEthernet0/0/0]ip addr 192.168.1.2 255.255.255.0
Aug 27 2023 22:48:50-08:00 AR2 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol IP
on the interface GigabitEthernet0/0/0 has entered the UP state.
AR1 ping AR2
[AR1]ping 192.168.1.2
PING 192.168.1.2: 56 data bytes, press CTRL_C to break
Reply from 192.168.1.2: bytes=56 Sequence=1 ttl=255 time=90 ms
Reply from 192.168.1.2: bytes=56 Sequence=2 ttl=255 time=20 ms
Reply from 192.168.1.2: bytes=56 Sequence=3 ttl=255 time=20 ms
— 192.168.1.2 ping statistics —
3 packet(s) transmitted
3 packet(s) received
0.00% packet loss
round-trip min/avg/max = 20/43/90 ms