搜公众号
推荐 原创 视频 Java开发 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库
Lambda在线 > 搞技术 > UDP协议,用户数据报协议

UDP协议,用户数据报协议

搞技术 2019-04-09
举报

  UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。

  与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节(16*4位)用来包含报头信息,剩余字节则用来包含具体的传输数据。

  2、UDP报文格式

  与TCP协议不同,UDP协议是非面向连接的不可靠协议,因此没有了SYN等处理两端等待或连接的报文段,相比之下,UDP的报文格式更为简单,主要由报文头(由均16位的源端口号、目的端口号、UDP长度和UDP校验和组成)和具体传输数据组成。如图所示:

  

  • UDP长度:UDP报文的整个大小,最小为8个字节(16*4位)(仅为首部)。

  3、UDP特性

  • (1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当 UDP想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。

  • (2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。

  • (3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。

  • (4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。

  • (5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。

  在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。


UDP相对于TCP,只在IP数据报服务至上增加了很少一点功能,即端口和差错检测,所以UDP的首部开销很小,只有8个字节。

UDP虽然没有TCP有那么多机制对传输服务进行保障,但是UDP却有这非常高效的传输效率。UDP传输之前不需要建立连接,既不保证可靠交付,也没有拥塞控制。因为UDP传输效率高,又支持一对一、一对多、多对一、多对多的交互通信,所以非常适合多媒体的通信要求。



基于TCP和UDP的区别,所以场景要求不同,应用不同。例如同样是文件传输,如果网络质量不能保证,我们会优先选择FTP协议来传输文件。但如果网络质量可靠,我们可能会选择TFTP协议来进行文件传输。另外像一些即时通信的软件,都是采用的UDP协议。而像邮件、HTTP之类的应用则采用TCP协议。


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《UDP协议,用户数据报协议》的版权归原作者「搞技术」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

举报