ARP协议模块缓存所有接收的IP地址到一个内部缓冲器,它存储着IP地址和以太网地址(MAC)。
当应用程序启动时,ARP 缓存缓冲器通常是空的。ARP模块还不知道来自于应用程序的第一个UDP数据包的目标MAC地址。它发送
ARP 请求给网络。直到目标
MAC 地址被解析,第一个及随后的来自用户应用程序的
UDP 数据包将会丢失。这是因为 UDP
没有缓存输出的包。
在第一个UDP数据包发送给网络之前,ARP 请求必须发送给网络并且目标IP地址的MAC 地址必须被解析。如果从目标IP没有接收到包,这是唯一的请求。每一个接收 IP 或 ARP包也都被 ARP模块处理,并且 IP 和 MAC 地址在内部隐藏缓存。
所有隐藏缓存的
IP 地址都被默认为临时IP缓冲的入口。超时以后,设置在
配置 中的这些存储会自动从缓冲器中删除。可以使用函数
arp_cache_ip()
强制产生一个 ARP
请求。也可通过该函数改变缓冲器的入口属性为一个固定IP而不是临时IP地址。
固定的 IP
入口在超时后会
被ARP模块自动更新。当超时时,ARP模块再一次发送请求给目标再次确认目标是否仍在活动,可以接收包。
一旦函数
arp_cache_ip() 返回值 __TRUE,远程 IP 地址被解析并隐藏在ARP缓冲器中。如果缓冲入口属性设置为
ARP_FIXED_IP,当超时结束时没有必要关心IP地址的解析。ARP模块会自动处理。