新增slurm功能
This commit is contained in:
@@ -1,34 +1,23 @@
|
||||
# 10. SLURM(Simplified Local Internet Number Resource Management with the RPKI)
|
||||
# 10. SLURM(Simplified Local Internet Number Resource Management with the RPKI)
|
||||
|
||||
## 10.1 对象定位
|
||||
## 10.1 目标与范围
|
||||
|
||||
SLURM是一个JSON文件,允许 RPKI 依赖方在本地“覆盖/修正/忽略”来自上游RPKI数据的内容,而不需要修改或伪造原始RPKI对象。
|
||||
SLURM 用于让 RP(Relying Party)在本地对上游 RPKI 验证结果做“过滤”和“补充断言”,而不修改上游发布对象。
|
||||
|
||||
## 10.2 数据格式 (RFC 8416 §3)
|
||||
本文档基于:
|
||||
- RFC 8416(SLURM v1,ROA/BGPsec)
|
||||
- draft-ietf-sidrops-aspa-slurm-04(SLURM v2,新增 ASPA)
|
||||
|
||||
### SLURM
|
||||
## 10.2 版本与顶层结构
|
||||
|
||||
SLURM是一个只包含一个JSON对象的文件。格式要求如下(RFC 8416 §3.2):
|
||||
### 10.2.1 SLURM v1(RFC 8416)
|
||||
|
||||
```text
|
||||
A SLURM file consists of a single JSON object containing the
|
||||
following members:
|
||||
o A "slurmVersion" member that MUST be set to 1, encoded as a number
|
||||
o A "validationOutputFilters" member (Section 3.3), whose value is
|
||||
an object. The object MUST contain exactly two members:
|
||||
* A "prefixFilters" member, whose value is described in
|
||||
Section 3.3.1.
|
||||
* A "bgpsecFilters" member, whose value is described in
|
||||
Section 3.3.2.
|
||||
o A "locallyAddedAssertions" member (Section 3.4), whose value is an
|
||||
object. The object MUST contain exactly two members:
|
||||
* A "prefixAssertions" member, whose value is described in
|
||||
Section 3.4.1.
|
||||
* A "bgpsecAssertions" member, whose value is described in
|
||||
Section 3.4.2.
|
||||
```
|
||||
`slurmVersion` 必须为 `1`,且顶层 JSON 对象必须包含且仅包含以下成员:
|
||||
- `slurmVersion`
|
||||
- `validationOutputFilters`(必须包含 `prefixFilters`、`bgpsecFilters`)
|
||||
- `locallyAddedAssertions`(必须包含 `prefixAssertions`、`bgpsecAssertions`)
|
||||
|
||||
一个空的SLURM json结构体如下:
|
||||
空策略示例:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -44,193 +33,154 @@ following members:
|
||||
}
|
||||
```
|
||||
|
||||
### prefixFilters
|
||||
其中`prefixFilters`格式要求如下(RFC 8416 §3.3.1):
|
||||
### 10.2.2 SLURM v2(draft-04)
|
||||
|
||||
`slurmVersion` 必须为 `2`,在 v1 基础上扩展 ASPA 两类成员:
|
||||
- `validationOutputFilters.aspaFilters`
|
||||
- `locallyAddedAssertions.aspaAssertions`
|
||||
|
||||
空策略示例:
|
||||
|
||||
```text
|
||||
The above is expressed as a value of the "prefixFilters" member, as
|
||||
an array of zero or more objects. Each object MUST contain either 1)
|
||||
one of the following members or 2) one of each of the following
|
||||
members.
|
||||
o A "prefix" member, whose value is a string representing either an
|
||||
IPv4 prefix (see Section 3.1 of [RFC4632]) or an IPv6 prefix (see
|
||||
[RFC5952]).
|
||||
o An "asn" member, whose value is a number.
|
||||
In addition, each object MAY contain one optional "comment" member,
|
||||
whose value is a string.
|
||||
```
|
||||
示例:
|
||||
```json
|
||||
"prefixFilters": [
|
||||
{
|
||||
"prefix": "192.0.2.0/24",
|
||||
"comment": "All VRPs encompassed by prefix"
|
||||
},
|
||||
{
|
||||
"asn": 64496,
|
||||
"comment": "All VRPs matching ASN"
|
||||
},
|
||||
{
|
||||
"prefix": "198.51.100.0/24",
|
||||
"asn": 64497,
|
||||
"comment": "All VRPs encompassed by prefix, matching ASN"
|
||||
{
|
||||
"slurmVersion": 2,
|
||||
"validationOutputFilters": {
|
||||
"prefixFilters": [],
|
||||
"bgpsecFilters": [],
|
||||
"aspaFilters": []
|
||||
},
|
||||
"locallyAddedAssertions": {
|
||||
"prefixAssertions": [],
|
||||
"bgpsecAssertions": [],
|
||||
"aspaAssertions": []
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### bgpsecFilters
|
||||
`bgpsecFilters`格式要求如下(RFC 8416 §3.3.2)
|
||||
## 10.3 字段规范(RFC 8416)
|
||||
|
||||
```text
|
||||
The above is expressed as a value of the "bgpsecFilters" member, as
|
||||
an array of zero or more objects. Each object MUST contain one of
|
||||
either, or one each of both following members:
|
||||
o An "asn" member, whose value is a number
|
||||
o An "SKI" member, whose value is the Base64 encoding without
|
||||
trailing ’=’ (Section 5 of [RFC4648]) of the certificate’s Subject
|
||||
Key Identifier as described in Section 4.8.2 of [RFC6487]. (This
|
||||
is the value of the ASN.1 OCTET STRING without the ASN.1 tag or
|
||||
length fields.)
|
||||
In addition, each object MAY contain one optional "comment" member,
|
||||
whose value is a string.
|
||||
```
|
||||
### 10.3.1 `prefixFilters`
|
||||
|
||||
数组元素每项:
|
||||
- 必须至少包含一个:`prefix` 或 `asn`
|
||||
- 可选:`comment`
|
||||
|
||||
匹配规则:
|
||||
- 若配置了 `prefix`:匹配“被该前缀覆盖(encompassed)”的 VRP 前缀
|
||||
- 若配置了 `asn`:匹配该 ASN
|
||||
- 同时配置时:两者都要匹配
|
||||
|
||||
### 10.3.2 `bgpsecFilters`
|
||||
|
||||
数组元素每项:
|
||||
- 必须至少包含一个:`asn` 或 `SKI`
|
||||
- 可选:`comment`
|
||||
|
||||
匹配规则:
|
||||
- 按 `asn`/`SKI` 单独或联合匹配 Router Key(BGPsec)
|
||||
|
||||
### 10.3.3 `prefixAssertions`
|
||||
|
||||
数组元素每项:
|
||||
- 必须:`prefix`、`asn`
|
||||
- 可选:`maxPrefixLength`、`comment`
|
||||
|
||||
约束:
|
||||
- 若给出 `maxPrefixLength`,应满足 `prefix 长度 <= maxPrefixLength <= 地址位宽(IPv4=32, IPv6=128)`
|
||||
|
||||
### 10.3.4 `bgpsecAssertions`
|
||||
|
||||
数组元素每项:
|
||||
- 必须:`asn`、`SKI`、`routerPublicKey`
|
||||
- 可选:`comment`
|
||||
|
||||
## 10.4 ASPA 扩展(draft-ietf-sidrops-aspa-slurm-04)
|
||||
|
||||
### 10.4.1 `aspaFilters`
|
||||
|
||||
数组元素每项:
|
||||
- 必须:`customerAsn`
|
||||
- 可选:`comment`
|
||||
|
||||
匹配规则:
|
||||
- 当 VAP(Validated ASPA Payload)的 `customerAsn` 等于过滤器 `customerAsn` 时命中并移除。
|
||||
|
||||
### 10.4.2 `aspaAssertions`
|
||||
|
||||
数组元素每项:
|
||||
- 必须:`customerAsn`
|
||||
- 必须:`providerAsns`(ASN 数组)
|
||||
- 可选:`comment`
|
||||
|
||||
关键约束(draft-04):
|
||||
- `customerAsn` 不得出现在 `providerAsns` 中
|
||||
- `providerAsns` 必须按升序排列
|
||||
- `providerAsns` 里的 ASN 必须唯一(无重复)
|
||||
|
||||
语义补充(draft-04):
|
||||
- `aspaAssertions` 仅用于“新增断言”,不构成隐式过滤(不会自动替代 `aspaFilters`)。
|
||||
- 在 RTRv2 输出阶段,新增的 ASPA 断言应加入 ASPA PDU 集合,并做去重。
|
||||
|
||||
## 10.5 应用语义(RFC 8416 Section 4)
|
||||
|
||||
### 10.5.1 原子性
|
||||
|
||||
SLURM 应用必须是原子的:
|
||||
- 要么完全不生效(等同未使用 SLURM)
|
||||
- 要么完整按当前 SLURM 配置生效
|
||||
|
||||
### 10.5.2 处理顺序
|
||||
|
||||
在同一次计算中:
|
||||
1. 先执行 `validationOutputFilters`(移除匹配验证结果)
|
||||
2. 再追加 `locallyAddedAssertions`
|
||||
|
||||
### 10.5.3 多文件
|
||||
|
||||
实现可以支持多个 SLURM 文件并行使用(取并集),但在启用前应检查断言重叠冲突;若存在冲突,整组文件应被拒绝。
|
||||
|
||||
## 10.6 最小可用示例(SLURM v2)
|
||||
|
||||
示例:
|
||||
```json
|
||||
"bgpsecFilters": [
|
||||
{
|
||||
"asn": 64496,
|
||||
"comment": "All keys for ASN"
|
||||
},
|
||||
{
|
||||
"SKI": "<Base 64 of some SKI>",
|
||||
"comment": "Key matching Router SKI"
|
||||
},
|
||||
{
|
||||
"asn": 64497,
|
||||
"SKI": "<Base 64 of some SKI>",
|
||||
"comment": "Key for ASN 64497 matching Router SKI"
|
||||
}
|
||||
]
|
||||
{
|
||||
"slurmVersion": 2,
|
||||
"validationOutputFilters": {
|
||||
"prefixFilters": [
|
||||
{
|
||||
"prefix": "203.0.113.0/24",
|
||||
"comment": "Filter a broken VRP from upstream"
|
||||
}
|
||||
],
|
||||
"bgpsecFilters": [],
|
||||
"aspaFilters": [
|
||||
{
|
||||
"customerAsn": 64496,
|
||||
"comment": "Filter one customer ASPA"
|
||||
}
|
||||
]
|
||||
},
|
||||
"locallyAddedAssertions": {
|
||||
"prefixAssertions": [
|
||||
{
|
||||
"asn": 64496,
|
||||
"prefix": "203.0.113.0/24",
|
||||
"maxPrefixLength": 24,
|
||||
"comment": "Local business exception"
|
||||
}
|
||||
],
|
||||
"bgpsecAssertions": [],
|
||||
"aspaAssertions": [
|
||||
{
|
||||
"customerAsn": 64496,
|
||||
"providerAsns": [64497, 64498],
|
||||
"comment": "Local ASPA assertion"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### prefixAssertions
|
||||
`prefixAssertions`格式要求如下(RFC 8416 §3.4.1)
|
||||
```text
|
||||
The above is expressed as a value of the "prefixAssertions" member,
|
||||
as an array of zero or more objects. Each object MUST contain one of
|
||||
each of the following members:
|
||||
o A "prefix" member, whose value is a string representing either an
|
||||
IPv4 prefix (see Section 3.1 of [RFC4632]) or an IPv6 prefix (see
|
||||
[RFC5952]).
|
||||
o An "asn" member, whose value is a number.
|
||||
In addition, each object MAY contain one of each of the following
|
||||
members:
|
||||
o A "maxPrefixLength" member, whose value is a number.
|
||||
o A "comment" member, whose value is a string.
|
||||
```
|
||||
|
||||
示例:
|
||||
```json
|
||||
"prefixAssertions": [
|
||||
{
|
||||
"asn": 64496,
|
||||
"prefix": "198.51.100.0/24",
|
||||
"comment": "My other important route"
|
||||
},
|
||||
{
|
||||
"asn": 64496,
|
||||
"prefix": "2001:DB8::/32",
|
||||
"maxPrefixLength": 48,
|
||||
"comment": "My other important de-aggregated routes"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### bgpsecAssertions
|
||||
`bgpsecAssertions`格式要求如下(RFC 8416 §3.4.2)
|
||||
```text
|
||||
The above is expressed as a value of the "bgpsecAssertions" member,
|
||||
as an array of zero or more objects. Each object MUST contain one
|
||||
each of all of the following members:
|
||||
o An "asn" member, whose value is a number.
|
||||
o An "SKI" member, whose value is the Base64 encoding without
|
||||
trailing ’=’ (Section 5 of [RFC4648]) of the certificate’s Subject
|
||||
Key Identifier as described in Section 4.8.2 of [RFC6487] (This is
|
||||
the value of the ASN.1 OCTET STRING without the ASN.1 tag or
|
||||
length fields.)
|
||||
o A "routerPublicKey" member, whose value is the Base64 encoding
|
||||
without trailing ’=’ (Section 5 of [RFC4648]) of the equivalent to
|
||||
the subjectPublicKeyInfo value of the router certificate’s public
|
||||
key, as described in [RFC8208]. This is the full ASN.1 DER
|
||||
encoding of the subjectPublicKeyInfo, including the ASN.1 tag and
|
||||
length values of the subjectPublicKeyInfo SEQUENCE.
|
||||
```
|
||||
示例:
|
||||
```json
|
||||
"bgpsecAssertions": [
|
||||
{
|
||||
"asn": 64496,
|
||||
"SKI": "<some base64 SKI>",
|
||||
"routerPublicKey": "<some base64 public key>",
|
||||
"comment": "My known key for my important ASN"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
## 10.3 抽象数据结构
|
||||
|
||||
### SLURM
|
||||
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|
||||
|---------------------------|------------------------|---------|---------|---------------|
|
||||
| slurm_version | number | SLURM版本 | 版本必须为1 | RFC 8416 §3.2 |
|
||||
| validation_output_filters | ValidationOutputFilter | 过滤条件 | | |
|
||||
| locally_added_assertions | LocallyAddedAssertions | 本地添加断言 | | |
|
||||
|
||||
### ValidationOutputFilter
|
||||
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|
||||
|----------------|-------------------|-----------|---------|---------------|
|
||||
| prefix_filters | Vec<PrefixFilter> | 前缀过滤 | 可以为空数组 | RFC 8416 §3.3 |
|
||||
| bgpsec_filters | Vec<BgpsecFilter> | BGPsec过滤 | 可以为空数组 | RFC 8416 §3.3 |
|
||||
|
||||
### LocallyAddedAssertions
|
||||
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|
||||
|-------------------|----------------------|-----------|---------|---------------|
|
||||
| prefix_assertions | Vec<PrefixAssertion> | 前缀断言 | 可以为空数组 | RFC 8416 §3.4 |
|
||||
| bgpsec_assertions | Vec<BgpsecAssertion> | BGPsec断言 | 可以为空数组 | RFC 8416 §3.4 |
|
||||
|
||||
### PrefixFilter
|
||||
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|
||||
|---------|--------|------|--------------------------------|-----------------|
|
||||
| prefix | string | 前缀 | IPv4前缀或IPv6前缀,prefix和asn至少存在一个 | RFC 8416 §3.3.1 |
|
||||
| asn | number | ASN | prefix和asn至少存在一个 | RFC 8416 §3.3.1 |
|
||||
| comment | string | 备注说明 | 可选字段 | RFC 8416 §3.3.1 |
|
||||
|
||||
### BgpsecFilter
|
||||
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|
||||
|---------|--------|------|------------------|------------------|
|
||||
| asn | number | ASN | prefix和asn至少存在一个 | RFC 8416 §3.3.1 |
|
||||
| ski | u8 | | 证书的SKI | RFC 8416 §3.3.1 |
|
||||
| comment | string | 备注说明 | 可选字段 | RFC 8416 §3.3.1 |
|
||||
|
||||
### PrefixAssertion
|
||||
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|
||||
|-------------------|--------|--------|---------------|-----------------|
|
||||
| prefix | string | 前缀 | IPv4前缀或IPv6前缀 | RFC 8416 §3.4.1 |
|
||||
| asn | number | ASN | | RFC 8416 §3.4.1 |
|
||||
| max_prefix_length | number | 最大前缀长度 | 可选字段 | RFC 8416 §3.4.1 |
|
||||
| comment | string | 备注说明 | 可选字段 | RFC 8416 §3.4.1 |
|
||||
|
||||
|
||||
### BgpsecAssertion
|
||||
| 字段 | 类型 | 语义 | 约束/解析规则 | RFC 引用 |
|
||||
|-------------------|--------|--------|------------------|-----------------|
|
||||
| asn | number | ASN | prefix和asn至少存在一个 | RFC 8416 §3.4.2 |
|
||||
| ski | u8 | | 证书的SKI | RFC 8416 §3.4.2 |
|
||||
| router_public_key | u8 | 证书的SKI | | RFC 8416 §3.4.2 |
|
||||
| comment | string | 备注说明 | 可选字段 | RFC 8416 §3.4.2 |
|
||||
|
||||
> 注:BGPsec部分可以在第一版考虑先留空
|
||||
|
||||
## 10.4 规则
|
||||
## 10.7 参考文献
|
||||
|
||||
- RFC 8416: https://www.rfc-editor.org/rfc/rfc8416.html
|
||||
- draft-ietf-sidrops-aspa-slurm-04: https://www.ietf.org/archive/id/draft-ietf-sidrops-aspa-slurm-04.html
|
||||
|
||||
195
specs/11_rtr.md
195
specs/11_rtr.md
@@ -1,65 +1,158 @@
|
||||
# 11. RTR (The Resource Public Key Infrastructure (RPKI) to Router Protocol)
|
||||
# 11. RTR(RPKI to Router Protocol)
|
||||
|
||||
## 11.1 Cache Server
|
||||
## 11.1 目标与文档范围
|
||||
|
||||
### 11.1.1 功能需求
|
||||
RTR 用于把 RP/Cache 已完成密码学验证的 RPKI 数据下发给路由器。
|
||||
|
||||
- 支持Full Sync(Reset Query)
|
||||
- 支持Incremental Sync(Serial Query)
|
||||
- 支持多客户端并发
|
||||
- 支持Serial递增
|
||||
- 保留一定数量的delta
|
||||
- 支持原子更新
|
||||
本文按以下规范整理:
|
||||
- RFC 6810(RTR v0)
|
||||
- RFC 8210(RTR v1,更新 RFC 6810)
|
||||
- draft-ietf-sidrops-8210bis-25(RTR v2,草案)
|
||||
|
||||
### 11.1.2 架构设计
|
||||
采用一级缓存+二级缓存并存的方式。
|
||||
## 11.2 协议演进
|
||||
|
||||

|
||||
### 11.2.1 RFC 6810(v0)
|
||||
|
||||
其中,一级缓存为运行时缓存,主要职责:
|
||||
- 存储当前完整的snapshot
|
||||
- 历史Delta队列管理
|
||||
- Serial管理
|
||||
- RTR查询响应
|
||||
- 只定义 Prefix Origin 相关 payload(IPv4/IPv6 Prefix PDU)。
|
||||
- 主要 PDU:Serial Notify / Serial Query / Reset Query / Cache Response / Prefix / End of Data / Cache Reset / Error Report。
|
||||
|
||||
二级缓存为持久化缓存,主要职责:
|
||||
- snapshot持久化
|
||||
- 缓存重启后的快速恢复(snapshot和serial)
|
||||
- 不参与实时查询
|
||||
- 异步写入
|
||||
### 11.2.2 RFC 8210(v1)
|
||||
|
||||
### 11.1.3 核心数据结构设计
|
||||
在 v0 基础上新增/强化:
|
||||
- 新增 `Router Key PDU`(PDU Type 9,v1 可用,v0 保留)。
|
||||
- 强化协议版本协商与降级行为。
|
||||
- `End of Data` 在 v1 中携带 `Refresh/Retry/Expire` 三个计时参数。
|
||||
|
||||
#### 11.1.3.1 总cache
|
||||
```rust
|
||||
struct RtrCache {
|
||||
serial: AtomicU32,
|
||||
snapshot: ArcSwap<Snapshot>,
|
||||
deltas: RwLock<VecDeque<Arc<Delta>>>,
|
||||
max_delta: usize,
|
||||
}
|
||||
```
|
||||
### 11.2.3 Version 2(草案)
|
||||
|
||||
#### 11.1.3.2 Snapshot
|
||||
```rust
|
||||
struct Snapshot {
|
||||
origins: Vec<RouteOrigin>,
|
||||
router_keys: Vec<RouterKey>,
|
||||
aspas: Vec<Aspa>,
|
||||
created_at: Instant,
|
||||
}
|
||||
```
|
||||
在 v1 基础上新增/强化:
|
||||
- 新增 `ASPA PDU`(PDU Type 11,仅 v2)。
|
||||
- 新增 “Races, Ordering, and Transactions” 章节,要求缓存按规定顺序输出 payload 以降低路由器短暂误判。
|
||||
- 协议版本提升到 `2`。
|
||||
- 明确 PDU 最大长度上限为 64k(65535)。
|
||||
|
||||
#### 11.1.3.3 Delta
|
||||
```rust
|
||||
struct Delta {
|
||||
serial: u32,
|
||||
announced: Vec<Payload>,
|
||||
withdrawn: Vec<Payload>,
|
||||
}
|
||||
```
|
||||
## 11.3 PDU 与版本矩阵
|
||||
|
||||
PDU 类型(按规范注册表):
|
||||
|
||||
## 11.2 Transport
|
||||
| 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 | 保留 | 保留 | 支持 |
|
||||
|
||||
初版实现RTR over TLS(可外网)和RTR over TCP(内网)两种方式。
|
||||
通用字段约束:
|
||||
- `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
|
||||
|
||||
Reference in New Issue
Block a user