Appearance
题目
某路由器的路由表如下表所示:
| 目的网络 | 下一跳 | 接口 |
|---|---|---|
| 169.96.40.0/23 | 176.1.1.1 | S1 |
| 169.96.40.0/25 | 176.2.2.2 | S2 |
| 169.96.40.0/27 | 176.3.3.3 | S3 |
| 0.0.0.0/0 | 176.4.4.4 | S4 |
若路由器收到一个目的地址为 169.96.40.5 的 IP 分组,则转发该 IP 分组的接口是( )。
错因
A
S1 对应 /23 是匹配的,但不是最长前缀——S2 (/25)、S3 (/27) 都也匹配,且前缀更长。路由表查找规则是"最长前缀匹配",应取掩码最长的项。错的根源:找到第一条匹配项就停下,没继续比较前缀长度。
B
S2 对应 /25 也匹配,但 /25 比 /27 短——S3 (/27) 也匹配且前缀更长,应优先 S3。错的根源:同 A,没找到最长前缀。
D
S4 是 0.0.0.0/0(默认路由),匹配任何地址。但只有当没有任何更具体的路由匹配时才用默认路由。本题有 3 条具体路由都匹配,默认路由不会被用。错的根源:忘了"默认路由是兜底,最后才用"的原则。
总解析
第一步:逐项判断每条路由是否匹配 169.96.40.5
需要把目的 IP 169.96.40.5 与每个目的网络号在掩码长度内做比较。
把 169.96.40.5 第三、四字节展开:
- 第三字节 40 =
00101000 - 第四字节 5 =
00000101
| 路由项 | 网络号 | 掩码长度 | 网络位(第三+第四字节) | 是否匹配 |
|---|---|---|---|---|
| S1 | 169.96.40.0 | /23 | 第三字节高 7 位 0010100 | 169.96.40.5 的第三字节高 7 位 = 0010100 ✓ 匹配 |
| S2 | 169.96.40.0 | /25 | 第三字节 + 第四字节高 1 位 = 00101000_0 | 第三字节 40 + 第四字节 5 高 1 位 = 00101000_0 ✓ 匹配 |
| S3 | 169.96.40.0 | /27 | 第三字节 + 第四字节高 3 位 = 00101000_000 | 第三字节 40 + 第四字节 5 高 3 位 = 00101000_000 ✓ 匹配(5 = 00000101 高 3 位 = 000) |
| S4 | 0.0.0.0 | /0 | 默认 | ✓ 匹配(任何地址) |
第二步:取最长前缀
| 路由 | 掩码长度 |
|---|---|
| S1 | /23 |
| S2 | /25 |
| S3 | /27 ← 最长 |
| S4 | /0 |
最长前缀匹配规则:路由器按最长掩码(最具体)的路由转发。本题最长是 S3 (/27)。
第三步:核对
最终答案是 C(S3)。
编者注(生僻术语):"最长前缀匹配"(Longest Prefix Match, LPM)是 IP 路由的核心规则——路由表里多条路由可能都匹配某个 IP,路由器永远选最具体(掩码最长)的那条。这条规则确保:
- 默认路由(/0)只在没有任何其他匹配时生效
- 子网划分能"覆盖"超网(如 /23 母网下的 /27 子网会被优先匹配)
LPM 的实现需要专用的硬件结构(TCAM、Trie 树)以达到线速查找——这是路由器与交换机的关键技术差异之一。