首页 > 代码库 > 网络虚拟化基础协议之Geneve

网络虚拟化基础协议之Geneve

网络虚拟化最基础的技术莫过于分层(Overlay、Underlay),要实现分层有两种手段,一个是映射(Mapping),一个是封装(Encapsulation)。


映射,主要思路是转发时替换报文语义,如何替换将需要设备进行查询。
封装,则是把需要的报文语义添加到网包中,处理的时候一层层的解封装即可,尽量对设备透明。


不少协议都实现了封装的部分或完整功能,包括IP-in-IP、Vlan、MPLS、VXLAN、NVGRE、STT等。这些协议各有各的特点,不少都是为了简单地隔离或者通过隧道连通不同网络。特别是后面几种,设计理念大同小异,只是实现细节不同。


对通用的封装协议标准的需求已经越来越强烈,于是有了Geneve: Generic Network Virtualization Encapsulation。


Geneve的出发点是解决封装时候添加的metadata信息问题(到底多少位,该怎么用),尝试适应各种虚拟化场景,Underlay的协议是最通用的IP协议(准确的说是UDP)。


跟大部分的封装协议类似,实现Geneve一般需要两类设备:隧道终端(tunnel endpoints)和传输设备(transit devices)。前者用来处理封装头终止隧道,后者则是非必需的,通常是支持IP转发的设备。


具体来看Geneve的封装帧,从外到里依次是
外层以太头
外层IP头(V4或V6)
外层UDP头
Geneve头(变长)
内层以太头
Payload
外层以太头的FCS


其中UDP的目标端口默认是IANA分配的6081,并且支持可配置。UDP的校验和必须计算正确,也可配置为0。


Geneve支持单播、多播和广播。

网络虚拟化基础协议之Geneve