ARP 协议的简单描述

ARP IP TCP MAC

Posted by gomyck on January 14, 2023

原文链接: https://www.zhihu.com/question/404687077/answer/1317264252

假设拓扑为

主机A——R1——R2——主机B

主机A向主机B发送PING, 完整过程如下:

1)主机A发现目标 IP 与自己不在同一网段, 需要经过网关转发

2)查路由表获得R1的IP地址及出口(从哪个网卡发出), 查ARP表无对应条目

3)发起ARP请求, 目的IPR1, 目的MAC为广播MAC(FF:FF:FF:FF:FF:FF),源IP源MAC主机A网卡的 IP 和 MAC

4)R1 收到 ARP 请求, 将主机A的 IP 和 MAC 加入自己的ARP缓存表, 用自身IPMAC响应主机A的ARP请求.

5)主机A收到ARP响应, 将 R1 的IP和MAC加入自己的ARP缓存表, 用自身IP和MAC为源, 主机B的IP和R1的MAC为目的, 封装数据帧, 并将其转发给R1

(此时数据帧源IP为主机A, 目的IP为主机B, 源MAC为主机A, 目的MAC为R1)

6)R1收到数据帧, 根据目的IP查路由表, 发现需要R2转发, 查ARP表, 无对应条目.以自身IP和MAC为源, 目的IP为R2, 目的MAC为广播发送ARP请求, 并将来自主机A的数据帧丢弃.

7)R2收到ARP请求, 将R1的IP和MAC加入自己的ARP缓存表, 用自身IP和MAC响应主机R2的ARP请求.

8)R1收到ARP响应, 将R2的IP和MAC加入自己的ARP缓存表

9)主机A发现超时, 重发数据帧

10)R1收到数据帧, 查路由表, 须经R2转发, 查ARP表, 获得R2的MAC地址.将数据帧的源MAC修改为自身, 目的MAC修改为R2, 并将数据帧转发给R2.

(此时数据帧源IP为主机A, 目的IP为主机B, 源MAC为R1, 目的MAC为R2)

11)R2收到数据帧, 查路由表, 发现主机B与自己直连(), 查ARP表, 无对应条目.发起ARP请求, 并将来自主机A的数据包丢弃.

12)主机B收到ARP请求, 将R2加入ARP缓存, 并响应.

13)R2收到响应, 将主机B加入ARP缓存

14)主机A发现超时, 重发数据帧

(此时源IP为A, 目的IP为B, 源MAC为A, 目的MAC为R1)

15)R1收到数据帧, 查路由表 arp表, 修改源目MAC后转发给R2

(此时源IP为A, 目的IP为B, 源MAC为R1, 目的MAC为R2)

16)R2收到数据帧, 查路由表 arp表, 修改修改源目MAC后转发给主机B

(此时源IP为A, 目的IP为B, 源MAC为R2, 目的MAC为B)

17)主机B收到数据帧, 并响应主机A的PING请求, 将响应报文的源IP设为主机B, 目的IP为A, 源MAC为B, 目的MAC为R2, 并将数据帧转发给R2

(此时源IP为B, 目的IP为A, 源MAC为B, 目的MAC为R2)

18)R2收到数据帧, 查路由表 arp表, 修改修改源目MAC后转发给R1

(此时源IP为B, 目的IP为A, 源MAC为R2, 目的MAC为R1)

19)R1收到数据帧, 查路由表 arp表, 修改修改源目MAC后转发给主机A

(此时源IP为B, 目的IP为A, 源MAC为R1, 目的MAC为A)

20)主机A收到主机B的响应.

每经过一台路由器, 数据帧的源目IP不会改变, 但源目MAC都会变化, 所有设备都只知道与自己直连设备的MAC地址.

一言以蔽之:

同网段的主机 ARP 目的IP最终目标 IP, 网关在收到 ARP 请求之后, 会在同一广播域内转发, 只有目标主机才会应答该请求, 并学习请求端的 IP 和 mac

不同网段的 ARP 目的IP网关IP, 由网关负责后续的 ARP 缓存, 也就是说, 客户端只需要知道把非同网段的封包转给路由器就行了, 其他的不要管

MAC ARP ROUTE

作用 生成方式 组成 存在设备
MAC表 数据链路层转发(交换机根据数据帧的目的MAC地址查看MAC表,根据表项由相应接口转发出去) 根据数据帧的源MAC进行学习(数据帧从那个接口进来的,就把该接口以及该帧的源MAC学习记录下来) MAC地址、接口、VLAN、时间、类型等 二层交换机
ARP表 数据封装(根据目的IP地址,查ARP表获取目的MAC地址,封装目的MAC地址信息) ARP请求报文、响应报文 IP、MAC、接口 PC机、路由器
IP路由表 网络层转发(路由器根据目的IP地址,查询IP路由表找到下一跳地址,转发到下一跳路由器) 直连、静态配置、动态学习(OSPF、ISIS、BGP) 网段号、接口号、cost值、优先级、下一跳地址等 PC机、路由器