主要用于无障碍穿越NAT/PAT;更详细的分析;请阅读3。
VxLAN 的封装格式;;图片来源于网络;
1 IP in IP
这种tunnel就是题主所说的用IP封装VxLAN;这种tunnel仅仅依靠外层的IP头很难穿越NAT/PAT设备。
如果使用IP封装;VxLAN 协议头需要提供字段支持NAT;即使这样;还需要VxLAN端点之间路径上的NAT设备升级软件;这是吃力不讨好的方案。
2 GRE
在UDP tunnel 流行之前;GRE是最通用的封装方式;比如PPTP就是采用GRE来封装用户数据;GRE有两种格式;
2.1 标准格式 ;Standard;
GRE头一共4个字节;4个字节里也没有哪个字段适合做NAT;所以不便于做NAT穿越。
2.2 高级格式 ; Enhanced;
GRE头一共8个字节;8个字节里有一个字段;Key/VRF;适合做NAT;所以使用的更多;更通用;
但有的NAT设备只支持UDP/TCP/ICMP;并不一定支持Enhanced GRE;所以有时也会造成通信障碍。
3 UDP
细心的读者会发现;UDP tunnel 越来越流行了;基于几点特质;
3.1 无障碍穿越任何NAT设备
无论高端的商用路由器、还是家用路由器;都支持;所以无需额外的配置就可以工作;省时省心。
3.2 UDP是无状态的
大家很少见到TCP tunnel吧?也是有的;比如Cisco Anyconnect Full Tunnel mode;使用TCP ; TLS安全封装;可以将用户的所有IP包封装在外层的安全传输层;由于建立tunnel 之前需要建立连接;然后再建立tunnel;发送数据的初始延迟就会稍大。外层的TCP是有状态的;内层负载如果也是有状态的;双状态机不利于排错、debug。
L2TP、VxLAN、IKEv2 IP Security都是采用UDP封装。
3.3 IP Protocol 数量有限
一个字节;理论上可以提供255种协议复用;空间受限。
而采用UDP封装;端口号2个字节;理论上可以提供65535种协议复用;空间更游刃有余。
3.4 UDP天然支持组播的特性
终端用户的广播;如ARP广播;;以及用户的组播;需要VxLAN传输;有两种方式;
3.4.1 组播传输
需要运营商提供组播支持;需要将用户的广播、组播;全部映射为VxLAN组播;而支持组播最天然的协议就是UDP。
3.4.2 单播复制多份传输
如果运营商不支持用户组播;则需要头端设备将用户的广播、组播;复制为多份进行单播传输;无状态的UDP协议也是一个合适候选者。
学习地址;Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家
--------更新------
看到另外两位同学的答案;UDP端口提供了更灵活的负载均衡的潜能;观点正确;算是使用UDP封装的一个原因;在这里我给大家分析一下。
大家看上文的图片里的Outer UDP Header;VxLAN协议规范指出;Destination Port使用固定端口号;协议端口;;Source Port可以使用固定端口号;也可以使用随机端口号;
固定源端口号的负载均衡
Hash ( Source IP, Destination IP, Source Port;Destimation Port )
由于源、目的端口号都为固定;其Hash值与单纯使用IP进行HASH没有本质区别;即在负载均衡眼里;这是同一个session;会选择同一条物理路径。
Hash ( Source IP, Destination IP)
所以如果使用固定源端口号;起不到负载均衡的效果;和采用IP封装没有任何区别。
随机源端口号的负载均衡
由于源端口号基于内层以太网头的HASH;不同的Source MAC/ Destination MAC对应不同的业务;会将不同的业务映射到不同的ECMP;Equal Cost Multiple Path )的物理路径上。
所以使用同一个VTEP;不同的业务使用不同的源端口号;可以起到负载均衡的效果;而这是使用IP封装所不能实现的目标。
原文链接;https://www.zhihu.com/question/54841860/answer/141356897