目录
一、UDP协议概述
1、UDP基本概念
UDP(User Datagram Protocol)—— 用户数据报协议,是互联网传输层的一个重要协议。
UDP为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法,允许应用程序在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。
UDP使用底层的互联网协议来传送报文,同IP一样提供不可靠的无连接数据包传输服务。它不提供报文到达确认、排序、及流量控制等功能。
由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
2、UDP的主要特点
(1)UDP是无连接的协议。即在发送数据前不需要建立连接,发送数据结束也没有连接释放,因此减少了开销和发送数据前的时延。
(2)UDP使用尽最大努力交付。即不保证可靠交付,因此不需要维护复杂的连接状态表。
(3)UDP是面向数据报的。对于应用层交付的报文,发送方的UDP在添加首部后直接交付给IP层。UDP对应用层交付的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,应用层给UDP多长报文,UDP就发多长,一次发送一个报文。
(4)在接收方的UDP,对于IP层交付的UDP用户数据报,在去除UDP首部后也直接交付应用层,不作任何处理,一次交付一个完整的报文。因此,控制报文长度的工作由应用层负责,应用层要选择合适大小的报文。若报文太长,UDP封装后交给IP层,IP层在传输时可能要进行分片处理,减低了IP层的效率。反之,应用层报文太短,效率也低。
(5)UDP没有拥塞控制机制。因此,网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用很重要,如IP电话,实时视频会议等,要求源主机以恒定的速率发送数据,并且允许在网络拥塞时丢失一部分数据,但不允许数据有太大的时延。
(6)UDP支持一对一,一对多,多对一和多对多的交互通信。
(7)UDP的首部开销小,只有8字节,比TCP的20字节的首部短。
3、UDP的基本报文格式
UDP报头由4部分组成:
源端口号:发送方的端口号。
目的端口号:目的主机的端口号。
UDP长度:UDP报文的长度,单位字节,包括报头和有效载荷。
UDP校验和:保证报文完整性和正确性,出错就丢弃。
二、ESP8266官方UDP库相关函数详解
1. begin(uint16_t port)
功能:初始化 WiFiUDP库和网络设置,启动WiFiUDP套接字,侦听指定的本地端口
参数:port,指定侦听的本地端口号
返回值:1,成功;0,失败,表示没有可用的套接字
// initialize, start listening on specified port.
// Returns 1 if successful, 0 if there are no sockets available to use
uint8_t begin(uint16_t port) override;
2. available()
功能:返回当前数据包中,可从缓冲区读取的字节数。这是已经到达的数据。
参数:无
返回值:当前数据包中可用的字节数
注意:仅在调用解析数据包函数WiFiUDP.parsePacket()之后,才能成功调用此函数。
// Number of bytes r