| HowItWorksLab · 系统
简体中文

IP 数据包跨网络路由是如何运转的

你的数据并不是一整条线缆送过去的——它被切成一个个数据包,途经的每台路由器再决定下一跳。跟着一个数据包走一遍,一次查表接一次查表。

IP · 数据包跨网络路由 每台路由器读出目的地址 → 选出下一跳 → 把数据包继续转发 发送主机 生成数据包 路由器 A 本地网关 路由器 B 运营商边缘 路由器 C 骨干网 目标主机 接收数据包 数据包从一个路由器跳到下一个 路由表 目的前缀 → 下一跳 10.0.0.0/8 → 路由器 A 203.0.113.0/24 → 路由器 B 每台路由器都在这里查出下一跳 IP 数据包 源地址 · 目的地址 · 载荷——路由器按目的地址逐跳转发 数据包跳转 路由表查找
旅程的顺序 主机生成数据包 → 路由器 A 查表 → 路由器 B 查表 → 路由器 C 查表 → 到达目的地
显示模式

详细说明

什么是数据包路由?

当你在网络上发送数据时,它并不是以一整条连续的数据流传送的,而是被拆成一个个很小的单位,叫做 IP 数据包,由一串路由器逐个转发,直到抵达目的地。

路由,就是每一步都在决定数据包接下来该去哪里。正因如此,一条消息才能穿过许多各不相同、分属不同运营者的网络,而每一层都不需要知道完整的路线。

为什么要把数据切成数据包?

因为相互独立的数据包比一条长连接灵活得多。不同的包可以走不同的路径、与其他流量共享链路,还能绕开故障。如果某条路径变得不可用,后面的包直接改走另一条即可。

代价是网络只做到尽力而为:路由器转发收到的数据包,却不保证送达或次序。让数据重新变得可靠,是两端的工作。

部件及其作用

1. 主机生成数据包

发送主机把一段数据包进一个 IP 数据包里,并打上源地址与目的地址。从这一刻起,这个数据包就是自成一体的。

2. 第一台路由器查表

数据包到达本地网关路由器 A。它读出目的地址,在路由表里找出匹配得最精确的一条,再把数据包转发往那个下一跳。

3. 每一跳各自决定

路由器 B 做同样的事,然后是路由器 C。每台都只决定下一跳——而不是整段旅程——再把数据包交给离目的地更近的那台路由器。

4. 路由表选出下一跳

路由表是决策的核心。它列出各个目的地范围以及对应的下一跳。路由器挑出与数据包地址匹配得最精确的那一条。

5. 数据包抵达目的地

最终某台路由器在与目标主机直接相连的网络上找到了它,把数据包投递出去。任何回复都走一遍同样的旅程,只是方向相反。

6. 路线并不固定

因为每一跳都各自决定,数据包可能走不同路径、到达时次序颠倒,甚至在途中被丢弃。重组与重传由两端处理,而不是网络。

什么是 IP 数据包?

它是一小块自成一体的数据。每个数据包都带着自己的源地址和目的地址,因此路由器可以独立地转发它,无需知道它属于哪条完整消息。

路由器到底在做什么?

路由器读出每个数据包上的目的地址,在路由表里查它,然后把数据包转发到能把它带得更接近目的地的那个下一跳。

什么是路由表?

它是一份把目的地映射到下一跳的规则清单。数据包到达时,路由器找出匹配得最精确的那一条,据此决定数据包接下来去哪里。

数据包走的是不是一条直线?

不一定。每一跳都是一次独立的决定,所以同一条消息的不同数据包可能走不同的路径,甚至到达时次序颠倒。

由谁来决定整条路线?

没有任何一个中心来决定。每台路由器只决定自己的下一跳,端到端的路径是这些局部选择叠加出来的结果。

数据包丢了会怎样?

路由器只负责转发收到的数据包,并不承诺送达。丢包与补救由两端的协议处理,它们会发现缺失的数据并请求重传。

常见误区

有一台路由器规划整条路线。 以为有一台机器决定完整路径。
每台路由器只决定自己的下一跳。 完整路径由许多次局部的决定叠加而成。
数据以一整条连续流传送。 把它想象成像水一样流过一根管子。
数据被切成一个个独立数据包。 每个包各自转发,也各自选路。
数据包总是按顺序到达。 以为网络会替你保持次序。
次序并不保证。 数据包丢失或乱序时,由两端负责重组和重传。
免责声明:本图解为教学目的做了大幅简化,真实系统变量与复杂度远超此处。不可用于工程生产用途,也不构成金融、政治或专业建议。