浅谈三层网络中ping报文的转发流程

2022-09-10

以太网是当今应用最普遍的局域网技术, 因其成本低、兼容性好、使用简单、速度高、软硬件资源丰富而倍受市场的关注。本文介绍了以太网的三层网络中ping数据报文的详细转发流程, 以此流程为例, 可以清晰和详细地了解三层网络中数据报文的转发流程。

一、三层网络的组网拓扑

根据上图进行交换机的配置, 将交换机SW1的port1和port2的Pvid分别设为vlan10和vlan30, 并为其设置相应的IP地址;将交换机SW2的port1和port2的Pvid分别设为vlan20和vlan30, SW1的port2和SW2的port2互联, 并设置相应的IP地址。将PCA和PCB的默认网关分别设置为与交换机连接端口的IP;在SW1中添加子网路由:ip route 20.20.20.0255.255.255.0 30.30.30.2;在SW2中添加子网路由:ip route10.10.10.0 255.255.255.0 30.30.30.1。

二、Ping报文转发详解

从PCA进行ping 20.20.20.2的操作, 报文具体的转发流程如下:

(1) 首先PCA查询自己的ARP表, 发现没有20.20.20.2的信息, 然后PCA判断目的IP是否和自己处在同一网段中, 通过确认IP和子网掩码发现不在同一网段中。

(2) PCA对交换机SW1进行ARP请求 (对默认网关进行MAC地址查找) , 想得到SW1的MAC地址。该ARP请求报文格式为:

SW1的port1收到该ARP包后, 首先进行源MAC地址的学习, 在交换机SW1的MAC表中加入“MAC地址 (MAC_A) valn号 (10) 端口号 (port1) ”, 然后在vlan10内部进行广播, 因为在配置Port1的vlan时是配置的interface属性, 属于3层vlan, 所以CPU也被包含在vlan10中。当CPU接收到该ARP请求后, 首先进行ARP学习, 在SW1的ARP表中添加“IP地址 (10.10.10.2) MAC地址 (MAC_A) vlan号 (10) 端口号 (port1) ”, 然后发现是找自己的MAC地址, 因此给PCA返回一个ARP应答, 应答报文格式为:

PCA收到该ARP应答后在主机ARP表中进行ARP表的添加“IP地址 (10.10.10.1) MAC地址 (MAC_SW1) ”。

(3) 然后PCA发送ICMP包, 报文格式为:

SW1接收到该报文后首先进行源MAC地址的老化时间更新, 然后查询目的MAC, 发现目的MAC就是交换机本身, 因此对L3置位, 进行3层转发。

(4) 三层转发时, 首先查找主机路由, 发现没有20.20.20.2这一IP地址, 主机路由查找失败;然后进行子网路由查找, 因为上面一开始添加过20.20.20.0的子网路由, 因此子网路由查找成功, 返回的next_hop_index为30.30.30.2的next_hop_index, 然后通过ING_L3_NEXT_HOP、EGR_L3_NEXT_HOP和EGR_L3_INTF将ICMP报的二层头进行替换“目的MAC (MAC_SW2) 源MAC (MAC_SW1) ”然后将报文发送至SW2的port2。

(5) SW2的port2接收到该ICMP报文后, 首先对源MAC地址进行老化时间更新, 然后查询目的MAC发现是自己的MAC后, 转三层。首先进行主机路由的查询, 查询失败;然后进行子网路由的查询, 因为在配置SW2的port1时就已经配置了相应的子网路由, 因此可以查询到20.20.20.0, 子网路由查找成功, 得到一个next_hop_index, 下一跳的PORT为0, 因此上SW2的CPU处理, 此时也要对ICMP报的二层头进行替换“目的MAC (MAC_SW2) 源MAC (MAC_SW2) ”。

(6) CPU收到报文后进行处理, CPU发送ARP请求报文请求20.20.20.2的MAC地址, ARP报文的格式为:

SW2在vlan20内广播, 通过SW2的port1发送给PCB, PCB接收到该ARP请求后首先在主机ARP里添加“IP地址 (30.30.30.2) MAC地址 (MAC_SW2) ”, 然后发现请求自己的MAC, 就回复一个ARP应答包, 格式为:

在SW2的Port1处进行源MAC地址的学习, 在MAC表中加入“MAC地址 (MAC_B) valn号 (20) 端口号 (Port1) ”。CPU在接收到该应答报文后, 在SW2的ARP表添加“IP地址 (20.20.20.2) MAC地址 (MAC_B) vlan号 (20) 端口号 (Port1) ”。此次的ICMP包发送结束。

(7) PCA重新发送一个ICMP包到 (5) 处, 因为SW2的ARP表中已经添加20.20.20.2的主机路由, 因此第二个ICMP包将自己的二层头进行替换, “目的MAC (MAC_B) 源MAC (MAC_SW2) ”, 然后直接从SW2的port1口发送给PCB。

(8) PCB收到该ICMP报文, 发现是ping自己的, 因此需要回复一个ICMP应答包, 因为此时PCB的ARP表里没有网关 (20.20.20.1) 的MAC地址, PCB对交换机SW2进行ARP请求 (对默认网关进行MAC地址查找) 。该ARP请求报文格式为:

Port1收到该ARP包后, 首先进行源MAC地址的更新, 然后在vlan20内部进行广播, SW2的CPU接收到该ARP请求后, 发现是找自己的MAC地址, 因此给PCB返回一个ARP应答, 应答报文格式为:

PCB收到该ARP应答后在主机ARP表中进行ARP表的添加“IP地址 (20.20.20.1) MAC地址 (MAC_SW2) ”。

(9) PCB发送ICMP应答包的格式为:

SW2的port1接收到该ICMP应答报文后, 因为目的MAC为自己, 所以上三层, 查询主记路由是否有10.10.10.2, 查询失败后, 查询子网路由, 发现10.10.10.0的下一跳为30.30.30.1, 返回的next_hop_index为30.30.30.1的next_hop_index, 然后通过ING_L3_NEXT_HOP、EGR_L3_NEXT_HOP和EGR_L3_INTF将ICMP报的二层头进行替换“目的MAC (MAC_SW1) 源MAC (MAC_SW2) ”然后将报文发送至SW2的port2。

(10) SW1的port2接收到这个ICMP报文, 首先进行源MAC的更新, 然后发现目的MAC为自己, L3置位, 上三层, 进行主机路由查找10.10.10.2, 可以找到该主机路由, 将ICMP应答包的二层头进行替换“目的MAC (MAC_A) 源MAC (MAC_SW1) ”然后直接从port1发送给PCA。这时第一次ping通。

(11) 接下来再发送ICMP报文时, 首先PCA处的报文格式为:“目的MAC (MAC_SW1) 源MAC (MAC_A) 帧类型 (0x0800) 源IP地址 (10.10.10.2) 目的IP地址 (20.20.20.2) ”, 传送到SW1后, 上三层, 查询主机路由, 没有20.20.20.2, 然后查询子网路由, 查到20.20.20.0, 替换二层头“目的MAC (MAC_SW2) 源MAC (MAC_SW1) ”然后将报文发送至SW2的port2。

(12) SW2的port2接收到该ICMP包后, 上三层, 查询主记路由, 可以查到20.20.20.2, 直接转发给PCB, 然后PCB返回一个ICMP应答包, 之后重复

(9) - (12) 的过程。

三、总结

本文重点讨论了以太网的三层转发原理, 其中以三层交换机设备中ping报文的转发流程为例, 将三层网络的转发原理进行了详细的描述。需要特别指出的是, 在研究报文转发流程时要注意数据报文在三层网络的转发过程中报文头部MAC地址变化。

上一篇:让学生做数学学习的主人下一篇:小组合作学习在数学教学中的应用