通过网络发送的信息会被拆成数据包(packet)。每个数据包带有含地址和编号的头部(header)、一段数据负载(payload),路由器(router)一跳一跳地转发,直到抵达目的地。考试会要求你描述这个过程或填表。
这一课是数据传输与校验的开头。知道发送的是什么之后,后面的校验才更好理解。
数据包里有什么?
在 IGCSE 层面,可以把数据包想成三部分:
- **头部:**目的地址、发送者地址、数据包编号、数据包总数和跳数。
- **负载:**所携带的那一段信息。
- **尾部或校验数据:**接收方用来测试错误的额外信息。
下面的地址是虚构的例子,来自专门保留给文档用的地址范围,不属于任何真实设备。
路由器如何决定怎么做?
- 路由器读取头部里的目的地址。
- 在路由表里查找最合适的下一跳。
- 把跳数减 1。
- 如果跳数现在是 0,就丢弃数据包,否则转发出去。
路由器不会读你的信息内容,只使用头部。
例题详解
一台笔记本电脑(198.51.100.7)向服务器(203.0.113.20)发送 2,400 个字符的信息。每个数据包的负载是 800 个字符。跳数从 5 开始。
路径是路由器 A、路由器 B、路由器 C。
**第 1 步,拆分。**2,400 ÷ 800 = 3,所以有 3 个数据包,编号为 3 个中的第 1、第 2、第 3 个。
**第 2 步,头部。**每个头部写明目的地 203.0.113.20、来源 198.51.100.7、自己的编号、总数(3)和跳数 5。
**第 3 步,数据包 1 的跳数。**到路由器 A 变为 4,到 B 变为 3,到 C 变为 2。它以跳数 2 抵达服务器,没有被丢弃。
**第 4 步,数据包 2 走不同路线。**路由器 A 发现通往 B 的链路很拥挤,就把数据包 2 改经路由器 D,再到 C。跳数依次为 4、3、2,它也抵达了。
**第 5 步,到达顺序。**数据包 3 走了短路线,先到。服务器收到的顺序是 3、1、2。
**第 6 步,重组。**服务器根据编号重新排成 1、2、3,把负载接起来,还原成 2,400 个字符。如果数据包 2 没到,服务器只会要求重发数据包 2。
学生常犯什么错误?
常见答案是:“路由器把整条信息沿最快的路径发送,数据包按顺序到达。”
这里有两处错。信息一开始就被拆开了,而且每个数据包可以走自己的路线。
数据包可能以任何顺序到达,这正是头部要有编号的原因。更正的写法是:接收设备根据编号重新排列数据包。
自我检测
1. 一条 1,500 个字符的信息以每包 500 个字符发送。需要多少个数据包?
查看答案
1,500 ÷ 500 = 3。3 个数据包。
2. 一个数据包的跳数从 3 开始,必须经过 4 个路由器。会发生什么,在哪里发生?
查看答案
路由器 1 把它变成 2,路由器 2 变成 1,路由器 3 变成 0。路由器 3 丢弃它。它在第三个路由器被丢弃,到不了第四个。
3. 头部里的哪一项让接收方能按正确顺序重建信息?
查看答案
数据包编号(连同数据包总数)。
下一步
接着看比特实际如何发送:串行与并行传输。然后试试练习题。受限伪代码追踪训练器很适合用来练习追踪计算跳数的循环。
如果你能说出步骤,但写出来的答案不够清晰,我们的老师可以在一对一线上计算机科学补习里帮你组织答案。