路由器转发一个包只做一件事:拿目的 IP 查路由表——逐行"AND 掩码、比网段"判命中,多行命中挑前缀最长的,按命中行的"出接口 + 下一跳"扔出去;一行都不中,就由默认路由 0.0.0.0/0 保底。6.1 那句"下一站交给谁",答案就藏在这张表里。
6.1 说"每台路由器只回答一个问题:这个目的网段下一站交给谁",6.2 把门牌(LAN/WAN 口地址)装好了——但"下一站"是从哪冒出来的?本节揭晓:路由表。零件全是旧的:3.11 的 AND 判定题原样搬进路由器,5.14 的 MAC 表给路由表当对照面。
一、路由器的全部转发逻辑就一句话:查表(第一张配图)
包到了路由器,转发引擎只看一个字段:目的 IP——源 IP 是谁、包里装的是什么内容,统统不参与查表。然后按固定流水线走四步:
- 取出目的 IP;
- 对照路由表逐行比对:目的 IP AND 该行的掩码,等不等于该行的网络目标?
- 命中的行可能不止一行——挑前缀最长的;
- 按命中行的出接口把包扔出去,交给下一跳。
就这四步,没有任何玄机。互联网上每台路由器每秒把这套动作做几百万次。
二、路由表长什么样:一行四件套
路由表的每一行(一条路由)记四样东西:
- 目的网络:我管得到哪片网(如 192.168.1.0);
- 子网掩码:这片网有多大(如 255.255.255.0,也就是 /24);
- 下一跳:去这片网,下一个转交给谁;
- 出接口:从我哪个门扔出去。
家用路由器的表其实很短:两条直连路由(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(小网)。规矩只有一条——前缀越长越优先:
- /24 比 /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 从"认出默认路由"读到"逐列看懂"
Win+R→ 输入cmd→ 回车,敲route print -4,回车——这次看"IPv4 路由表",别急着滚走。- 对表头五列:网络目标、网络掩码、网关、接口、跃点数——正好对应四件套:网关=下一跳,接口=出门的门牌,跃点数=同路时更偏爱哪条。
- 查第一个目的地 223.5.5.5:心里跑判定题——网络掩码逐行 AND 下来,只有 0.0.0.0 那行命中 → 走默认路由,"网关"列就是你家路由器(6.2 记下的 LAN 口地址对面那个口)。
- 查第二个目的地 192.168.1.1:命中 192.168.1.0/24 那行——注意这行"网关"列写的是"在链路上",不是某个 IP。
- 30 秒实验:对比这两行的"网关"列——一个写下一跳 IP、一个写"在链路上"。这就是 6.1 直接交付/间接交付在路由表里的两种长相:直连行到头了、不用再托人;远方的路永远有下一跳。
- (选做)ping 一个瞎编的内网地址(如
ping 192.168.88.88)再 route print——表一行没变:路由器只管"按表扔",不管对面有没有人接,丢不丢是 ICMP 和超时的事。 - 全部完成。你现在能指着任何一行说出:它管哪片网、掩码多大、下一跳是谁、从哪个门出。
七、常见误区
- "路由器查表看的是目的 MAC"——查表只看目的 IP;MAC 只管本段投递,出接口确定后由 ARP 把"下一跳 IP"换成"下一跳 MAC"再封帧(3.16 的活儿)。
- "路由表记的是每一台主机的地址"——记的是网段。全网主机几十亿台,表只记"网"不记"台",几十万行就能覆盖全世界。
- "最长前缀匹配是个可选技巧"——是铁规矩:只要同时命中,就必须选最长;/24 在手就不能用 /16。
- "默认路由 0.0.0.0 是个特殊网段"——它哪都不是:掩码为 0 使它永远命中,是人为设的"查无此路时的出口"。
- "路由表一开机就自带全世界地图"——直连行是地址一配就自动生成的;远方的路要么人手写(静态路由),要么路由协议自动学(动态路由)——这正是下一节的伏笔。
八、动手自测
点开自测(先自己答,再展开)
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;运营商路由器。⑦ 接口配好地址自动生成;人写(静态)或路由协议学(动态)。⑧ 直接交付:目的网段直连,无需下一跳。⑨ 约三行:两条直连 + 一条默认。⑩ 不变;只按表扔,对面有没有人不归它管。
九、下一步学什么
- ☑ 6.4 将数据传输给下一个路由器(数据传输给下一个路由器) ✅ 已完成 —— 最后一棒揭晓:拆旧帧、ARP 问出下一跳 MAC、封新帧出门——MAC 头整段重写、IP 包原封不动,本节流程线的第④步落了地。
相关笔记
- 将数据传输给下一个路由器(数据传输给下一个路由器) —— 本节查表给出"出接口 + 下一跳 IP",下一节把它真正交出去:拆旧帧、ARP 问 MAC、封新帧
- 用路由器连接网络时的地址设置(网络的连接) —— 两张门牌装好就自动变成表里两条直连路由
- 将数据传输到远程网络(路由) —— "下一站交给谁"的答案就存在路由表里
- IP地址范围的分隔符(子网掩码) —— AND 判定题的算术出处,本节原样搬进路由器
- MAC地址表的管理(MAC地址表) —— 表兄弟对照:MAC 表查"一台设备",路由表查"一片网"
- 数据的发送和接收(IP、IP数据包、路由) —— "路由"概念第一次出现的地方
- 连接网络的过程(IP地址的设置) —— 默认网关就是表里默认路由的下一跳