路由协议底层传输之秘:UDP、IP、链路层与TCP的抉择
摘要:本文深入剖析RIP、OSPF、IS-IS和BGP四种主流路由协议的底层传输机制。RIP基于UDP实现极简周期更新,OSPF直接封装在IP层并自建可靠同步,IS-IS原生运行在链路层实现多协议承载,而BGP则完全依赖TCP提供可靠传输。文章从封装层次、可靠性保障和设计意图三个维度对比分析,揭示不同承载方式如何映射到协议的核心设计取舍:轻量封装与可靠传输、组播效率与跨域需求、协议独立性与运维复杂度之间的权衡。理解这些底层传输机制,是洞悉路由协议行为逻辑的关键。
路由协议负责在设备间交换网络可达信息,是构建转发路径的核心。但很少有人深究:这些协议报文到底如何被“投递”出去?它们依赖哪些底层传输服务?为什么有的选UDP,有的直接跑在IP上,有的却必须挂在TCP上?本文从封装层次、可靠性保障和协议设计意图三个维度,深入剖析RIP、OSPF、IS-IS和BGP的传输机制。
1. 四种协议的承载方式总览
| RIP | UDP | v4:520, v6:521 | 无连接,不可靠 |
| OSPF | IP(裸IP) | 协议号 89 | 无连接,不可靠 |
| IS-IS | 链路层(以太网帧) | 组播MAC: 01-80-c2-00-00-14 (L1), 01-80-c2-00-00-15 (L2) | 无连接,不可靠 |
| BGP | TCP | 179 | 面向连接,可靠(确认、重传、窗口) |
核心差异:RIP、OSPF和IS-IS直接构建在无连接、不可靠的底层服务之上,并自行实现所需可靠性;BGP则独享TCP提供的可靠字节流。这一根本差异深刻影响了它们的邻居维护、信息同步与收敛行为。
内部网关协议(IGP)通常运行在直连或少量跳数内,需快速发现邻居、高效扩散链路状态,因此倾向轻量封装并利用组播。而BGP作为外部网关协议,其会话常跨越多个路由器甚至自治系统,必须依赖已有的IP可达性,并要求路由更新绝对可靠,因此TCP成为自然选择。下面逐一展开分析。
2. RIP:UDP承载的极简周期更新
RIP是最经典的距离矢量协议,选用UDP 520(IPv4)和521(IPv6)端口。根本原因在于其极简的设计意图:不需要复杂的会话状态,仅以每30秒为周期,将整张路由表封装在UDP报文中向邻居泛洪。
封装层次
IP头(协议号17) → UDP头(目的端口520) → RIP报文(路由条目与跳数)
特点与局限
- 无确认、无重传,报文丢失只能等待下一周期弥补,收敛缓慢。
- 周期全量通告,即使网络无变化也定时发送全部路由表,带宽浪费明显。
- 最大跳数15,进一步限定了网络规模。
- 邻居失效完全依赖超时计时器,老化机制粗糙。
UDP虽轻,但完全不提供可靠性,使得RIP在现代网络中仅残存于极小规模或实验环境。
3. OSPF:直接跃居IP层,自建可靠同步
OSPF作为链路状态协议的典型代表,选择直接封装在IP报文中,协议号89,既不借道UDP也不依赖TCP。
封装层次
IP头(协议号89) → OSPF头部(区域ID、报文类型等) → 各类LSA
为什么不用UDP/TCP?
- OSPF需要使用组播地址(224.0.0.5 和 224.0.0.6)高效发现邻居和泛洪LSA,叠加UDP头部只会增加无谓开销。
- OSPF自己定义了一套精细的可靠同步机制,不必受TCP拥塞控制和重传策略的束缚,能按需快速重传,支撑亚秒级收敛。
OSPF自建的可靠机制
- 数据库描述(DD)报文:通过序列号和主从协商保证双方数据库描述一致。
- LSR/LSU/LSAck 三次握手:请求-更新-确认,确保每条LSA被可靠安装。
- 邻居状态机:Down → Init → 2-Way → ExStart → Exchange → Loading → Full,精细驱动同步过程。
直接架在IP上,省去了传输层开销,但也意味着OSPF必须自行处理分片、重传和确认——这是为换取组播效率和极速收敛而付出的合理代价。
4. IS-IS:链路层原生的多协议承载
IS-IS走得最为极致,它完全抛开IP头部,直接封装在数据链路层帧中。
封装层次
以太网帧头(目的MAC为组播地址) → IS-IS头部 → 以TLV编码的LSP(链路状态PDU)
组播MAC地址
- Level-1:01-80-c2-00-00-14
- Level-2:01-80-c2-00-00-15
核心特征
- 脱离IP约束:天然支持IPv4、IPv6乃至非IP协议,扩展能力极强。
- 自建可靠机制:
- PSNP(部分序列号PDU)用于对LSP的确认,功能类似ACK。
- 在广播型网络上,DIS周期性发送CSNP(完全序列号PDU),充当链路状态数据库的“目录”,邻居对比序列号后快速请求缺失的LSP。
- 邻居建立和数据库同步过程高度简洁,得益于其与链路层的紧耦合。
IS-IS直接在链路层运行,使其成为唯一不依赖IP即可建立邻居关系的IGP,在纯IPv6部署或双栈过渡期优势格外突出。
5. BGP:锚定TCP 179的可靠传输
BGP是唯一运行在TCP之上的路由协议,目的端口179。这一选择由其独特的运行环境决定:
- EBGP对等体常跨越多跳路由器甚至不同自治系统,必须建立在已有的IP路由之上,TCP提供的端到端可靠传输不可或缺。
- BGP采用增量更新,只发送变化的路由条目(NLRI)。任何更新丢失都可能导致路由黑洞,TCP的确认、重传和滑动窗口机制完美匹配这一需求。
- BGP直接复用TCP的Keepalive机制维持会话存活,无需额外设计保活方案。
代价同样明显:TCP的慢启动和拥塞控制可能在一定程度上延缓收敛;BGP必须使用单播,无法利用组播,因此仅适用于数量有限的对等体之间承载大量策略路由。
6. 可靠性机制对比:殊途同归的同步
| RIP | 无 | 周期性全量刷新,丢失靠下一周期补全 |
| OSPF | 无 | DD序列号协商 + LSR/LSU/LSAck三次握手 |
| IS-IS | 无 | PSNP确认 + CSNP周期性目录同步 |
| BGP | TCP全可靠 | 直接继承TCP的确认重传,另配Keepalive与Hold定时器 |
IP层和链路层本身不保证可靠交付,OSPF和IS-IS必须亲力亲为构造可靠同步机制;BGP坐享TCP提供的可靠流,但牺牲了组播效率和快速故障感知的灵活性。
7. IS-IS的独特优势:一个邻居,一份报文,双栈无忧
在IPv4与IPv6双栈共存网络中,OSPF需分别运行OSPFv2和OSPFv3,邻居关系独立、链路状态数据库分离,运维复杂度翻倍;BGP则须为每个地址族建立独立会话(AFI/SAFI)。而IS-IS凭借“链路层承载 + TLV可扩展架构”,优雅地解决了这个问题:
- 统一邻居:通过IIH(IS-IS Hello)报文建立单一邻居关系,与网络层协议无关。
- 统一LSP:在同一个LSP中,利用不同TLV(如IPv4前缀TLV与236号TLV的IPv6前缀)同时携带双栈可达信息。
- 统一数据库:单一链路状态数据库同时包含IPv4和IPv6拓扑,一次同步,两个地址族同时收敛。
这种设计极大减轻了双栈网络的协议开销与运维压力,是OSPF和BGP难以企及的。正因如此,IS-IS被众多大型ISP和超大规模数据中心选为首选IGP。而IS-IS最令人印象深刻的优势正是:一个邻居、一个数据库、一份LSP,双栈兼收并蓄
总结:承载方式映射设计取舍
- RIP 选择 UDP:源自极简的周期性思想,不追求单次更新的可靠性,适合小型网络。
- OSPF 选择裸 IP:源自对组播和快速响应的需求,自建可靠同步机制换来高效与可控。
- IS-IS 选择链路层:源自彻底脱离IP依赖的独立性,以及TLV赋予的天然多协议扩展能力。
- BGP 选择 TCP:源自跨域多跳和增量更新的严苛可靠性要求,但牺牲了组播与轻量故障检测。
没有哪一种承载方式是万能银弹,场景不同,最适选择也不同。只有理解协议报文在底层如何被封装和传递,才能真正洞悉它们的行为逻辑:为什么OSPF建立邻居要经历多个状态?为什么IS-IS能快速感知链路故障?为什么RIP容易产生环路?——答案,就隐藏在层层封装的设计意图之中。




