💻 第九章 通过七个简单的实验理解TCP/IP网络
📄 一句话概括

目标不在本网段就把包交给默认网关;路由器查路由表只答一件事——下一站去哪,逐跳接力直到终点。

📝 本节和前面几节的关系

本机配置认齐了,本节正式出门:包离开本网段的第一步,以及路由器这个指路人怎么指路。

一、为什么需要指路人

发包前先按掩码算一算:目标在不在我的网段? 在本网段:直接按 MAC 投递给对方(9.8 的 ARP 问门牌); 不在:把包交给默认网关——ipconfig 里的那个 192.168.1.1,通常就是家里的路由器。

二、路由表:只答下一站

路由器脑子里有一张路由表:目标网络 → 下一跳(交给谁); 它不背全球地图,每台只负责指一步:像问路时【去北京我不知道,但你先到济南】; 表里总有一条默认路由(0.0.0.0/0)兜底——不认识的统统交给上一级,正是它让逐跳接力能一路走到互联网骨干。

三、实验怎么做

跑 ipconfig 看【默认网关】——那是你的第一站指路人; route print 还能看到本机自己的路由表——电脑其实也存着一张迷你指路表; 下一节用 tracert 把整条接力链亲眼列出来。

四、动手 Demo:查路由表决定下一跳

给 8.8.8.8 发包,看本机与路由器各按什么规则决定下一站。

rt = [("192.168.1.0/24", "直连"), ("0.0.0.0/0", "网关 192.168.1.1")]
target = "8.8.8.8"
for net, nexthop in rt:
    hit = net.startswith("0.0.0.0") or target.startswith("192.168.1.")
    print(net, "->", nexthop, "| 匹配" if hit else "| 不匹配")

实跑输出:

--------------------------------------------------------------------
实验 4——路由器是数据传输过程中的指路人
--------------------------------------------------------------------

发一个包给 8.8.8.8, 本机一看: 目标不在我网段, 怎么办?
交给【默认网关】——家里那台路由器(ipconfig 里的默认网关 192.168.1.1)。

路由器脑子里有一张路由表, 只答一个问题: 【下一站去哪】

  路由表条目               下一跳                   能匹配 8.8.8.8 吗
  --------------------------------------------------------------------
  192.168.1.0/24           直连, 从局域网口送       否(网段不符)
  0.0.0.0/0 (默认路由)     运营商的下一台路由器     是(兜底全收)

    本机(192.168.1.100) -> 网关(192.168.1.1) -> 运营商 -> …… -> 8.8.8.8

路由器不背全球地图, 每台只负责指一步——像接力问路:
【去北京? 我不知道, 但你先到济南】。9.6 就看这条接力链长什么样。

目标 8.8.8.8 不匹配局域网网段,落到默认路由——交给网关,第一跳完成。 每台路由器都在做同样的事:查表、转交——接力不歇直到终点。

30 秒实验

  1. 跑 ipconfig 记下你的默认网关,想想它大概是哪台设备。
  2. 跑 route print(需命令提示符),找出里面的默认路由那一行。

常见误区

  1. 以为路由器知道完整路线——它只存【下一跳】,路线是逐跳问出来的。
  2. 以为跨网段的包直接飞到目标——必须经网关接力,每跳都在换 MAC(9.8 实证)。
自测三问(点开对答案) 1. 目标不在本网段时包交给谁? —— 默认网关——通常就是家里的路由器。 2. 路由表回答什么问题? —— 只答【下一站去哪】,不背全程地图。 3. 默认路由的作用? —— 兜底——不认识的目标统一交给上一级。

相关笔记