UDP的概述
UDP是一种无连接、不可靠、简单高效的面向报文传输的传输层协议。另外,使用UDP传输也是可以实现数据的可靠传输的,只是这些额外的功能需要应用程序自身实现。
1 | TCP是面向连接、面向字节流、支持双工、支持并发连接、提供确认重传和拥塞控制的可靠的传输层协议 |
UDP的数据报格式
- UDP的长度:它指的是整个UDP报文的长度。16位UDP的长度字段可以表示最大的值为:65535字节,而我们UDP的最小的报文长度就是:8字节,此时UDP报文中没有数据。
- UDP校验和:这个UDP校验和和TCP的校验和一样,都是用于验证当前的数据报是否有损坏。而且它们的校验和值的初始化和使用方法都是一样的,都是要加入临时的伪报头。具体可以参考博客:检验和计算方式
UDP的优势
- 网络环境越来越稳定、可靠,给了UDP取代TCP的机会;此时TCP的拥塞处理、超时重传等机制显得有些多余。
- UDP相比了TCP,传输速度快,更能满足实时性的要求。若是数据量大,TCP会有拥塞控制;若是丢包,还得等待重传;会有较大延时。
- 如果对数据有可靠传输的需求,应用可以通过一些机制来保证。 a. 发送方对所发的报文要求应答。 b. 报文头里加序号字段,交互时需检测(每次交互加1)
- UDP分组首部开销小,可以提高数据的传输效率
- UDP还支持一对一、一对多与多对多的交互式通信方式,所以多播和广播是需要通过UDP来实现的
UDP协议一次应该传输的数据的大小,如何确定?(参考博客:UDP一次应该传输多大的数据)
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被称为链路层的MTU(最大传输单元).我们在后续介绍IP协议的时候,将会了解到如果整个IP数据报的长度大于MTU时候,将会被分片后再进行传输,而分片传输会大大的影响数据的传输速度。所以我们可以知道一个IP数据报的最大长度为:1500字节,其中IP数据报自身的首部长度为:20字节,然后,再加上UDP自身的首部长度:8字节,所以一次可以传输的数据最大为:1472字节。为避免被分片处理,最好把UDP的数据长度控制在:1472字节以内
鉴于Internet上的标准MTU值为576字节,所以我建议在进行Internet的UDP编程时.最好将UDP的数据长度控制在548字节(576-8-20)以内.
UDP和TCP各自使用情况总结图
总结
通过最后一点对TCP和UDP使用情况的总结,我们在实际的编程中,应当合理的选择传输层协议。