ARP协议

发布于 2021-09-13  45 次阅读


ARP协议简介

ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址

在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。

一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。

回顾一下,我们在传输层通过tcp发送一个包,tcp协议头指定了目的ip和端口;到了网络层,上层数据被封装成IP报文,其中指定了目的IP。而数据链路层中,数据的发送需要知道实际的物理地址,以建立起物理连接,即需要目的MAC地址。上层协议不关心,而数据链路层又需要。所以ARP协议就诞生了。

ARP协议的工作流程

ARP协议实质上就是进行一个IP地址到MAC地址的转换。

首先发送方把自己的MAC地址,自己的IP地址放入ARP报文中。并将目的IP也放入报文。通过MAC广播地址或组播地址广播这条报文。就是拿着大喇叭在群里问:xxIP的主机的MAC地址是多少告诉我一下。

也就是广播/组播域里头的所有终端都能接收到这条消息,接收之后检查包内的目的IP,如果和自己的IP一致,那么就说明这条ARP报文的目标是自己。而不一致的时候就丢弃这个报文,认为报文与自己无关。因为ARP报文中包含了源地址和源MAC,所以可以直接通过MAC地址单播回去,带上自己的MAC地址。这就是在群里看到有人问自己,看到消息之后小窗私戳。

ARP协议所属层级

ARP基于Ethernet协议,与IP协议相同,所以按照数据分包来说,应该属于网络层。但实际上ARP协议的作用是获取MAC地址,为数据链路层服务的。

当出现多个网络(广播域)的时候

数据报发送的时候在数据链路层通过识别MAC地址进行发送,但广播域之间相互隔离,我不能直接通过ARP获取到目的的MAC地址,即使获取到了地址,数据报也传不过去。

这时候就是路由器登场的时候了,路由器内部维护一个路由表,根据不同的ip,识别数据报的源网络和目的网络,并把MAC地址进行重设,将数据包正确转发。

所以这个时候,源主机要做的,就是把数据包发送给路由器,交给他进行转发就行了。但发送方怎么知道要把数据包发给路由器呢?

这时候,网络设置中的网关参数就起作用了,当发送方发现目的ip和自己不是一个网段的时候,就发送ARP报文查询网关MAC,之后把数据包直接发给网关(目的ip不变,只是mac地址变成网关了)网关会通过目的IP进行转发。

还有一种情况就是主机没有配置网关。这个时候就需要代理ARP,可以看作是一种善意的ARP欺骗。即发送方直接查询目的主机的MAC,但很显然不在一个广播域,没有人会回应。但是路由器就不一样了,它知道目的主机的MAC,它想让源主机把数据包发给它,再由它转发。所以这时候路由器就会伪装成目的主机,发送ARP响应报文。


当其他人都认为你要鸽的时候,你鸽了,亦是一种不鸽