网络协议学习:通用网络虚拟化封装GENEVE[通俗易懂]

网络协议学习:通用网络虚拟化封装GENEVE[通俗易懂]GENEVE(GenericNetworkVirtualizationEncapsulation,通用网络虚拟化封装),是一种虚拟化隧道通信技术,定义于RFC8926,相比于之前类似的技术,GE

背景

之前介绍过通用路由封装协议GRE和虚拟可扩展局域网VxLAN,他们都是隧道协议的一种实现。
这两种协议的初衷和实现形式都是类似的。从初衷上说,这两种协议都是想实现一种对原始网络数据的一种扩展和封装:以一定的格式封装原始网络数据,再辅以一定的元数据(metadata),来实现附加的功能。例如,VxLAN中的网络标识符VNI就是一种元数据,实现的功能是对租户进行区分。
但是,随着网络的扩展以及业务的发展,有时候需要一种符合自己网络情况以及业务逻辑的协议,例如采用自己独特的业务元数据。这时候就需要一种技术来实现一种通用的封装方式,来符合自己的需求。这种封装最好可长可短,来实现自己的逻辑

GENEVE

GENEVE(Generic Network Virtualization Encapsulation,通用网络虚拟化封装),是一种虚拟化隧道通信技术,定义于RFC 8926
,相比于之前类似的技术,GENEVE的一点重大区别在于:协议的元数据本身是可扩展的。GENEVE提供了可扩展的GENEVE header,让业务更加灵活。

实现

其实可变长的字段,在其他的领域是有过类似的产物的。例如在MySQL数据库中,就支持可变长的字段varchar,来实现存储可变长字符串。在MySQL的默认存储引擎InnoDB的实现下,如果采用COMPACT行格式,其记录格式如下:
在这里插入图片描述
图源互联网
为了实现可变长字符串的存储,需要在记录的时候,对要存储的实际内容的长度开一个字段进行记录,当然如果表中的字段不存在可变长的(例如全部为char、int类型这种),这个字段也可以不被使用。
例如如果表a存在两列:varchar(20) col1和varchar(20) col1,当我在执行inset,插入字符串(‘aa’,‘bbb’),实际落盘的数据行需要首先存储这两个字符串的长度2和3(实际存储是倒序的二进制的,此处不深入探究实际机制仅讨论存储方案),然后在右边真实数据里面插入实际字符串’aa’和’bbb’。

那么,类似的可变长的也可以运用在网络传输中。

报文结构

IPv4的Geneve数据包格式如下:

Outer Ethernet Header Outer IPv4 Header Outer UDP Header Geneve Header Inner Ethernet Header (example payload) Payload Frame Check Sequence

其中,Geneve Header的内容如下:
在这里插入图片描述
其中各字段含义如下:

字段 长度(bit) 含义
Version 2 版本号,目前为0
Opt Len 6 表明Variable Length Options的长度,这里的一位代表Variable Length Options的4字节。因为只有6bit,所以Variable Length Options最多是252(63*4)字节。
O 1 表明这是一个OAM包,包含了控制信息,而非数据。Endpoint可以根据这个bit来优先处理这个包。
C 1 表明在Variable Length Options里面,存在一个或者多个Critical的option。当C被置位时,Variable Length Options必须被解析,如果当前Endpoint不支持GENEVE解析,那么应该丢弃数据包。如果C没有被置位,那么Endpoint可以根据Opt Len直接丢弃所有的Variable Length Options。
Reserved 6 保留字段
Protocol Type 16 被封装的协议类型,如0x6558代表以太网
VNI 24 同VxLan的VNI,虚拟网络标识符
Variable Length Options 可变长,长度为Opt Len*4 可扩展的元数据

这里的O和C字段是出于性能考虑,GENEVE报文的可扩展性很好,那就意味着其长度可能比较长,处理起来就比较耗资源,加入这两个字段可以使得Endpoint能够更灵活的处理数据。
在兼容性上,如果不考虑Variable Length Options,GENEVE与VxLAN是不冲突的,一些现有的针对VXLAN的优化可以直接应用在GENEVE上。
在考虑ECMP的情况下,ECMP设备看到的不是虚机的IP/MAC,而是Tunnel Endpoint的IP/MAC。也就是说,连接到同一台Tunnel Endpoint的机器的外层报文除了UDP port都是相同的。GENEVE协议认为应该使用source port的整个16bit(而不是常用的50000-65535)做Overlay流区分(RFC 8926 Section 2.3)

参考

RFC 8926
网络虚拟化协议GENEVE
网络虚拟化基础协议之Geneve

今天的文章网络协议学习:通用网络虚拟化封装GENEVE[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86135.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注