73.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

地址解析协议,即ARP,是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回的消息,以此确定目标物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以达到节约资源的目的。

网络拓扑

如图,我们让PC0去Ping通PC1。我们发现,当数据包路过交换机时,数据包变成了两个,同时发送给PC1和PC2。这是什么原因:

73-1.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

原因分析

我们分析一下,图中的交换机属于二层设备,也就是说,它支持MAC地址,但不能识别IP地址。而发送的Ping包,仅包含IP地址,下图为PC0去Ping通PC3时数据包内容:

73-2.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

查询效果

当数据包到交换机上时,交换机不能识别数据包中IP地址,那这个数据发给谁?事实上这个数据包就是ARP请求包,交换机会把这个数据包,分别转给连接交换机的其它设备,当数据包被接收后,终端设备会判断自身的IP是否和请求包中数据相符。如果相同,则会回复;如果不同,则会丢弃。PC0在接收到返回的请求包后,会在包里提取出PC1的MAC地址,并在本地做ARP映射,下次再发送数据时,直接附上MAC地址而不需要IP地址:

73-3.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

流程扩展

发送端在给接收端发送数据包时,会先查看本地的ARP列表。

如果列表中有接收端的MAC地址则直接调用。

如果列表中没有接收端的MAC地址,则会优先发送一个ARP请求包,询问接收端MAC地址。

请求包经交换设备转发,因为交换机为二层设备(OSI第二层)所以无法识别包含在ARP请求包中的IP地址,而ARP请求包中的目标MAC地址无效,故会将此请求包分发给除发送端外的所有设备。

其它设备收到该请求包之后,会判断该请求包是否是发给自身。

如果不是,则会直接丢弃。

如果是发给自身的,则将本身的MAC地址写入该请求包,并返回发送端。

发送端收到包含接收端MAC地址的请求包后,会将该MAC地址保存到ARP列表,以备下次通信使用。


 评论