模块三 · 网络层:数据平面
路由器内部工作原理
一个包进入路由器后,怎样找到出口、移到出口并等待发送?先理解设备中的几个环节,再讨论实现方法和排队。
本章要解决的问题:一个包进入路由器后,怎样找到出口、移到出口并等待发送?先理解设备中的几个环节,再讨论实现方法和排队。
本章的证据来源:教材§4.1.1与§4.2,纸书199–215页。旧稿ping数据缺少完整实验材料,本次不重新测量,也不能从外部RTT反推出家用路由器的交换结构或某个内部队列。
先从一个例子理解概念
一个发往10.1.2.3的包到达路由器。设备需要决定用哪个出口,把包送过去,并在出口忙时等待。
转发与路由选择
转发是对当前包执行本地动作,例如查表选择输出接口;路由选择是形成或更新路径及相关转发信息的过程。二者按功能区分,不能按“硬件”和“CPU”划绝对界线。
输入、交换与输出
输入端口接收数据并完成必要处理;交换结构把包从输入移向输出;输出端口缓冲并向下一条链路发送。这是理解教材路由器模型的分工,不代表所有设备物理结构完全一致。
输入端口如何找到出口
先引入最长前缀匹配:如果多条地址前缀匹配目的IP,优先匹配位数更多的一条。它描述查找规则,不规定实现算法。
假设转发表有10.0.0.0/8和10.1.0.0/16,两条都匹配10.1.2.3,应选/16那条。后续《路由与最长前缀匹配》再学习路由条目和具体查询。
软件不必逐条线性扫描,可以采用树结构等快速查找技术;高速设备也常用专用硬件。应结合吞吐、延迟、表规模、成本与功耗比较,不能说软件查找必然来不及。
TCAM是一种实现选择
TCAM(三态内容寻址存储器)可表示0、1与“不关心”的匹配位,并对存储项进行并行匹配。规则排序或优先选择等设计帮助返回所需匹配。
10.0.0.0/8固定的前8位是二进制00001010,其余位不参与该前缀匹配。注意这里的“10”是一个八位数值,不能说“前8位是字符10”。
TCAM有容量、功耗与成本方面的取舍。它是常见方法之一,不是最长前缀匹配快的唯一原因,也不是所有路由器必用的器件。教材同时讨论快速查找技术及SRAM/DRAM等存储。
交换结构怎样搬运包
| 教材模型 | 怎么做 | 可能限制 |
|---|---|---|
| 经内存 | 经共享内存完成包搬运 | 内存访问及数据搬运能力 |
| 经总线 | 多个输入共享总线搬运包 | 总线竞争与带宽 |
| 经互连网络 | 用交叉开关等结构连接输入与输出 | 目标端口冲突、结构能力及调度 |
若交换结构或输出端口不能及时服务输入,输入端口也可能排队。交换结构足够快可以减少一些瓶颈,但“达到所有端口速率之和”并不自动消除所有竞争和排队。
队头阻塞(HOL blocking)指队列首包被堵住时,阻挡后面本来可以去其他空闲出口的包。它依队列组织等条件出现。
输出端口如何排队和丢包
来自多个输入的包可能同时要从一个出口出去,瞬时到达工作量大于出口服务能力,就会等待。有限缓冲装不下时可能丢包,设备也可按队列管理策略提前丢弃或标记。
排队不只存在于输出端口;输入端口及主机等处也可能有队列。之前的四类时延模型不能被解释成“每一个外部测到的延迟都在这个输出队列”。
旧稿ping记录:观察与解释分开
旧稿称在Windows 11无线接入时,向局域网网关发送大ping包并观察小ping包。本轮在原始笔记工程阅读了tools/queue-experiment.ps1:它做三阶段ping采样,没有测量实际负载、有效吞吐或设备队列;以下仅保留未重新采集的历史转述:
| 阶段 | 样本数 | 最小 | 平均 | 最大 |
|---|---|---|---|---|
| 空闲 | 10 | 1 ms | 1.4 ms | 2 ms |
| 发大包期间 | 15 | 1 ms | 1.8 ms | 6 ms |
| 结束后 | 10 | 1 ms | 1.6 ms | 2 ms |
若记录准确,能描述这几组样本的RTT变化;不能证明变化一定位于路由器输出队列,也不能证明“尾部一定先恶化”。无线竞争、驱动和主机调度、响应处理、随机波动等尚未控制。
最小值相同也不能证明链路物理条件完全未变。未测可用吞吐量与实际负载时,不知道链路是否被打满,不能把无线协商速率当成实际服务速率。
为什么还要看延迟分布
平均值会把快慢样本合在一起。监控时可以同时观察样本数、平均值和分位数;例如P95描述95%的样本不高于的时延。
这是统计指标的解释,不是上述35个样本验证的普遍排队规律。要研究尾部,需足够样本、可重复负载和明确采样条件;只有一个最大值不等于稳定的P99。
队列里的包按什么顺序出去
调度决定有待发送的包时,先服务哪个队列或包。
| 调度方式 | 基本做法 | 注意事项 |
|---|---|---|
| FIFO | 按到达顺序服务 | 不单独区分业务类别 |
| 优先级 | 优先服务高优先级队列 | 低优先级可能长期得不到服务 |
| 轮询 | 轮流服务队列 | 按包轮询不必然等同按字节公平 |
| 加权公平排队(WFQ) | 按权重分配服务份额 | 时延与服务保证还需流量条件和配置 |
流量分类与调度可以帮助语音等业务,但没有容量与负载等条件,不能保证“只用WFQ就都有低时延”。
缓冲区大不等于体验好
缓冲可以吸收突发流量,但长期拥塞时积累大量数据,会增加排队等待;这种不必要的持续排队常称为缓冲区膨胀(bufferbloat)。
它可能使吞吐量看起来不错却响应很慢,并不保证绝对不丢包。仅看到“高时延、低丢包”也不能唯一定位为bufferbloat,需要进一步观察队列与负载。
本章小结
| 结论 | 范围 |
|---|---|
| 转发与路由选择按本地包处理与路径形成的功能区分 | 不以硬件/CPU绝对划分 |
| 最长前缀匹配有不同算法和硬件实现 | TCAM是常见选择之一 |
| 输入、交换结构与输出共同影响服务能力 | 不代表所有设备结构一致 |
| 输入和输出等位置都可能排队 | 有限队列可能丢包 |
| RTT样本不能唯一定位排队位置或证明因果 | 历史记录未复核 |
| 观察平均与分布有帮助,但分位数需足够样本 | 统计与实验结论分开 |
| 缓冲和调度存在取舍 | 保证要结合实际条件 |
自测题
7 题 · 先自己答,再展开对照
转发与路由选择的区别是硬件和软件的区别吗?
不是。转发处理当前包的本地动作,路由选择形成或更新路径与转发信息;各自可能采用不同软硬件实现。TCAM的“三态”是什么?最长前缀匹配必须用TCAM吗?
0、1和“不关心”。TCAM支持并行匹配,但软件快速查找和其他硬件结构也能实现最长前缀匹配;并非必须TCAM。教材介绍了哪三类交换结构?它们各有什么资源限制?
经内存、经总线、经互连网络,分别受内存搬运能力、共享总线能力、互连结构与出口竞争等限制。需结合教材具体模型,不能给所有现代设计下同一个结论。排队只能发生在路由器输出端口吗?丢包可能怎样发生?
不是,输入、输出及主机等位置都可能有队列。有限缓冲无法容纳新包时可能丢包,策略也可能提前丢弃或标记。旧稿三组ping记录能证明路由器输出队列导致RTT变化吗?
不能。原脚本只采样少量RTT,未控制无线、主机调度、负载等变量,也没有队列观测。变化与某阶段同时出现,不证明发生位置或具体原因。什么是bufferbloat?高时延且低丢包能唯一证明它吗?
持续积累过多队列数据造成不必要排队时延。高时延、低丢包不是唯一诊断证据,还需结合负载与队列观察。优先级、FIFO与WFQ的取舍是什么?WFQ自动保证低时延吗?
FIFO简单但不分业务;优先级可能饿死低优先流;WFQ按权重服务。低时延或资源保证仍需容量、流量约束和配置条件,不能自动成立。
参考资料与适用范围
- 《计算机网络:自顶向下方法(原书第8版)》§4.1.1、§4.2,纸书199–215页(PDF218–234页),尤其§4.2.1的快速查找与TCAM、§4.2.4的输入/输出排队和§4.2.5的调度。
- RFC 1812 §5:IPv4路由器转发功能
- RFC 7567 §1–2:队列管理、排队时延与拥塞
修订核对日期:2026-10-13。原采样脚本已阅读,旧稿ping值是未重新采集的历史观察,设备内部结构与队列状态没有本机证据,脚本未随网站打包。本章不把教材示意架构当作所有产品的统一实现。