前言
补档篇No.1。原文写于2023年8月22日左右。
公司有台超古老的Linksys 路由器,搭测试环境时一直无法成功,后面发现是无法做回程路由(静态路由),导致下接三层交换机时全网无法访问。
原因
回程路由是指数据包在到达目的地后返回源头的路径。
对于路由器到三层交换机的通信,回程路由是确保数据包能够顺利地返回源设备,从而完成双向通信。具体流程如下:
- 路由器会根据路由表来判断数据包的转发路径,并且在发送数据包之前,需要知道目的MAC地址。为了获取目的MAC地址,路由器会向局域网中的ARP广播请求(同网段内),询问哪个设备拥有该目的IP地址。配置了指向三层交换机的路由后,路由器就会将数据包发到连接三层交换机的端口,传递给三层交换机。
- 当三层交换机收到这个ARP请求时,它会识别出自己是目的设备,并通过配置的指向路由器的路由,向路由器回复自己的MAC地址。
- 一旦路由器接收到三层交换机的MAC地址,它就可以将数据包封装并通过路由表上的条目进行发送。
具体场景
延展
1.Router-Router
如果是两台主机用路由器跨网段通信(非点对点),则两个路由需要互相做路由互指的情况下即可完成跨网段通讯。

具体场景
主机A(PC1)的IP地址:192.168.1.2,子网掩码:255.255.255.0
主机B(PC2)的IP地址:192.168.2.2,子网掩码:255.255.255.0
路由器R1的接口IP地址(连接192.168.1.0/24):192.168.1.1
路由器R1的接口IP地址(连接中间子网):192.168.3.1
路由器R2的接口IP地址(连接中间子网):192.168.3.2
路由器R2的接口IP地址(连接192.168.2.0/24):192.168.2.1
具体流程
- 主机A判断目的地址
- 主机A判断目标IP地址(192.168.2.2)不在它的子网内,因此需要发送到默认网关(192.168.1.1)。
- 主机A获取默认网关的MAC地址
- 主机A发送ARP请求广播:
Who has 192.168.1.1? Tell 192.168.1.2 - 路由器R1回复:
192.168.1.1 is at AA:BB:CC:DD:EE:FF - 主机A将路由器R1的MAC地址缓存到ARP表中。
- 主机A发送ARP请求广播:
- 主机A发送数据包到路由器R1
- 数据包的目标IP地址:192.168.2.2
- 数据包的目标MAC地址:AA:BB:CC:DD:EE:FF
- 路由器R1查找路由表
- 路由器R1查找路由表,发现到192.168.2.0/24的下一跳是192.168.3.2(R2)。
- 路由器R1获取R2的MAC地址
- 路由器R1在中间子网192.168.3.0/24内发送ARP请求:
Who has 192.168.3.2? Tell 192.168.3.1 - 路由器R2回复:
192.168.3.2 is at BB:CC:DD:EE:FF:GG - 路由器R1将R2的MAC地址缓存。
- 路由器R1在中间子网192.168.3.0/24内发送ARP请求:
- 路由器R1转发数据包到路由器R2
- 数据包的目标IP地址:192.168.2.2
- 数据包的目标MAC地址:BB:CC:DD:EE:FF:GG
- 路由器R2查找路由表
- 路由器R2查找路由表,发现192.168.2.0/24是直接连接的网络。
- 路由器R2获取主机B的MAC地址
- 路由器R2在192.168.2.0/24子网内发送ARP请求:
Who has 192.168.2.2? Tell 192.168.2.1 - 主机B回复:
192.168.2.2 is at CC:DD:EE:FF:GG:HH - 路由器R2将主机B的MAC地址缓存。
- 路由器R2在192.168.2.0/24子网内发送ARP请求:
- 路由器R2转发数据包到主机B
- 数据包的目标IP地址:192.168.2.2
- 数据包的目标MAC地址:CC:DD:EE:FF:GG:HH
小结
- ARP请求和回复 在不同子网内分别进行:主机A与R1之间、R1与R2之间、R2与主机B之间。
- 路由表 在路由器R1和R2中用于决定数据包的下一跳。
- 数据包 在不同的网络段中会有不同的目标MAC地址,但目标IP地址保持不变。
也就是说,通过逐步解析和转发,数据包最终从主机A到达了主机B,主机AB成功完成了通讯流程。
2. Router to Router 点对点
而如果是两台路由跨网段通信(点对点),则需要互相做路由互指的情况下,同时在端口处绑定对方的MAC地址,才能够互相通讯。
以下是ARP协议的包结构,如下图1。

以下是IP协议数据包结构,如下图2。





Comments | NOTHING