一、概述
①ARP(Address Resolution Protocol)即协议解析协议,用于实现从IP地址到MAC地址的映射,即询问目标IP对应的MAC地址。
②在网络通信中,主机和主机通信的数据包需要依据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
③一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。
二、原理
同一个局域网里面,当PC1需要跟PC2进行通信时,此时PC1是如何处理的?
根据OSI数据封装顺序,发送方会自顶向下(从应用层到物理层)封装数据,然后送出去
PC ping PC2
PC1封装数据并且对外发送数据时,上图中出现了“failed”,即数据封装失败了,为什么?我们给PC1指令“ping ip2”,这就告知了目的ip,此时PC1便有了通信需要的源目IP地址,但是PC1仍然没有通信需要的目的MAC地址。这就好比我们要寄一个快递,如果在快递单上仅仅写了收件人的姓名(IP),却没有写收件人的地址(MAC),那么这个快递就没法寄出,因为信息不完整。
那么,现在PC1已经有了PC2的IP地址信息,如何获取到PC2的MAC地址呢?此时,ARP协议就派上用场了。
通过第三和第四步骤,我们看到PC1和PC2进行了一次ARP请求和回复过程,通过这个交互过程,PC1具备了PC2的MAC地址信息。接下来PC1会怎么做呢?在真正进行通信之前,PC1还会将PC2的MAC信息放入本地的【ARP缓存表】,表里面放置了IP和MAC地址的映射信息。例如IP2←→MAC2.接下来,PC1再次进行数据封装,正式进入ping通信。
小结:经过上面六个步骤的处理,PC1终于把数据包发送出去了,之后便可以进行正常的通信了。看到了吧,ARP的功能和实现过程是如此的简单:它在发送方需要目标MAC地址时及时出手,通过“一问一答”的方式获取到特定IP对应的MAC地址,然后存储到本地【ARP缓存表】,后续需要的话,就到这里查找。既然是“缓存”表,意味着它有时效性,并且如果电脑或者通信设备重启的话,这张表就会清空;也就是说,如果下次需要通信,又需要进行ARP请求。
在我们的windows/macos系统下,可以通过命令行“arp -a”查看具体信息。
“arp -d”清空ARP表项。
三、ARP原理之广播请求单播回应
实际网络中的LAN可能有几十上百的主机,那么PC1如何将这个【ARP请求包】顺利交给PC2,而PC2又如何顺利把【ARP回应包】返回给PC1?
广播包:全F,ff:ff:ff:ff:ff:ff
PC1发送的请求广播同时被其他主机收到,然后PC3和PC4收到之后(发现不是问自己)则丢弃。而PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,所以不会做丢弃动作,而是返回ARP回应包。
ARP回应包如何处理的?
ARP请求包的完整信息是:我的IP地址是IP1,MAC地址MAC1,请问谁是PC2,你的IP2对应的MAC地址是多少?
ARP请求首先有“自我介绍”,然后才是询问。PC2在收到请求之后,就可以将PC1的IP和MAC映射存储在本地的【ARP缓存表】,既然知道PC1在哪里,就可以返回ARP单播回应包。
小结:ARP协议通过“一问一答”实现交互,但是“问”和“答”都有讲究,“问”是通过广播形式实现,“答”是通过单播形式。
四、ARP协议字段解读
Hardware type:硬件类型,标识链路层协议
Protocol type:协议类型,标识网络层协议
Hardware size:硬件地址大小,标识MAC地址长度,这里是6个字节(48bit)
Protocol size:协议地址大小,标识IP地址长度,这里是4个字节(32bit)
Opcode:操作代码,标识ARP数据包类型,1表示请求,2表示回应
Sender MAC address:发送者MAC
Sender IP address:发送者IP
Target MAC address:目标MAC,此处全0表示在请求
Target IP address:目标IP
版权归原作者 Lipo饼干 所有, 如有侵权,请联系我们删除。