tcp/ip学习之3: ARP协议之ARP公告
在做项目中测试发现,当我们设备每次启动时,使用wireshare工具进行抓包,可以看到如下报文:
从报文协议上容易发现是个ARP数据包,而且后面还显示ARP Announcement for 192.168.1.2。接下来我们就谈谈ARP协议。
1. ARP协议是什么
ARP(Address Resolution Protocol,地址解析协议)是网络层协议(第三层),用于将网络层的IP地址解析为链路层的MAC地址。它是网络通信中非常重要的一个协议,确保了数据包能够在局域网(LAN)中正确地从源设备传输到目标设备。
ARP 的主要功能
IP 地址到 MAC 地址的解析:
在以太网等局域网中,设备之间通过 MAC 地址进行通信。当设备需要发送数据包到另一个设备时,它需要知道目标设备的 MAC 地址。
如果设备只知道目标设备的 IP 地址,而不知道其 MAC 地址,它会使用 ARP 协议来查询目标设备的 MAC 地址。
动态解析:
ARP 是动态的,这意味着设备不需要预先知道目标设备的 MAC 地址。它可以通过发送 ARP 请求来获取目标设备的 MAC 地址。
ARP 请求是一个广播消息,发送到整个局域网中的所有设备。目标设备会响应一个 ARP 响应,告知其 MAC 地址。
缓存机制:
为了提高效率,设备会将解析到的 IP 地址和 MAC 地址的映射关系存储在本地的 ARP 缓存表中。
当设备再次需要与同一目标设备通信时,它可以直接从 ARP 缓存表中获取 MAC 地址,而无需再次发送 ARP 请求。
说了这么多,其实我只需要记住: ARP的主要功能是将IP地址解析为链路层的MAC地址。 那ARP公告又是什么东东呢?
2. ARP公告(ARP Announcement)
1. ARP公告
ARP公告是一种特殊的ARP消息,用于向网络中的其他设备宣告某个IP地址与特定MAC地址的映射关系。它通常包含以下内容:
发送方IP地址:这是设备正在宣告的IP地址(例如192.168.1.2)。
发送方MAC地址:这是设备的物理地址(MAC地址)。
目的IP地址:通常与发送方IP地址相同(即192.168.1.2)。
目的MAC地址:通常是广播地址(FF:FF:FF:FF:FF:FF),表示消息是广播给网络中的所有设备的。
2. ARP公告的常见场景
ARP公告通常出现在以下几种场景中:
(1)设备启动时
当设备(如计算机、路由器等)启动时,它会发送一个ARP公告,以告知网络中的其他设备它的IP地址和MAC地址。这有助于更新其他设备的ARP缓存,确保网络通信的准确性。
(2)IP地址冲突检测
设备可能会发送ARP公告来检测网络中是否存在其他设备使用相同的IP地址。如果设备收到一个ARP公告,而该公告中的IP地址与自己的IP地址相同,但MAC地址不同,这表明存在IP地址冲突。设备通常会记录冲突信息,并可能尝试重新分配IP地址。
(3)动态IP地址分配
当设备通过DHCP(动态主机配置协议)获得一个新的IP地址时,它会发送一个ARP公告,以确保网络中的其他设备知道新的IP地址与MAC地址的映射关系。
(4)网络拓扑变化
当网络中的设备(如路由器、交换机等)重新启动或配置发生变化时,设备可能会发送ARP公告,以更新网络中的ARP缓存。
3. ARP公告的作用
ARP公告的主要作用是:
更新ARP缓存:确保网络中的其他设备的ARP缓存中包含最新的IP地址与MAC地址的映射关系。
检测IP地址冲突:帮助设备检测是否存在其他设备使用相同的IP地址,从而避免通信冲突。
优化网络通信:通过主动更新ARP缓存,减少因ARP缓存过期或错误而导致的通信问题。
终于搞清楚了。抓包工具wireshare抓取这个包是这个意思:设备启动时,设备在向网络中报到,宣告自己的IP和MAC地址,即表示设在向网络中的其他设备宣告其IP地址和MAC地址的映射关系。这种行为是完全正常的,是ARP协议设计的一部分,用于确保网络中的IP地址分配是唯一的,并且设备的网络配置是正确的。这种行为也称为“Gratuitous ARP”(免费ARP)。
个人理解: ARP公告和正常的ARP请求/响应是有点差异的(可以这样认为,ARP公告就是设备给自己发送ARP请求,而设备自己早就知道自己的IP和MAC了,所以就没必要做响应了。这是种非常特别的ARP请求/响应。 当然,如果网络出现IP冲突等情况另论了)。