windwos route print 路由表结构与匹配规则

186 阅读3分钟

racert 某个ip地址,windows根据 这个ip地址,和本机配置的路由表进行逐个匹配,匹配到了之后,在发数据包,这个过程,请给详细举例分析

在Windows上使用`tracert`命令时,系统会根据目标IP地址和本地路由表进行逐条匹配,选择最佳路由发送数据包。以下是详细过程及示例分析:

---

### **1. 路由表结构与匹配规则**

Windows路由表包含以下关键字段:

- **目标网络(Network Destination)**:目标IP地址或网络。

- **子网掩码(Netmask)**:定义目标网络的范围。

- **网关(Gateway)**:数据包转发的下一跳地址(若为本地接口则显示`On-link`)。

- **接口(Interface)**:发送数据包的网络接口。

- **跃点数(Metric)**:路由优先级(值越小优先级越高)。

**匹配规则**:

1. **最长前缀匹配**:选择子网掩码最长的路由条目。

2. **跃点数比较**:若多条路由前缀长度相同,选择跃点数最小的。

3. **默认路由**:若无匹配项,使用默认路由(`0.0.0.0/0`)。

---

### **2. 示例分析**

假设本机IP为 `192.168.1.100`,子网掩码 `255.255.255.0`,默认网关 `192.168.1.1`,路由表如下:

| 目标网络 | 子网掩码 | 网关 | 接口 | 跃点数 |

|---------------|----------------|--------------|---------------|--------|

| 0.0.0.0 | 0.0.0.0 | 192.168.1.1 | 192.168.1.100 | 10 |

| 192.168.1.0 | 255.255.255.0 | On-link | 192.168.1.100 | 25 |

| 10.1.0.0 | 255.255.0.0 | 192.168.1.2 | 192.168.1.100 | 15 |

| 10.1.2.0 | 255.255.255.0 | 192.168.1.3 | 192.168.1.100 | 20 |

---

#### **场景1:Tracert目标IP `10.1.2.3`**

1. **逐条匹配路由表**:

- **默认路由 `0.0.0.0/0`**:匹配所有IP,但优先级最低。

- **`192.168.1.0/24`**:仅匹配本地子网,不适用。

- **`10.1.0.0/16`**:目标IP `10.1.2.3` 属于该网络,掩码长度16。

- **`10.1.2.0/24`**:目标IP `10.1.2.3` 属于该网络,掩码长度24(更长)。

2. **选择最佳路由**:

- 选择 `10.1.2.0/24`(最长前缀),网关为 `192.168.1.3`。

- 若此路由不可用,则选择 `10.1.0.0/16`(网关 `192.168.1.2`)。

- 若两者均不存在,则使用默认网关 `192.168.1.1`。

3. **发送数据包**:

- 数据包通过接口 `192.168.1.100` 发送到网关 `192.168.1.3`。

- 后续跃点由中间路由器根据各自路由表处理。

---

#### **场景2:Tracert目标IP `192.168.1.200`**

1. **逐条匹配路由表**:

- **`192.168.1.0/24`**:目标IP属于本地子网,直接匹配。

2. **选择最佳路由**:

- 使用本地接口 `192.168.1.100`(网关为 `On-link`)。

- 数据包直接通过ARP获取目标MAC地址并发送,无需网关。

---

#### **场景3:Tracert目标IP `8.8.8.8`(公网IP)**

1. **逐条匹配路由表**:

- 无匹配的静态路由,选择默认路由 `0.0.0.0/0`。

2. **发送数据包**:

- 数据包通过接口 `192.168.1.100` 发送到默认网关 `192.168.1.1`。

- 后续路径由ISP和互联网路由器处理。

---

### **3. Tracert工作流程**

1. **TTL=1的探测包**:

- 根据路由表发送到第一个网关(如 `192.168.1.3`)。

- 第一个路由器将TTL减至0,返回ICMP超时消息,源主机记录第一跳。

2. **TTL=2的探测包**:

- 同一目标IP的路由选择不变,仍发送到 `192.168.1.3`。

- 数据包到达第一个网关后,TTL减为1,转发到下一跳。

- 下一跳路由器将TTL减至0,返回超时消息,记录第二跳。

3. **重复直至到达目标**:

- 每次TTL递增,路径由中间路由器逐跳决定,但源主机的初始路由选择固定。

---

### **4. 关键总结**

- **路由决策仅在源主机进行**:所有探测包的路由选择由目标IP和本地路由表决定。

- **中间路径透明**:后续跃点由网络中的路由器自行处理,源主机通过ICMP超时消息推断路径。

- **路由优先级**:最长前缀匹配 > 跃点数 > 默认路由。

通过此机制,`tracert`能够准确反映数据包从源主机到目标的完整路径。