5. 路由实现考虑 (Routing Implementation Considerations)
本节讨论与CIDR相关的路由实现的各个方面,包括路由协议要求、转发机制和运营考虑。
5.1. 路由协议支持 (Routing Protocol Support)
CIDR的成功部署需要路由协议能够承载可变长度前缀信息。以下是支持CIDR的主要路由协议:
5.1.1. 外部网关协议 (Exterior Gateway Protocols)
- BGP-4 (Border Gateway Protocol version 4) [RFC4271]: 互联网的主要域间路由协议,完全支持CIDR并能够承载任意长度的前缀。BGP-4的关键特性包括:
- 携带前缀长度信息的能力
- 支持路由聚合
- 灵活的策略控制机制
- 路径属性用于流量工程
5.1.2. 内部网关协议 (Interior Gateway Protocols)
支持CIDR的IGP包括:
- OSPF (Open Shortest Path First) [RFC2328]: 支持可变长度子网掩码 (VLSM) 和路由汇总。
- IS-IS (Intermediate System to Intermediate System) [RFC1195]: 支持VLSM和灵活的路由汇总。
- RIPv2 (Routing Information Protocol version 2) [RFC2453]: 扩展了RIP以支持VLSM和CIDR。
- EIGRP (Enhanced Interior Gateway Routing Protocol): Cisco专有协议,支持VLSM和自动汇总。
5.1.3. 遗留协议限制 (Legacy Protocol Limitations)
不支持CIDR的旧协议包括:
- RIPv1: 仅支持有类路由 (Classful Routing),不能承载子网掩码信息。
- EGP (Exterior Gateway Protocol) [RFC904]: 仅支持有类网络号。
这些遗留协议在现代互联网中已被淘汰或严格限制在不需要CIDR功能的遗留环境中。
5.2. 最长前缀匹配 (Longest Prefix Match)
CIDR要求路由器使用最长前缀匹配 (Longest Prefix Match, LPM) 算法进行转发决策。给定一个目标地址和一组可能匹配的前缀,路由器必须选择具有最多特定位 (即最长前缀长度) 的前缀。
5.2.1. LPM算法 (LPM Algorithms)
各种算法已被开发用于高效实现LPM:
- Trie-based Algorithms: 使用树结构进行快速查找。
- TCAM (Ternary Content Addressable Memory): 硬件实现允许并行匹配。
- Hash-based Algorithms: 用于软件路由器的高效哈希表实现。
5.2.2. LPM示例 (LPM Examples)
考虑以下路由表条目:
10.0.0.0/8 → 接口 A
10.1.0.0/16 → 接口 B
10.1.1.0/24 → 接口 C
192.168.0.0/16 → 接口 D
对于不同的目标地址:
- 10.2.3.4 匹配 10.0.0.0/8 → 转发到接口 A
- 10.1.2.3 匹配 10.0.0.0/8 和 10.1.0.0/16,选择更长的 → 转发到接口 B
- 10.1.1.5 匹配所有三个前缀,选择最长的 10.1.1.0/24 → 转发到接口 C
- 192.168.1.1 匹配 192.168.0.0/16 → 转发到接口 D
5.3. 路由表管理 (Routing Table Management)
CIDR显著影响路由表管理的各个方面:
5.3.1. 内存要求 (Memory Requirements)
- 增加的表大小 (Increased Table Size): 虽然CIDR通过聚合减少了条目数,但路由器必须能够存储可变长度的前缀和相关的掩码。
- 数据结构 (Data Structures): 高效的数据结构 (如Patricia tries或radix trees) 对于管理大型路由表至关重要。
5.3.2. 更新处理 (Update Processing)
- 增量更新 (Incremental Updates): BGP-4允许仅发送已更改的路由,减少了更新流量。
- 路由振荡 (Route Flapping): 频繁的路由更新可能导致不稳定; 路由阻尼 (Route Dampening) 机制可以减轻这种情况。
5.3.3. 查找性能 (Lookup Performance)
- 硬件加速 (Hardware Acceleration): 现代路由器使用专用硬件 (ASIC, TCAM) 以线速执行LPM查找。
- 软件优化 (Software Optimization): 软件路由器使用优化的算法和数据结构来最小化查找时间。
5.4. 默认路由的使用 (Use of Default Routes)
CIDR环境中,默认路由 (0.0.0.0/0) 的使用对于减少边缘路由器的路由表大小至关重要:
- 客户路由器 (Customer Routers): 通常配置指向其ISP的默认路由,而不是接收完整的全局路由表。
- ISP边缘路由器 (ISP Edge Routers): 可能使用部分路由表加默认路由的组合。
- 核心路由器 (Core Routers): 通常需要完整的路由表以进行最佳路径选择。
5.5. 路由聚合的操作问题 (Operational Issues with Route Aggregation)
虽然聚合对于可扩展性至关重要,但它也引入了一些操作挑战:
5.5.1. 黑洞路由 (Black Hole Routing)
当聚合前缀被广告但其某些组件前缀不可达时,可能会发生黑洞路由:
- 问题 (Problem): 流量被转发到广告聚合的路由器,但该路由器无法到达特定的目标。
- 解决方案 (Solution): 广告聚合的路由器必须具有到所有组件前缀的路由,或者必须配置为丢弃无法路由的流量。
5.5.2. 路由泄漏 (Route Leaks)
不正确的聚合或过滤配置可能导致路由泄漏:
- 上行泄漏 (Upward Leak): 将更特定的客户路由泄漏到对等方或上游提供商。
- 下行泄漏 (Downward Leak): 将上游或对等路由泄漏给客户。
5.5.3. 流量工程限制 (Traffic Engineering Limitations)
聚合可能限制流量工程的灵活性:
- 粒度 (Granularity): 高度聚合的前缀提供较少的流量控制粒度。
- 权衡 (Trade-offs): ISP必须在路由表大小和流量工程能力之间取得平衡。
5.6. 路由器配置最佳实践 (Router Configuration Best Practices)
为了支持CIDR并维护可扩展的路由系统,推荐以下配置实践:
5.6.1. 聚合配置 (Aggregation Configuration)
- 在适当的边界配置聚合 (例如,向上游提供商广告的点)。
- 使用静态聚合或BGP聚合功能。
- 确保到所有组件前缀的路由在进行聚合之前存在。
5.6.2. 过滤配置 (Filter Configuration)
- 实施入站和出站前缀过滤器。
- 拒绝超过最大可接受长度的前缀 (例如,/24 用于全局路由)。
- 过滤掉bogon和保留的地址空间。
5.6.3. BGP配置 (BGP Configuration)
- 配置适当的BGP策略以控制路由传播。
- 使用路由映射 (Route Maps) 或策略语言进行细粒度控制。
- 实施路由阻尼以减少路由振荡的影响。
5.6.4. 监控和故障排除 (Monitoring and Troubleshooting)
- 监控路由表大小和增长率。
- 跟踪路由更新频率和聚合效率。
- 使用工具如traceroute和BGP looking glasses进行故障排除。
5.7. IPv4和IPv6共存 (IPv4 and IPv6 Coexistence)
虽然本文档主要关注IPv4 CIDR,但值得注意的是,许多CIDR概念直接应用于IPv6:
- 更大的地址空间 (Larger Address Space): IPv6的128位地址空间允许更灵活的层次结构分配。
- 强制聚合 (Mandatory Aggregation): IPv6分配策略强调聚合以避免IPv4的路由扩展问题。
- 双栈环境 (Dual-Stack Environments): 路由器必须同时管理IPv4和IPv6路由表,每个都有自己的聚合策略。