网络协议篇UDP协议

Posted 码农的修炼之道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络协议篇UDP协议相关的知识,希望对你有一定的参考价值。


本文换一种问答式的风格来总结一下UDP协议,由于UDP协议比较简单,因此也没有必要花大篇进行讲解。


1、UDP是无连接的,体现在哪些方面。

   所谓建立连接,是指在服务端和客户端之间各种维护一套连接状态。而UDP协议没有服务端和客户端的概念。比如,TCP协议传输的数据保证无差错,有序到达,不重复。在IP层是没有任何可靠性保证的,而UDP继承了IP的特性,不保证不丢包,不保证有序到达。


   其次,TCP是面向字节流的,因为TCP底层发送应用层的数据时候会拆成一个个包,然后交给IP层进行发送,且在TCP层维护了发送包和接收包的序列号。而UDP继承了IP的特性,基于数据报文,一个一个报文发,一个一个报文接收,不存在TCP流式协议中存在的“半包粘包”问题。


    再其次,TCP提供拥塞控制,当TCP自己意识到网络丢包重发严重,会自动降低发包速度从而减少对网络的影响,也就是说TCP会根据网络情况调整自己的行为。而UDP协议不会,只要应用层让发包,那么就发,不管网络情况如何。

  

2、UDP协议头是什么样的。

   从下面UDP协议的报文头可以看出,只有源端口和目的端口。不同的应用程序去不同的端口读取数据即可(数据从内核中拷贝到用户态)。从这报文头也可以看出UDP协议确实比TCP简单太多。

 

3、UDP协议使用场景。

   由于UDP是一种“无脑”协议,一般可以考虑在以下场景下使用。

 

 

第三,需要处理速度快,低时延场景。比如原来直播使用的RTMP协议是基于TCP的,这样在网络不好的情况下就会越来越卡顿。所有现在很多厂商都基于UDP实现了自己的直播协议。另外,像我们目前使用的DDS(分布式消息总线)底层也是基于UDP进行实现的,因此速度和时延会比较低。

以上是关于网络协议篇UDP协议的主要内容,如果未能解决你的问题,请参考以下文章

RK3399平台开发系列讲解(网络篇)7.26UDP协议源码分析

33 张图详解 TCP 和 UDP协议 :打通网络和应用的中间人

趣谈协议基础篇:图解Linux网络包接收过程

网络编程-套接字篇

网络编程-套接字篇

网络协议UDP