- UDP协议端格式
![](https://i-blog.csdnimg.cn/blog_migrate/2a11745803198a8f995a79794d55fd06.png)
(1) 源端口号与目的端口号:都是16位,指数据从的进程来源与进程去向。
(2)16位UDP长度:指整个数据报(UDP首部+UDP数据)的长度,UDP首部固定为8字节,UDP数据最大为65535-8=65527字节。
(3)16位UDP校验和:检验整个数据报、UDP首部等在数据传输中是否出错,UDP的校验和可选的。
- UDP特点
(1)UDP协议是一种无连接的传输层协议:因为有源端口号与目的端口号,所以UDP协议在通信时不需要建立连接,减少协议开销,使得通信变得简单快速。
(2)UDP协议是一种不可靠的传输层协议:UDP协议出了有检验和保证数据的可靠传输外,没有别的措施保证数据的可靠传输。它没有确认应答、超时重传机 制,所以即使检测到出错,也无法将错误反馈给应用层,从而不保证数据的去重或有序到达。
(3)UDP协议是面向数据报的传输层协议:应用层数据添加了UDP协议首部之后直接传给IP层,UDP对应用层数据既不拆分也不合并,直接保留原报文的长
度与格式,所以对应用层数据的长度应传输合适,太长易导致在IP层分片,造成协议开销大以及延时。且对数据的读写次数与数量不能灵活控制。UDP
协议整包发,整包收,不存在接收一半的行为。
- UDP的缓冲区
(1)UDP不存在真正的缓冲区,它将调用sendto直接将数据传给内核,内核将数据传给网络层的协议进行后续传输。
(2)UDP有接收缓冲区,但是它不保证接收到的数据顺序与发送的数据顺序保持一致,且接收缓冲区一旦满了,再来数据则不再接收。
- UDP的socket
UDP的socket既能读,也能写,也能同时进行读和写(全双工)。以下为简单的UDP网络程序:
UDP服务器: