🌐 第六章 路由
📄 一句话概括

路由器转发一个包只做一件事:拿目的 IP 查路由表——逐行"AND 掩码、比网段"判命中,多行命中挑前缀最长的,按命中行的"出接口 + 下一跳"扔出去;一行都不中,就由默认路由 0.0.0.0/0 保底。6.1 那句"下一站交给谁",答案就藏在这张表里。

📝 本节和前面几节的关系

6.1 说"每台路由器只回答一个问题:这个目的网段下一站交给谁",6.2 把门牌(LAN/WAN 口地址)装好了——但"下一站"是从哪冒出来的?本节揭晓:路由表。零件全是旧的:3.11 的 AND 判定题原样搬进路由器,5.14 的 MAC 表给路由表当对照面。

一、路由器的全部转发逻辑就一句话:查表(第一张配图)

包到了路由器,转发引擎只看一个字段:目的 IP——源 IP 是谁、包里装的是什么内容,统统不参与查表。然后按固定流水线走四步:

  1. 取出目的 IP;
  2. 对照路由表逐行比对:目的 IP AND 该行的掩码,等不等于该行的网络目标?
  3. 命中的行可能不止一行——挑前缀最长的;
  4. 按命中行的出接口把包扔出去,交给下一跳。

就这四步,没有任何玄机。互联网上每台路由器每秒把这套动作做几百万次。

二、路由表长什么样:一行四件套

路由表的每一行(一条路由)记四样东西:

家用路由器的表其实很短:两条直连路由(192.168.1.0/24 守 LAN 口、运营商网段守 WAN 口——6.2 装的两张门牌自动变成表里的两行)+ 一条默认路由。直连行是接口一配好地址就自动生成的,不用教。

三、怎么算"命中":把 3.11 的判定题搬进路由器

主机发包前做的那道 AND 判定题(目的 IP AND 自己的掩码 == 自己的网段?),路由器查表时逐行做一遍:

目的 IP AND 这一行的掩码 == 这一行的网络目标?→ 命中

唯一区别:主机的掩码是自己的,路由器要用每一行的掩码各试一次。所以 223.5.5.5 在家用路由器的表里试下来,只有 0.0.0.0/0 那行命中——这正是 6.1 说"包被交给网关"的表格版真相。

四、多行命中听谁的:最长前缀匹配(第二张配图,⭐⭐⭐要会算)

同一个目的 IP 可能同时命中多行:192.168.1.100 就能同时命中 192.168.0.0/16(大网)和 192.168.1.0/24(小网)。规矩只有一条——前缀越长越优先:

顺手把 5.14 的表兄弟分清楚:MAC 表查"这一台设备"(MAC→端口),路由表查"那一片网"(网段→下一跳)——一个精确到台,一个粗到网,粒度不同、各管一层,所以交换机不看 IP、路由器不背 MAC。

五、一行都不中怎么办:默认路由保底

目的 IP 太生僻、每行都试不中时,0.0.0.0/0 这行兜底——它的掩码是 0,AND 完全是 0.0.0.0,永远命中,所以叫"默认路由":其他所有路都查不到,就走它。

家用路由器的 0.0.0.0/0 行,下一跳填的就是运营商路由器(6.2 里的 211.140.20.1)——这就是"默认网关"三个字在路由器内部的实体。互联网骨干路由器的表有几十万行,但靠专门硬件照样毫秒级查完,而且再大的表,最后也总有一行兜着。

六、动手 Demo73:把 route print 从"认出默认路由"读到"逐列看懂"

  1. Win+R → 输入 cmd → 回车,敲 route print -4,回车——这次看"IPv4 路由表",别急着滚走。
  2. 对表头五列:网络目标、网络掩码、网关、接口、跃点数——正好对应四件套:网关=下一跳,接口=出门的门牌,跃点数=同路时更偏爱哪条。
  3. 查第一个目的地 223.5.5.5:心里跑判定题——网络掩码逐行 AND 下来,只有 0.0.0.0 那行命中 → 走默认路由,"网关"列就是你家路由器(6.2 记下的 LAN 口地址对面那个口)。
  4. 查第二个目的地 192.168.1.1:命中 192.168.1.0/24 那行——注意这行"网关"列写的是"在链路上",不是某个 IP。
  5. 30 秒实验:对比这两行的"网关"列——一个写下一跳 IP、一个写"在链路上"。这就是 6.1 直接交付/间接交付在路由表里的两种长相:直连行到头了、不用再托人;远方的路永远有下一跳。
  6. (选做)ping 一个瞎编的内网地址(如 ping 192.168.88.88)再 route print——表一行没变:路由器只管"按表扔",不管对面有没有人接,丢不丢是 ICMP 和超时的事。
  7. 全部完成。你现在能指着任何一行说出:它管哪片网、掩码多大、下一跳是谁、从哪个门出。

七、常见误区

八、动手自测

点开自测(先自己答,再展开) 1. 路由器查表只看包里哪个字段?哪个字段不参与? 2. 一条路由的四件套是什么? 3. "命中"的判定式怎么写?和主机发包前的判断题差在哪? 4. 同一目的 IP 同时命中 /16 和 /24,听谁的?为什么? 5. MAC 表和路由表各查什么?粒度差在哪? 6. 默认路由为什么"永远命中"?家用路由器这行的下一跳是谁? 7. 直连路由怎么来的?远方的路怎么来? 8. route print 里"网关"列写"在链路上"意味着什么交付方式? 9. 家用路由器的表大概几行?各管什么? 10. ping 一个没人存在的内网地址,路由表会变吗?路由器管不管对面有没有人?

答案:① 目的 IP;源 IP 不参与。② 目的网络、子网掩码、下一跳、出接口。③ 目的 IP AND 行掩码 == 行网络目标;主机用自己的掩码试一次,路由器用每行的掩码各试一次。④ /24;前缀越长范围越小越具体。⑤ MAC 表=MAC→端口(查一台设备),路由表=网段→下一跳(查一片网)。⑥ 掩码为 0 使 AND 恒等于 0.0.0.0;运营商路由器。⑦ 接口配好地址自动生成;人写(静态)或路由协议学(动态)。⑧ 直接交付:目的网段直连,无需下一跳。⑨ 约三行:两条直连 + 一条默认。⑩ 不变;只按表扔,对面有没有人不归它管。

九、下一步学什么

相关笔记