做题时,发现一个问题,现在终于明白怎么回事了。

题目:ARP协议的作用是(1),ARP报文封装在(2)中传送。

(1)自然是由IP地址查找对应的MAC地址。

(2)我原先写的是,IP数据包,我当时的理解是ARP在tcp/ip的互联网层,也就是对应OSI的网络层,网络层的设备是路由器,是基于IP地址转发数据包的,ARP应该是封装在IP数据包里的。但正确答案是以太帧,也就是发生在数据链路层的。

有点不太明白。今天抓了个包发现确实在数据链路层进行的,在网上也找到了一篇文章,证实了答案是正确的。


问题:ARP报文到底属于哪一层协议?或者说它工作在那一层?

分析:ARP的运行原理   A计算机要访问B计算机

A首先需要知道B的MAC

A会根据IP和子网掩码先判断B是否和自己处在同一网段。

在同一网段:

并且A的ARP缓存里没有B的MAC,A就会直接发送一个ARP广播包,同网段的计算机都会收到,A就问谁是B,你的MAC地址是多少请告诉我,B收到广播后返回自己MAC告诉A,A更新缓存,以后就都用这个MAC地址封装和B通信。


不同网段:

A也会发送一个ARP广播包,不过它是问网关(路由器的接口地址),路由器返回自己的MAC告诉A,然后在走下一跳,直到路由器的目标MAC地址正好是B的MAC,A就可以和B通信了。


这个过程没有问题,但是仔细想想ARP发广播报,既然是广播,那么就是不用经过路由,因为路由器是隔绝广播的,不能隔绝广播的是交换机,交换机是基于MAC地址转发数据包的,是第二层设备。所以ARP的报文也就应该是在数据链路层进行的,抓包后就更直观了。

\


这是一个完整的ARP报文,它被封装在数据链路层里面,它发送一个广播地址FFFFFFFFFFFF,发送者的MAC地址000C2994CC2E,广播之后将收到的MAC地址写入缓存并封装至数据帧,整个过程都是在数据链路层进行的。那么它属于数据链路层实至名归。