# 11. RTR(RPKI to Router Protocol) ## 11.1 目标与文档范围 RTR 用于把 RP/Cache 已完成密码学验证的 RPKI 数据下发给路由器。 本文按以下规范整理: - RFC 6810(RTR v0) - RFC 8210(RTR v1,更新 RFC 6810) - draft-ietf-sidrops-8210bis-25(RTR v2,草案) ## 11.2 协议演进 ### 11.2.1 RFC 6810(v0) - 只定义 Prefix Origin 相关 payload(IPv4/IPv6 Prefix PDU)。 - 主要 PDU:Serial Notify / Serial Query / Reset Query / Cache Response / Prefix / End of Data / Cache Reset / Error Report。 ### 11.2.2 RFC 8210(v1) 在 v0 基础上新增/强化: - 新增 `Router Key PDU`(PDU Type 9,v1 可用,v0 保留)。 - 强化协议版本协商与降级行为。 - `End of Data` 在 v1 中携带 `Refresh/Retry/Expire` 三个计时参数。 ### 11.2.3 Version 2(草案) 在 v1 基础上新增/强化: - 新增 `ASPA PDU`(PDU Type 11,仅 v2)。 - 新增 “Races, Ordering, and Transactions” 章节,要求缓存按规定顺序输出 payload 以降低路由器短暂误判。 - 协议版本提升到 `2`。 - 明确 PDU 最大长度上限为 64k(65535)。 ## 11.3 PDU 与版本矩阵 PDU 类型(按规范注册表): | PDU Type | 名称 | v0 (RFC6810) | v1 (RFC8210) | v2 (8210bis-25) | |---|---|---|---|---| | 0 | Serial Notify | 支持 | 支持 | 支持 | | 1 | Serial Query | 支持 | 支持 | 支持 | | 2 | Reset Query | 支持 | 支持 | 支持 | | 3 | Cache Response | 支持 | 支持 | 支持 | | 4 | IPv4 Prefix | 支持 | 支持 | 支持 | | 6 | IPv6 Prefix | 支持 | 支持 | 支持 | | 7 | End of Data | 支持 | 支持(含计时参数) | 支持 | | 8 | Cache Reset | 支持 | 支持 | 支持 | | 9 | Router Key | 保留 | 支持 | 支持 | | 10 | Error Report | 支持 | 支持 | 支持 | | 11 | ASPA | 保留 | 保留 | 支持 | 通用字段约束: - `Protocol Version`:8-bit。 - `PDU Type`:8-bit。 - `Session ID`:16-bit。 - `Length`:32-bit。 - 保留位(zero/reserved)发送必须为 0,接收时按规范处理。 ## 11.4 关键 PDU 语义 ### 11.4.1 Serial Notify(Type 0) - 由 Cache 主动发送,提示有新序列可拉取。 - 是少数可不由 Router 请求触发的消息。 ### 11.4.2 Reset Query(Type 2)与 Cache Response(Type 3) - Router 启动或失配时发 `Reset Query` 请求全量。 - Cache 回复 `Cache Response`,随后发送全量 payload,最后 `End of Data`。 ### 11.4.3 Serial Query(Type 1) - Router 持有上次 `Session ID + Serial` 时请求增量。 - Cache 若可提供增量:返回变化集。 - Cache 若无法从该 serial 补增量:返回 `Cache Reset`,要求 Router 走全量。 ### 11.4.4 Prefix / Router Key / ASPA payload - `IPv4 Prefix`(Type 4)/ `IPv6 Prefix`(Type 6):表示 VRP 的 announce/withdraw。 - `Router Key`(Type 9,v1+):表示 BGPsec Router Key 的 announce/withdraw。 - `ASPA`(Type 11,v2 草案):表示 ASPA 数据单元的 announce/withdraw。 语义要点(v1 / v2 草案): - 对同一 payload 键(如 Prefix 四元组、Router Key 三元组、ASPA customer 键)应维护清晰的替换/撤销关系。 - Cache 负责把历史变化“合并简化”后再发给 Router,避免无意义抖动。 ### 11.4.5 End of Data(Type 7) - 标识一次响应结束,并给出当前 serial。 - v0:不含定时器字段。 - v1/v2:携带 `Refresh Interval`、`Retry Interval`、`Expire Interval`。 ## 11.5 协议时序 ### 11.5.1 初始同步(Full Sync) 1. Router 建连后发 `Reset Query`(带支持的协议版本)。 2. Cache 回 `Cache Response`。 3. Cache 按规范发送 payload 集合。 4. Cache 发 `End of Data` 收尾。 ### 11.5.2 增量同步(Incremental Sync) 1. Router 发 `Serial Query(session_id, serial)`。 2. Cache 若可增量,返回变化并以 `End of Data` 收尾。 3. 若不可增量,返回 `Cache Reset`;Router 退回 Full Sync。 ## 11.6 版本协商与降级 - Router 每次新连接必须由 `Reset Query` 或 `Serial Query` 启动,携带其协议版本。 - 双方在协商完成后,本连接内版本固定。 - 遇到不支持版本时,可按规范降级(例如 v1 对 v0、v2 对 v1/v0)或返回 `Unsupported Protocol Version` 后断开。 - 协商期若收到 `Serial Notify`,Router 应按规范兼容处理(通常忽略,待协商完成)。 ## 11.7 计时器与失效(v1/v2) `End of Data` 下发三个参数: - `Refresh Interval`:多久后主动刷新。 - `Retry Interval`:失败后重试间隔。 - `Expire Interval`:本地数据最长可保留时长。 规范边界(RFC 8210): - Refresh: 1 .. 86400(推荐 3600) - Retry: 1 .. 7200(推荐 600) - Expire: 600 .. 172800(推荐 7200) - 且 `Expire` 必须大于 `Refresh` 和 `Retry`。 ## 11.8 Version 2(草案)新增关注点 ### 11.8.1 ASPA PDU - 新增 ASPA 传输能力(Type 11)。 - 针对同一 customer ASN,Cache 需向 Router 提供一致且可替换的 ASPA 视图。 ### 11.8.2 排序与事务 - 草案新增 race 条件说明(如前缀替换、撤销先后导致短暂误判)。 - 对 Cache 输出 payload 的顺序提出约束。 - 建议 Router 使用“事务式应用”(例如接收到完整响应后再切换生效)降低中间态影响。 ## 11.9 传输与安全 规范定义可承载于多种传输: - SSH - TLS - TCP MD5 - TCP-AO 安全原则: - Router 与 Cache 之间必须建立可信关系。 - 需要完整性/机密性时优先使用具备认证与加密能力的传输。 - 若使用普通 TCP,部署上应限制在可信受控网络中。 ## 11.10 参考文献 - RFC 6810: https://www.rfc-editor.org/rfc/rfc6810.html - RFC 8210: https://www.rfc-editor.org/rfc/rfc8210.html - draft-ietf-sidrops-8210bis-25: https://www.ietf.org/archive/id/draft-ietf-sidrops-8210bis-25.html