← 网络基础学习第 28 / 55 章进阶40 分钟

模块三 · 网络层:数据平面

路由器内部工作原理

一个包进入路由器后,怎样找到出口、移到出口并等待发送?先理解设备中的几个环节,再讨论实现方法和排队。

本章要解决的问题:一个包进入路由器后,怎样找到出口、移到出口并等待发送?先理解设备中的几个环节,再讨论实现方法和排队。

本章的证据来源:教材§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采样,没有测量实际负载、有效吞吐或设备队列;以下仅保留未重新采集的历史转述:

阶段样本数最小平均最大
空闲101 ms1.4 ms2 ms
发大包期间151 ms1.8 ms6 ms
结束后101 ms1.6 ms2 ms

若记录准确,能描述这几组样本的RTT变化;不能证明变化一定位于路由器输出队列,也不能证明“尾部一定先恶化”。无线竞争、驱动和主机调度、响应处理、随机波动等尚未控制。

最小值相同也不能证明链路物理条件完全未变。未测可用吞吐量与实际负载时,不知道链路是否被打满,不能把无线协商速率当成实际服务速率。

为什么还要看延迟分布

平均值会把快慢样本合在一起。监控时可以同时观察样本数、平均值和分位数;例如P95描述95%的样本不高于的时延。

这是统计指标的解释,不是上述35个样本验证的普遍排队规律。要研究尾部,需足够样本、可重复负载和明确采样条件;只有一个最大值不等于稳定的P99。

队列里的包按什么顺序出去

调度决定有待发送的包时,先服务哪个队列或包。

调度方式基本做法注意事项
FIFO按到达顺序服务不单独区分业务类别
优先级优先服务高优先级队列低优先级可能长期得不到服务
轮询轮流服务队列按包轮询不必然等同按字节公平
加权公平排队(WFQ)按权重分配服务份额时延与服务保证还需流量条件和配置

流量分类与调度可以帮助语音等业务,但没有容量与负载等条件,不能保证“只用WFQ就都有低时延”。

缓冲区大不等于体验好

缓冲可以吸收突发流量,但长期拥塞时积累大量数据,会增加排队等待;这种不必要的持续排队常称为缓冲区膨胀(bufferbloat)。

它可能使吞吐量看起来不错却响应很慢,并不保证绝对不丢包。仅看到“高时延、低丢包”也不能唯一定位为bufferbloat,需要进一步观察队列与负载。

本章小结

结论范围
转发与路由选择按本地包处理与路径形成的功能区分不以硬件/CPU绝对划分
最长前缀匹配有不同算法和硬件实现TCAM是常见选择之一
输入、交换结构与输出共同影响服务能力不代表所有设备结构一致
输入和输出等位置都可能排队有限队列可能丢包
RTT样本不能唯一定位排队位置或证明因果历史记录未复核
观察平均与分布有帮助,但分位数需足够样本统计与实验结论分开
缓冲和调度存在取舍保证要结合实际条件

自测题

7 题 · 先自己答,再展开对照

  1. 转发与路由选择的区别是硬件和软件的区别吗?
    不是。转发处理当前包的本地动作,路由选择形成或更新路径与转发信息;各自可能采用不同软硬件实现。
  2. TCAM的“三态”是什么?最长前缀匹配必须用TCAM吗?
    0、1和“不关心”。TCAM支持并行匹配,但软件快速查找和其他硬件结构也能实现最长前缀匹配;并非必须TCAM。
  3. 教材介绍了哪三类交换结构?它们各有什么资源限制?
    经内存、经总线、经互连网络,分别受内存搬运能力、共享总线能力、互连结构与出口竞争等限制。需结合教材具体模型,不能给所有现代设计下同一个结论。
  4. 排队只能发生在路由器输出端口吗?丢包可能怎样发生?
    不是,输入、输出及主机等位置都可能有队列。有限缓冲无法容纳新包时可能丢包,策略也可能提前丢弃或标记。
  5. 旧稿三组ping记录能证明路由器输出队列导致RTT变化吗?
    不能。原脚本只采样少量RTT,未控制无线、主机调度、负载等变量,也没有队列观测。变化与某阶段同时出现,不证明发生位置或具体原因。
  6. 什么是bufferbloat?高时延且低丢包能唯一证明它吗?
    持续积累过多队列数据造成不必要排队时延。高时延、低丢包不是唯一诊断证据,还需结合负载与队列观察。
  7. 优先级、FIFO与WFQ的取舍是什么?WFQ自动保证低时延吗?
    FIFO简单但不分业务;优先级可能饿死低优先流;WFQ按权重服务。低时延或资源保证仍需容量、流量约束和配置条件,不能自动成立。

参考资料与适用范围

修订核对日期:2026-10-13。原采样脚本已阅读,旧稿ping值是未重新采集的历史观察,设备内部结构与队列状态没有本机证据,脚本未随网站打包。本章不把教材示意架构当作所有产品的统一实现。

正文源自 m3-05-路由器内部工作原理.md · 共 10 节 · 7 道自测题