Geneve 把内层协议数据装进 UDP。固定头 8 字节,选项长度写在 Opt Len,按 4 字节计,不含这 8 字节。版本不是 0 时,端点必须丢掉。目的端口默认 6081。规范是 2020 年 11 月的 RFC 8926。这份头本身不加密。
固定的 8 字节里,长度只数选项
一个可独立引用的定义句:Geneve 头由 8 字节固定部分和零个或多个选项组成。Opt Len 是 6 位,表示选项字段的长度,以 4 字节的倍数计,不含固定头。因此整个 Geneve 头最短 8 字节,最长 260 字节(RFC 8926 第 3.4 节)。
6 位的最大值是 63。63 乘 4 再加 8,等于原文写的 260。原文没有把 63 印出来。载荷从固定头末尾再跳过这个偏移开始。
| 字段 | 宽度 | 发送与接收 |
|---|---|---|
| Ver | 2 位 | 当前版本是 0。端点收到未知版本必须丢掉 |
| Opt Len | 6 位 | 选项总长,4 字节为单位,不含固定的 8 字节 |
| O | 1 位 | 控制报文。端点不得转发其载荷 |
| C | 1 位 | 有关键选项。不支持解析选项的端点必须据此丢掉 |
| Rsvd. | 6 位 | 发送必须为 0,收到必须忽略 |
| Protocol Type | 16 位 | 内层协议数据的类型。以太网是 0x6558 |
| VNI | 24 位 | 虚拟网络里的一个元素。转发语义由控制平面定义 |
| Reserved | 8 位 | 发送必须为 0,收到时忽略 |
关键词只在全大写时按 BCP 14 解释。上表里的「必须」对应第 3.4 节的大写 MUST。8 位 Reserved 的「收到时忽略」在原文没有再写一个 MUST。中转设备遇到未知版本时,必须把它当成载荷未知的 UDP 来处理,而不是按端点的规则丢掉。中转设备必须不管 Opt Len 取什么值,都保持一致的转发,包括等价多路径怎么选。中转设备不得因为 C 位丢掉包,也不得因为 O 位改变转发。这份控制报文的载荷,中转设备不得尝试解释。
VNI 可以被用于等价多路径的转发决定,也可以用来区分被封装包里重叠的地址空间。这是 MAY。等价多路径 能稳定使用的,仍是它看得到的外层头。VNI 在 UDP 载荷里。某一台路由器会不会读它,本文没有测量。
关键位在选项类型的最高位
一个可独立引用的定义句:每个选项有 4 字节头:16 位类、8 位类型、3 位保留、5 位长度。类型的最高位是关键位。接收端点不认识这个选项且该位为 1 时,必须丢掉。任一选项置了这一位,固定头里的 C 位也必须置 1(RFC 8926 第 3.5 节)。
长度以 4 字节为单位,不含这 4 字节选项头。长度为 0 表示只有选项头、没有选项数据。原文用小写 may 写出,每项总长可以在 4 到 128 字节之间。5 位的最大值是 31,31 乘 4 再加 4,等于 128。原文没有把 31 印出来。所有选项的总长如果不等于 Opt Len,这个包无效;处理选项的隧道端点收到时必须静默丢掉。句子里的条件是「处理选项的端点」,不是每一个收到包的设备。
3 位保留在发送时必须为 0,收到时必须忽略。中转设备不得因为类型里的关键位丢掉包。
第 2.2.1 节还有一句小写 must:隧道端点要能解析变长头,包括任何选项。第 3.4 节则用大写规定,不支持选项解析的端点,在 C 位为 1 时必须丢掉;C 位为 0 时,端点可以用 Opt Len 剥掉全部选项,再转发解封装后的包,这是 MAY。两句不要合成「每个端点都会解析选项」。
选项只能由隧道端点生成和终结。中转设备不得修改 Geneve 头,不得插入或删除选项;选项的内容和顺序也不得被中转设备修改。中转设备可以解释选项,但第 2.2.1 节把这种参与写成 OPTIONAL。不解释 Geneve 头的中转设备,必须把这些包当成其他 UDP 包,并保持一致的转发。
类的取值由 IANA 的 Geneve Option Class 登记分配。2026 年 10 月 19 日没有逐项核对该登记里已经分出的类。控制平面如何挑选选项,原文写明不在这份规范里。
6081 是目的端口,两端不对调
一个可独立引用的定义句:IANA 把 UDP 6081 分配为 Geneve 固定的众所周知目的端口。这个众所周知的值应当默认使用;规范用大写建议实现把它做成可配置。选定的端口用来识别 Geneve,不得像 TCP 那样在一条连接的两端对调(RFC 8926 第 3.3 节)。
「应当默认使用」在原文是小写 should。「做成可配置」是 RECOMMENDED。控制平面如何通知改后的端口,不在这份规范里。
2026 年 10 月 19 日检索 IANA 服务名与端口登记。摘录里 UDP 6081 的服务名是 geneve,参考为 RFC 8926,修改日期显示为 2020-05-04;TCP 6081 显示为 Reserved。这是登记表的摘录,不是对整页历史的审计。
源端口由发起的隧道端点选择。属于同一条被封装流的包,源端口应当相同,以免换路造成重排。为了在多条链路上分散,源端口应当用来自被封装包头部的散列,例子是传统五元组。因为它表示的是流,不是真正的 UDP 连接,整个 16 位范围都可以使用,这是 MAY。IPv6 还可以另外用流标签提供熵,原文指向 RFC 6438。2026 年 10 月 19 日没有重读 RFC 6438。
VXLAN 一文写的是另一份封装:固定 8 字节、24 位 VNI、目的端口应当默认 4789,并且没有选项长度。那篇依据的 RFC 7348 是 Informational。2026 年 10 月 19 日没有重读 RFC 7348,因此下表右侧只重复那篇文章已经写出的字段,不把两份规范合成一份。
| Geneve,本文重读的 RFC 8926 | VXLAN 一文已经写出的点 | |
|---|---|---|
| 头长 | 固定 8 字节,选项可把总长加到 260 | 8 字节,没有 Opt Len |
| 网络标识 | 24 位 VNI。控制平面定义解封装后怎么转发 | 24 位 VNI,I 位必须为 1 |
| 内层是什么 | 协议类型指出。以太网为 0x6558 | 内层以太网帧 |
| 目的端口 | 默认 6081,不得对调 | 应当默认 4789 |
| 这份头是否加密 | 第 6 节写没有内建安全机制 | 该文写 RFC 7348 没有定义加密 |
同日的 RFC 元数据把状态标成 Proposed Standard,没有把它标成已被取代,也没有列出它取代了哪一份 RFC。页首分类行是 Standards Track。同日检索 勘误页,没有列出勘误条目。
校验和默认要算,加密不在这 8 字节里
IPv4 上,为了保护 Geneve 头、选项和载荷,UDP 校验和应当按第 3.3 节指向的 RFC 768 和 RFC 1122 生成。IPv6 上,为了把 IP 头也保护进去,默认必须生成;例外写在紧接着的那一段。收到非零校验和时,隧道端点必须核验;不正确必须丢掉,否则必须接受并解封装。2026 年 10 月 19 日没有重读这一句所引的 RFC 1122 和 RFC 8200。
第 4.3 节允许在额外条件下把校验和设为 0。IPv4 上应当使用校验和;运营者可以关掉,若完整性已由 IPsec 或其他校验和提供,或者满足第 4.3.1 节的条件 a、b、c 之一。IPv6 上默认必须使用。端点可以配置成 0,但第 4.3.1 节要求处在它所定义的流量受管受控环境,并满足 a、b、c 之一,然后还要满足该节第 1 到第 5 条。其中第 2 条写明:若仍用 0,实现必须满足 RFC 6936 第 4 节的全部要求,以及第 5 节里与 Geneve 相关的第 1 条。端口级的零校验和规则见 UDP 校验和。同日没有重读 RFC 6936,因此不把那两条的原文在这里重写一遍。
第 4.2 节:Geneve 自己不提供拥塞控制,依赖载荷里的流量。因此必须与已受拥塞控制的流量一起使用,或者用在该节所指的流量受管受控环境里,以免造成拥塞。某一条路径算不算这种环境,本文不判断。
第 6 节写明:它封装在 UDP/IP 里,没有任何内建的安全机制。能接触底层网络的人可以窥看、改动或注入;本文不提供这些做法的步骤。穿过不可信链路时,原文用小写 should 写,应当使用 IPsec 这类 VPN 技术,为组成 Geneve 封装的 IP 包提供认证和/或加密。若运营者认定需要机密性,则应当使用加密,这句是大写 SHOULD,例子包括 IPsec 和 DTLS。离开运营者安全域的 Geneve 流量,应当用加密机制保护,这句也是 SHOULD。这些句子是风险取舍,不是对某一产品的推荐。
端点到端点已经加密时,中转设备看不见 Geneve 头和选项。此时中转设备必须把这些包当成其他 IP 包,并保持一致的转发。这句在第 6.4 节,用的是 IP 包;第 3.5.1 节对不解释 Geneve 头的中转设备,用的是 UDP 包。两句的对象不同,不要并成同一条。
第 4.1 节把适用环境写成数据中心,以及单一运营者或相邻合作运营者管理的受控网络,不是普通互联网上的一般要求。本文没有核对某一远程接入客户端是否发送目的端口 6081,也没有测量哪一家云用了哪一个选项类。
核对清单
- Opt Len 只数选项:单位是 4 字节,不含固定的 8 字节。原文写的总长上限是 260;
- 版本和 C 位决定端点丢不丢:未知版本必须丢。不解析选项的端点,只在 C 位为 1 时必须丢;
- 中转设备不改头:不得插入或删除选项,也不得按 Opt Len、O 位或 C 位改变转发;
- 6081 不对调:默认目的端口。源端口可以为了熵用满 16 位。TCP 6081 在当天登记表里是保留;
- 这 8 字节不加密:机密性是另加的 SHOULD,取决于运营者的风险判断。看见 6081 不等于远程接入 VPN。