路由表不是路由器的专利——你自己的电脑里就有一张,而且每次发数据时都在用它。本章开头那句"不在同网段就交给默认网关"(6.1),落到实处就是 PC 路由表里的那条 0.0.0.0 0.0.0.0 → 默认网关:你在控制面板里填的"默认网关",和路由表里的"默认路由",是同一件事的两个入口。PC 与路由器的表结构完全一样(目标网段 / 掩码 / 下一跳 / 接口 / 跃点数),差别只在行数(PC 通常就直连 + 默认几条)与是否替别人转发(PC 只发自己的包)。多条默认路由共存时,靠跃点数分胜负——这也解释了"插着网线又开着 Wi-Fi,到底走哪条"。
第六章兜了一整圈,最后回到最初那台设备——你自己的 PC。6.1 说"交给默认网关"、6.3 说"逐行 AND 比掩码、最长前缀匹配"、6.11 说"默认路由永远命中"、6.9 说"人也手写 route add",这些话在前面都是站在路由器的视角讲的;本节把它们原封不动地搬到 PC 上,你会发现一个字都不用改。换句话说:"路由"不是某种设备的专属功能,而是每一台装了 TCP/IP 的设备都要做的事——只是 PC 通常只替自己算账,路由器才替所有人中转。
一、PC 也是一台"路由器",只是不替别人转发
先破一个直觉:很多人以为路由表躺在路由器机箱里,和普通电脑无关。事实恰恰相反——
- 任何装了 TCP/IP 的设备都有路由表:Windows、macOS、Linux、手机、平板,甚至智能电视和摄像头;
- 你每点一次网页、每发一条消息,你的电脑都在做 6.1 那道判断题:拿目的 IP AND 掩码,逐行比对,看命中哪一条;
- 区别只在它替谁转发:
| 普通 PC | 路由器 | |
|---|---|---|
| 替谁转发 | 只发自己产生的包 | 替任何人中转(转发别人的包) |
| 表的规模 | 几条(直连 + 默认) | 成百上千条(还有静态、动态、聚合) |
| 表的来源 | 主要是 DHCP 自动下发 | 直连 + 人写 + 协议自动学(6.7) |
| 表的结构 | 目标网段 / 掩码 / 下一跳 / 接口 / 度量 | 一模一样 |
📌 一句话记住:PC 与路由器的路由表,是同一张表、同一套判定规则;差别只在"管不管别人"。所以"路由器因为路由表而得名"这话只说对了一半——表,谁都有。
二、route print 一屏认亲(第一张配图)
打开命令提示符,敲一条命令:
route print
(同样效果的还有 netstat -rn;PowerShell 里是 Get-NetRoute。)
输出的 IPv4 路由表通常长这样——每台机器略有不同,但七行里总有这几类:
| 网络目标 | 掩码 | 网关 | 接口 | 跃点数 | 这一行是什么 |
|---|---|---|---|---|---|
| 0.0.0.0 | 0.0.0.0 | 192.168.1.1 | 192.168.1.100 | 25 | 默认路由——兜底的那条,网关列就是默认网关 |
| 127.0.0.0 | 255.0.0.0 | 在链路上 | 127.0.0.1 | 331 | 回环:自己 ping 自己(6.8 提过的直连特例) |
| 192.168.1.0 | 255.255.255.0 | 在链路上 | 192.168.1.100 | 281 | 本网段直连:这一段里谁都能直接找到(6.8) |
| 192.168.1.100 | 255.255.255.255 | 在链路上 | 192.168.1.100 | 281 | 本机地址:指向自己 |
| 192.168.1.255 | 255.255.255.255 | 在链路上 | 192.168.1.100 | 281 | 网段广播:发给本段所有人 |
| 224.0.0.0 | 240.0.0.0 | 在链路上 | 192.168.1.100 | 281 | 组播地址段 |
| 255.255.255.255 | 255.255.255.255 | 在链路上 | 192.168.1.100 | 281 | 受限广播:发给本段所有人 |
五列的含义与路由器完全一致(6.3 的四件套 + 度量):
- 网络目标 + 掩码:这条路由管着哪一片地址;
- 网关:下一跳。「在链路上」=直连,不需要经过任何路由器(就是 6.8 那条直连路由的样子);
- 接口:从本机哪块网卡发出去;
- 跃点数:这条路的"代价",第五节专门讲。
两张表的最长前缀匹配同样在起作用:你要访问 192.168.1.50,虽然 0.0.0.0(默认路由)也"命中",但 192.168.1.0/24 这条前缀更长、更具体——先命中它(6.3 的规则在 PC 上原样生效)。所以你 ping 同楼层同事,包根本不会去打扰网关。
📌 注意最后一列的数字大小有迷惑性:直连行的跃点数常比默认路由更大(如 281 对 25),但这完全不影响它——跃点数只在"两条路由争同一个目的地"时才有意义,而直连与默认路由根本不竞争(前缀长度不同,最长前缀匹配先分出胜负)。
三、默认网关的两副面孔(第二张配图)
现在把本章最大的一个"名实之辨"说清:
| 视角 | 你看到的 | 它的样子 |
|---|---|---|
| 配置视角(人在哪填) | 控制面板 / ipconfig 里的「默认网关」;家里则由路由器经 DHCP 自动下发(3.23) |
一个 IP 地址,如 192.168.1.1 |
| 表视角(它落在哪) | route print 里的 0.0.0.0 0.0.0.0 → 192.168.1.1 那一行 |
一条默认路由(6.11) |
两边的 IP 是同一个数。所以:
"填默认网关" 就是 "写一条默认路由"——同一个动作的两种说法。
这就解释了三件之前只能"记结论"的事:
- 为什么网关填错就上不了外网(6.1)?——因为那条
0.0.0.0行的下一跳指错了,所有"本网段管不了"的包都被送去了错误的方向; - 为什么公网上不可能有"0.0.0.0 这台机器"?——因为
0.0.0.0从来不是一个真实地址,它在这里只是"剩下的全部"这个意思(6.11); - 为什么拔了网线换 Wi-Fi 能自动恢复?——见下节。
四、多条默认路由共存时,谁说了算:跃点数
插着网线、又开着 Wi-Fi 的笔记本,路由表里会出现两条 0.0.0.0:
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.100 25 ← 有线
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.101 50 ← Wi-Fi
两条前缀长度相同(都是 0 位),最长前缀匹配这时分不出胜负——于是轮到最后一列:
跃点数(Metric)小的赢。
- 跃点数的意思是"这条路的代价",越小越优先;
- Windows 会按链路速度自动给每个接口算一个基础度量,通常以太网小于 Wi-Fi(所以插上网线时优先走有线,这正是我们期望的);
- 拔掉网线:那条默认路由直接从表里消失(路由随链路生灭,和 6.8 的直连一个道理)→ 只剩 Wi-Fi 那条 → 自动切换,网络无缝续上;
- 想强制指定:可以手动改接口度量(网卡属性 → IPv4 → 高级 → 自动跃点取消)或改路由的度量,这就是"我想让某块网卡优先"的开关。
📌 记住分工:不同目的地的路由之间不比跃点数(谁更具体谁赢,这是最长前缀匹配的活);跃点数只在两条路由争同一个目的地时才说话。
五、PC 的表 vs 路由器的表:同源不同量
| PC 的路由表 | 路由器的路由表 | |
|---|---|---|
| 结构 | 目标 / 掩码 / 下一跳 / 接口 / 度量 | 完全相同 |
| 典型内容 | 回环 + 直连 + 本机 + 广播 + 默认(约七八条) | 直连 + 静态 + 动态 + 聚合 + 默认(可能几十万条) |
| 主要来源 | DHCP 下发为主(家用 PC 几乎是全自动) | 直连自动 + 人写 + 协议自动学(6.7) |
| 有没有"默认路由" | 有,就是默认网关那行 | 有(6.11) |
| 转发能力 | 只发自己的包 | 替所有人中转 |
| 边界 | 一出本机,视角就交给下一台设备 | 一跳一跳接力(6.1) |
顺带把一个小疑问收掉:PC 要不要"路由协议"? 一般不需要——它只有一张网卡、一个出口,一条默认路由就够了。只有当一台主机真的接在多个网络里(服务器多网卡、装了虚拟机网卡),才需要多写几条明细路由。
六、给 PC 手动加一条路由(Demo88 的进阶版)
既然 PC 也有表,那就能像路由器一样手写静态路由(6.9 的动作搬回自己电脑):
route add 10.0.0.0 mask 255.0.0.0 192.168.1.254 临时(重启失效)
route add 10.0.0.0 mask 255.0.0.0 192.168.1.254 -p 永久(写入注册表)
route delete 10.0.0.0 删掉
它最典型的用途是"双网卡双网络":
- 一台电脑既连着公司内网专线(10.0.0.0/8)、又连着 Wi-Fi 上互联网;
- 给内网网段加一条明细路由(
10.0.0.0/8→ 内网网关),其余全走默认路由(Wi-Fi); - 明细前缀更长 → 访问内网时它赢(6.3);访问互联网时它不命中 → 走 Wi-Fi。
这套"明细走专线、其余走默认"的分流手法,和路由器上做策略路由是同一个思路——只是这次的操作对象是你自己的电脑。
七、动手 Demo(Demo88)
目标:在自己电脑上找到那张表,逐行认亲,并看清"默认网关"与"默认路由"的重合。
A. 找到并读懂你的路由表
route print # Windows:一屏看全(含接口列表 + IPv4 路由表)
netstat -rn # 同样内容,另一种写法
对账要点:
- 找到
0.0.0.0 0.0.0.0那一行,读出它的"网关"列; - 立刻对照
ipconfig /all里的「默认网关」——两个数字应当完全相同(这就是本节的核心证据); - 找到
192.168.x.0 255.255.255.0 在链路上那一行,它的"接口"列应是你自己的 IP。
B. 看清跃点数(多条默认路由时)
Get-NetRoute -AddressFamily IPv4 | Sort-Object RouteMetric |
Format-Table DestinationPrefix, NextHop, RouteMetric, InterfaceAlias
(Windows PowerShell;Linux 用 ip route show,输出里 default via ... dev eth0 proto dhcp metric 100 一行就是默认路由。)
看到什么算成功:默认路由(0.0.0.0/0)的 RouteMetric 比 Wi-Fi 那条小,且 InterfaceAlias 写着你的有线网卡名。
C. 30 秒实验一:拔掉网线,看默认路由消失
route print | findstr "0.0.0.0"
拔掉网线(或禁用有线网卡)后再看一次:有线那条 0.0.0.0 行消失了,只剩 Wi-Fi 的一条。插回去又回来——路由随链路生灭(Demo77 / Demo78 的现象,这里在 PC 上重演)。
D. 30 秒实验二:亲手加一条、再删掉
(需要管理员权限)
route add 10.0.0.0 mask 255.0.0.0 192.168.1.254
route print | findstr "10.0.0.0" # 表里多了一行
route delete 10.0.0.0 # 撕掉
注意:加了这条路由不代表就通了——如果 192.168.1.254 后面并没有通往 10.0.0.0/8 的路,ping 依然不通。表有 ≠ 能通(6.9 Demo79 的同一句结论)。
E. 一个反直觉小测
ping 127.0.0.1 # 通
这只证明你的协议栈活着(回环那条路由管用),完全不能证明网卡、网线、网关有任何一个是好的——因为回环流量根本不出网卡。这也是"ping 127.0.0.1 通但上不了网"常见的原因解释。
八、常见误区
- "路由表是路由器才有的东西。" —— 每台装了 TCP/IP 的设备都有,包括你的手机和家里的电视。
- "默认网关是网卡上的一个属性,和路由表是两回事。" —— 它就是表里那条
0.0.0.0/0行,同一个 IP、同一个作用。 - "PC 的表只有几行,算不上'路由'。" —— 判定动作(AND 掩码、最长前缀匹配)与路由器一字不差,只是不替别人转发。
- "两条默认路由会打架。" —— 不会。它们靠跃点数分优先级,任何时刻只有一条在干活(另一条在链路出问题时顶上)。
- "跃点数越小代表越快。" —— 它是代价的抽象,不直接等于带宽或延迟;PC 上通常由系统按链路速度自动给基准值。
- "ping 得通 127.0.0.1,说明网络没问题。" —— 只说明协议栈活着。回环流量不出网卡,什么都证明不了。
- "手动加的路由能一直留着。" —— 不加
-p的重启即失效;而动态学来的、随链路生灭的路由(直连、默认)本来就会自己来去。
九、动手自测
点开自测(先自己答,再展开)
1. "PC 也是一台路由器"这句话,对在哪、错在哪? 2. `route print` 里那五列分别是什么?与路由器的表相比少了什么列吗? 3. 你 ping 同一网段的同事时,路由表命中哪一条?会用到默认路由吗?为什么? 4. "默认网关"和"默认路由"是同一个东西吗?请各用一句话从两个视角描述它。 5. 为什么 `0.0.0.0` 能"命中一切"?它是一个真实存在的地址吗? 6. 笔记本同时插网线和开 Wi-Fi,表里有两条 `0.0.0.0`,系统怎么决定走哪条? 7. 拔掉网线之后,路由表发生了什么?这和 6.8 讲的直连路由生灭有什么关系? 8. 为什么直连行的跃点数常常比默认路由**大**,却仍然是"优先"的? 9. 给 PC 手写一条路由,最典型的实用场景是什么?为什么它不会把上互联网的流量也抢走? 10. `ping 127.0.0.1` 通,能证明哪些部分正常?不能证明哪些部分正常?答案:① 对在"它和路由器一样有路由表、一样要做 AND 掩码 + 最长前缀匹配的判定";错在"它不替别人转发",只处理自己产生的包。② 网络目标、网络掩码、网关(下一跳)、接口、跃点数——与路由器表的列一样,不缺;只是 PC 表里通常没有那些动态学来的、聚合出来的行。③ 命中 192.168.x.0/24 那条直连路由(网关列显示"在链路上");不会用到默认路由,因为它前缀更短、被最长前缀匹配淘汰,包直接交给对方(同网段直接交付)。④ 是同一个东西的两个视角:配置视角叫"默认网关"(你填的、DHCP 下发的那个 IP);表视角叫"默认路由"(表里 0.0.0.0/0 那一行的下一跳)。⑤ 因为它的掩码是 0 位——任何地址 AND 0.0.0.0 都得 0.0.0.0,与它的网络目标恒等,所以永远命中;它不是真实地址,只表示"其余的全都"。⑥ 比跃点数:两条前缀长度相同、最长前缀匹配分不出胜负,度量小的优先(Windows 通常让以太网小于 Wi-Fi,所以优先有线)。⑦ 那条默认路由直接从表里消失,只剩 Wi-Fi 那条,于是流量自动改道;这与直连路由"随链路生灭"是同一个机制(无链路则无路)。⑧ 跃点数只在两条路由争同一个目的地(同前缀长度)时才比较;直连与默认路由前缀长度不同,由最长前缀匹配先分胜负,所以直连行的度量数值大也不影响它优先。⑨ 最典型是双网卡双网络:一边公司内网专线、一边 Wi-Fi 上互联网,给内网网段加一条明细路由。因为明细前缀更长,访问内网时它赢;访问互联网时它不命中,就落到默认路由上走 Wi-Fi。⑩ 能证明 TCP/IP 协议栈与回环路由正常;不能证明网卡驱动、网线、交换机、网关、DNS 或外网任何一环正常——回环流量根本不出网卡。
十、下一步学什么
- ☑ 7.1(按教材顺序) —— 已完成:限制访问用户和设备的方法(身份认证)——第七章开篇,第一次问"谁有资格用网络":认证三要素(知道的 / 持有的 / 你本身是什么)、用户与设备两条认证线、认证≠授权。
相关笔记
-
限制访问用户和设备的方法(身份认证) —— 下一章开篇:上一节把"包怎么出去"讲完了,接下来的问题变成"谁有资格发这个包"
-
连接切分后的网络的方法(VLAN间的路由) —— 上一节讲三层设备怎么连通网段,本节回到主机:它自己也在查表
- 高度压缩路由信息的终极方法(默认路由) —— 默认路由"永远命中"的兜底角色,在 PC 表里就是那条 0.0.0.0
- 路由表中最基本的信息(直接连接) —— PC 表里的"在链路上"那几行就是直连路由,同样随链路生灭
- 确定最终的发送地址(下一个路由器执行的地址) —— "跨网段只问网关",PC 表里的默认路由行就是那个"网关"
- 确定传输数据的目的地(确定数据传输的目的地) —— 最长前缀匹配这套算法,在 PC 表上原样运行
- 将数据传输到远程网络(路由) —— 本章开头"不在同网段就交给默认网关",本节揭出它的实体:你电脑表里的那一行
- 对必要的设置进行自动设置(DHCP) —— PC 的默认网关与默认路由,多半是 DHCP 一并下发的
- 连接网络的过程(IP地址的设置) —— IP 地址、掩码、网关这三样,落到本机就是路由表里的直连行与默认行