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/

posted @   .dier  阅读(3364)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示