转发与路由¶
数据平面与控制平面¶
转发是对每个到达数据报执行的局部动作:查表并送往出接口,属于数据平面。路由是计算、选择和发布路径的过程,属于控制平面。路由协议生成或影响转发表,转发表服务于高速逐包处理。
类比城市交通:导航系统根据全局地图和策略规划道路,相当于路由;每个路口根据路牌让车辆转弯,相当于转发。两者相互依赖,但时间尺度和实现目标不同。
最长前缀匹配¶
假设路由器有下表:
| 目的前缀 | 出接口 |
|---|---|
10.0.0.0/8 |
A |
10.1.0.0/16 |
B |
10.1.2.0/24 |
C |
0.0.0.0/0 |
D |
目的地址 10.1.2.9 同时匹配前三条,但 /24 最具体,因此走 C。10.1.8.9 走 B,10.9.8.7 走 A,其他地址走默认路由 D。
最长前缀匹配允许“大范围走默认路径,局部例外走更具体路径”,是聚合与灵活策略能够共存的关键。实现上需要在高速和表规模间权衡,硬件路由器常使用专门存储和流水线。
路由器转发一个 IPv4 数据报¶
简化步骤:
- 验证首部并读取目的地址。
- 将 TTL 减 1;若为 0,丢弃并可发送 ICMP 超时。
- 更新受影响的 IPv4 首部校验和。
- 执行最长前缀匹配,得到出接口与下一跳。
- 若需要,解析下一跳链路层地址。
- 用出链路的新帧首尾部封装并排队发送。
IPv6 基础首部没有首部校验和,避免每跳因 Hop Limit 改变而重新计算;链路层校验和传输层校验仍承担各自范围的检测。
路由算法的两种基本直觉¶
链路状态¶
每台路由器了解区域拓扑和链路代价,在本地运行最短路径算法。优点是视图较完整、收敛可控;代价是需要传播链路状态并维护拓扑数据库。OSPF、IS-IS 具有这种思想。
距离向量¶
路由器只从邻居得知“到某目的还需多少代价”,再更新自己的估计。它分布式且直观,但故障后可能出现慢收敛和计数到无穷。RIP 是经典例子;BGP 的路径向量还携带自治系统路径和丰富策略,不应简单理解为只找数值最短路。
域内与域间¶
一个组织或运营商管理的路由域称为自治系统。域内路由通常更关注可达性、代价和快速收敛;域间 BGP 还必须表达商业与安全策略,例如更偏好客户路由、避免经过某些网络、限制向邻居发布哪些前缀。
因此互联网路径不一定是地理最短或跳数最少。它是技术可达性、运营关系与策略共同作用的结果。
收敛、环路与多路径¶
拓扑变化后,各路由器不会瞬间同时更新。在收敛期间可能短暂黑洞或环路。TTL/Hop Limit 限制环路寿命,但不能消除丢包。协议通过序号、区域、路径属性、抑制和快速故障检测改善收敛。
若有多条等价路径,路由器可做 ECMP,把不同流散列到不同下一跳。逐包随机分散可能造成严重乱序,因此常以流的字段保持同一流路径稳定。多路径提高容量和容错,却让 traceroute 结果更难解释。
历史演进与软件定义网络¶
传统路由器在设备内同时运行控制协议和转发。软件定义网络把部分控制逻辑集中到控制器,通过标准接口下发规则,便于全局编排和自动化。但集中控制器仍需高可用,并面对状态一致性、规模和失联时的本地行为问题。“逻辑集中”不意味着所有数据都绕经控制器。
自测
路由表已有 0.0.0.0/0,为什么还需要更具体前缀?
默认路由只提供兜底方向。更具体前缀表达直连网络、内部子网或策略例外;最长前缀匹配保证具体规则优先。