一份学霸级的ARP学习笔记!引起众多网工纷纷收藏!( 二 )


ARP协议的核心就是对缓存表的操作,发送数据包的时候,查找ARP缓存表以得到对应的MAC地址,在ARP缓存表中的TTL即将过期的时候更新缓存表以保证ARP表项有效,此外ARP协议还需要不断处理来自局域网中其他主机的ARP请求 。
如果两台电脑不在一个网段,电脑查询自己的路由表,知道如果想和博客主机通信则必须通过网关(gateway)来中转,所以会在与网关直连的网卡上请求网关的MAC地址,因为电脑要把发给PC2主机的数据先发给网关,当合法以太帧到达网关并且顺利接收,网关会将数据递交给IP层,IP层查询路由表,找到与博客主机直连的接口 (假设是直连的,实际上肯定不是直连的),网关会发一个ARP请求到博客主机上,请求它的MAC地址,网关收到应答后将建立新的ARP表项并将开始维护ARP缓存表,然后完成最终的通信 。
APR缓存表有一定的时限性,因为ARP是动态处理的,ARP表项的生存时间是一般为5-10分钟(LwIP中默认是5分钟),而ARP请求的等待时间是5秒钟,当这些时间到达后,就会更新ARP表项,如果在物理链路层无法连通则会删除表项, 另外电脑重启的话ARP缓存表会被清空。因此每个协议栈的实现都必须维护着一个定时器(超时机制)来管理ARP缓存表,在必要的时候更新及删除ARP表项,关于怎么处理的就不多追究,有兴趣的可以看LwIP的etharp_tmr源码 。
ARP报文
ARP报文格式如下:
当ARP报文封装在以太网帧中,格式:
在ARP首部一开始的 2个字节 存储的是硬件类型,表示要知道目标网卡的硬件类型,其中,值为 1 表示以太网地址;接下来还有 2字节 的协议类型,其中,0x0800 表示IP协议,其他还可能是 ICMP/IGMP协议 等;接下来有 1个字节 表示硬件地址长度,指出该报文中硬件地址的长度,对于以太网硬件类型,它的值为6;还有 1字节 的协议地址长度,如果是ARP协议、IP协议等,该值为4;ARP首部最后的op字段用于记录ARP操作的类型,分别是:

  • ARP请求,其值为1 。
  • ARP应答,其值为2 。
  • RARP请求,其值为3 。
  • RARP应答,其值为4 。
ARP协议总结
  • ARP(Address Resolution Protocol)即地址解析协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址 。
  • 在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出 。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装 。
  • 一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装 。
来源:https://www.cnblogs.com/Courage129/p/14322842.html




推荐阅读