---
date: 2024-12-04 11:58
updated: 2024-12-04 11:59
share: "true"
link: "false"
---

## PC A ping PC B (同一台三层交换机，不在一个网段)

### PC A ：MAC A、IP 1.1.1.2、GW 1.1.1.1

### L3-SW：MAC S

### PC B：MAC B、IP 2.1.1.2、GW 2.1.1.1

1. PC A 首先查找目的IP2.1.1.2，发现与自己**不在一个网段**，因此**向网关**1.1.1.1发送对应的MAC的ARP请求；

2. L3-SW收到PC A的ARP请求后，检查请求报文，发现被请求IP是自己的三层接口IP，向PC A发送ARP应答。L3-SW在接收ARP请求的时候，**首先学习到PC A的源MAC+VID对应的端口**，同时把**PC A的IP和对应的MAC记录到自己的ARP表中**，并生成一条**直连主机路由**；

3. PC A得到网关（L3）的ARP应答后，获取了网关的MAC地址，发送ICMP报文。报文的源MAC地址是自己的MAC地址MAC A，目的MAC地址是网关的MAC地址 MAC S；源IP是自己的IP1.1.1.2，目的IP是PC B的IP2.1.1.2；

4. L3-SW接受到PC A发送的ICMP报文，首先根据源MAC+VID**更新MAC地址表**，同时检查目的MAC地址，发现是自己的MAC，进行三层路由查找；

   交换机芯片根据报文的目的IP去查找其三层表项，匹配中**直接网络路由**，行为是将报文送到CPU去进行软件处理；

   CPU根据报文的目的IP去查找其软件路由表，发现匹配了一个直连网段（PC B对应的网段），于是继续查找其软件ARP表，仍然查找失败。然后L3-SW会在目的网段对应的VLAN的所有端口发送请求地址2.1.1.2对应MAC的ARP请求；

5. PC B收到L3-SW的ARP请求，检查请求报文，发现请求IP是自己的IP，向L3-SW发送ARP应答。同时**学习了L3-SW的MAC和对应的IP，记录到自己的ARP表中**；

6. L3-SW接收到PC B的ARP应答。首先学习到PC B的MAC+VID对应的端口，记录到自己的FDB表中；

   由于目的MAC是本机，送CPU处理。CPU将其IP与MAC对应的关系记录到自己的ARP表项中；

   并将PC A的ICMP报文发送给PC B，报文中的目的MAC改成PC B的MAC B，源MAC修改为自己的MAC MAC S。同时，在交换芯片的三层表项中根据刚刚得到的三层转发信息添加表项（内容包括IP、MAC、出口VLAN、出端口），这样后续的PC A发往PC B的报文就可以通过改硬件三层表项直接转发走；

7. PC B收到L3-SW转发过来的ICMP请求后，回应ICMP应答给PC A。目的IP地址1.1.1.2，源IP地址2.1.1.2。由于L3-SW之前已经得到PC A和MAC 的对应关系了，同时也在交换芯片中添加了相关三层表项，因此这个报文直接由交换芯片硬件交给PC A；

## PC A ping PC B (不同的三层交换机，不在一个网段)

### PC A ：MAC A、IP 1.1.1.2、GW 1.1.1.1

### L3-SW1：MAC S1

### L3-SW2：MAC S2

### PC B：MAC B、IP 2.1.1.2、GW 2.1.1.1

为了描述简洁，我们假设L3_SW1上配置了静态路由：ip route 2.1.1.0 255.255.255.0 3.1.1.2；L3_SW2上配置了静态路由：ip route 1.1.1.0 255.255.255.0 3.1.1.1。**配置静态路由后，系统会自动打通下一跳。**

1. PC A首先检查出目的IP地址2.1.1.2（PC B）与自己不在同一网段，因此它通过ARP解析得到网关地址1.1.1.1对应的MAC（MAC S1）。然后，PC A组装ICMP请求报文并发送，报文的目的MAC＝MAC S1、源MAC＝MAC A、源IP＝1.1.1.2、目的IP＝2.1.1.2；

2. L3_SW1收到报文后，首先根据报文的源MAC+VID更新MAC地址表。然后，发现目的MAC为本机，触发三层路由查找，于是继续查找芯片的三层转发表；

3. 由于已经配置完静态路由，因此查三层表项能够查找到2.1.1.0 /24 -> 3.1.1.2, 转发给L3_SW2

4. L3_SW2收到报文后，与组网1中的处理类似，经过查三层转发表（命中直连网络路由）=>送CPU=>ARP请求和ARP应答解析（具体过程同同网络的过程）=>转发报文同时添加硬件表项的过程，将报文转发给PC B，此时报文的目的MAC修改为PC B的MAC（MAC B），源MAC修改为L3_SW2的MAC（MAC S2）。这样后续发往2.1.1.2的报文就直接由交换芯片硬件转发了；

5. PC B收到来自PC A的ICMP请求报文后进行ICMP应答。由于在ICMP请求报文转发的过程  中，每个网段的两端节点都已经通过ARP解析得到了对方的IP和MAC对应关系，因此应答报文的转发完全由交换芯片完成（查三层转发表=>发送）；

6. 这样，后续的往返报文都经过查三层转发表的过程由交换芯片直接进行硬件转发了。
