ARP(Address Resolution Protocol)地址解析协议

arp

ARP协议能实现任意网络层地址到任意物理地址的转换,此次讨论从IP地址到以太网地址(MAC地址)的转换。其工作原理是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址。此网络上的其他机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址。

ARP协议获取的并不是目的主机的真实MAC地址,只有在目的主机在同一个局域网内时才能获取其真实MAC地址,否则获取的是路由器的MAC地址。
从这里也可以得出IP地址和MAC地址缺一不可的原因。

首先,若没有IP地址,由于ARP协议是通过广播的形式来查找MAC地址的,如果在整个广域网内用广播的方式来查找,几乎等同于大海捞针。只有在结合IP地址后,才能结合相关寻址算法来找寻源主机到目的主机所经过的路由器组成的路径。同时,ARP缓存只需要记录局域网内的主机MAC地址即可,如果广域网的主机MAC地址也记下来,内存很容易就爆掉。

另一方面,IP首部会记录源IP和目的IP,但是仅靠这两个信息是不知道路径上下一跳路由器的地址的,因此会用MAC地址来记录下一跳路由器的地址。
因此,对于一个发往外网地址的网络包,以太首部+IP首部+数据(传输层、应用层),以太首部记录下一跳路由器的MAC地址,IP首部记录目的地址的IP。虽然这个数据包在物理上是发给路由器的,但是逻辑上是发给目的主机的,前者用物理地址表示,后者用网络地址表示。

先查看arp缓存表:

:arp -a
192.168.8.1 (192.168.8.1) at a4:be:2b:8b:d1:5a on en0 ifscope [ethernet]
192.168.8.45 (192.168.8.45) at 64:76:ba:a1:55:8a on en0 ifscope [ethernet]
192.168.8.89 (192.168.8.89) at e0:b5:5f:d5:a9:65 on en0 ifscope [ethernet]
192.168.8.94 (192.168.8.94) at 4c:6b:e8:d3:ca:d4 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]

tcpdump抓包:

:sudo tcpdump -v arp -c 6
tcpdump: data link type PKTAP
tcpdump: listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
23:14:54.865354 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.8.1 tell 192.168.8.96, length 28
23:15:25.890714 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.8.1 tell 192.168.8.96, length 28
23:16:20.739324 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.8.93 tell 192.168.8.1, length 28
23:16:20.739343 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.8.93 is-at c4:b3:01:94:f5:3a (oui Unknown), length 28
23:16:20.744230 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.8.93 tell 192.168.8.1, length 28
23:16:20.744246 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.8.93 is-at c4:b3:01:94:f5:3a (oui Unknown), length 28
6 packets captured
2471 packets received by filter
0 packets dropped by kernel

看到主要有两条类型,请求和回应:

23:16:20.739324 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.8.93 tell 192.168.8.1, length 28

23:16:20.739343 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.8.93 is-at

待学。。

发布了279 篇原创文章 · 获赞 13 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/105170909