ARP协议 ####### :: ARP: Address Resolution Protocol(地址解析协议) 根据 IP 地址查询相应的以太网 MAC 地址 :: 1. 以太网的协议中, 每一个数据包都有一个MAC地址 2. 每一块以太网卡都有一个MAC地址 IP包是如何知道这个MAC地址的?这就是ARP协议的工作 .. figure:: https://img.zhaoweiguo.com/knowledge/images/protocols/arp1.png ARP协议回答报文的数据格式 ARP(地址解析)协议是:: 一种解析协议, 本来主机是完全不知道这个IP对应的是哪个主机的哪个接口, 当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(一个IP-MAC地址对应表缓存) 如果查询的IP-MAC值对不存在,主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址 而直接收到这份广播的包的所有主机都会查询自己的IP地址 如果收到广播包的某主机发现自己符合条件,就准备好一包含自己的MAC地址的ARP包传送给发送ARP广播的主机 而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方) 发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作 ARP 缓存:: $ arp -a ? (10.112.97.33) at f8:a2:d6:eb:82:31 on en0 ifscope [ethernet] ? (10.112.127.254) at 0:0:5e:0:1:3 on en0 ifscope [ethernet] ? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet] ? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet] 注:MAC地址长度为48比特(6字节)有下面2种写法: a. 00-80-C8-2D-82-EA b. f8:a2:d6:eb:82:31 注: IP 地址发生变化时,ARP 缓存的内容就会和现实发生差异。为了防止这种问题的发生: ARP 缓存中的值在经过一段时间后会被删除,一般这个时间在几分钟左右 这个删除的操作非常简单粗暴,不管 ARP 缓存中的内容是否有效,只要经过几分钟就全部删掉 注: 但 IP 地址刚刚发生改变的时候,ARP 缓存中依然会保留老的地址,这时就会发生通信的异常 遇到这种情况,可以查看 ARP 缓存的内容,并手动删除过时的条目