Vxlan为何采用UDP封装,而不是TCP或者IP?

1. OSI七层模型

    OSI七层模型自1979年正式提出以来,历经计算机网络40年的发展,非但没有被淘汰,反而历久弥新,为互联网的发展提供了强劲的动力。

    下图主要展示OSI七层模型中的代表协议,我们可以看到IP协议位于网络层,而TCP和UDP则位于传输层。

    用户数据包在OSI七层模型中的封装与解封装过程如下图,用户数据发送的过程中,会依次经历四层的tcp/udp封装,然后在三层经历IP封装,二层加上MAC头,在物理层被翻译成01,接收的过程正好相反。

 

2.Vxlan封装

    目前Vxlan采用的如下图的MAC in UDP的封装格式:其封装思维是将原始数据报文当做用户数据包,VTEP当做大二层接入,那么VTEP会依次进行传输层封装,网络层封装,以太网头部封装,如果直接进行IP封装则跳过了传输层的封装过程,会在传输的过程中遇到一些困难。

3. IP协议

    从上面可以看出,如果我们单纯的采用IP进行Vxlan封装,可以降低数据报文的开销,但是会面临一些其他的问题,我们看一下IP协议的封装格式,可以看到网络层的封装不涉及端口号,在很多数据中心里都会有大量的冗余链路,交换机面对多条等价路径时会进行基于五元组进行HASH,此时会出现问题;其次,在遇到NAT设备时,无法穿透也会造成影响。

4.TCP协议

    那么,为什么不采用同为传输层协议的TCP协议进行封装呢?我们看下TCP封装的头部格式和UDP封装的头部格式,可以看到TCP头部最少占用20个字节,而UDP头部只占用8个字节,使用UDP封装开销比较小。

    其次TCP是一种面向连接的传输层协议,比较可靠,但是带来的问题就是,在传输的过程中需要先建立连接,由此造成传输速度减慢,这也是采用UDP进行封装的一大原因。

转载自:http://www.subtime.cn/article/whyudp/

原文地址:https://www.cnblogs.com/dier-gaohe/p/14435879.html