UDP协议端格式
- UDP有俩部分组成,一个是一个固定长度的8字节的报头,另一部分是用户或者服务端要发送的数据(可以为空)
- 报头由四部分组成,16位源端口号,16位目的端口号,16位UDP的长度,16位校验和
- 16位UDP的长度表示整个报头加正文内容的总大小
- 如果最终校验和16位校验和不匹配,该报文就会被直接丢弃
UDP协议的特点
- 无连接:知道对方的端口号和IP就能直接进行通信,不需要建立连接。
- 不可靠:没有确认机制和重传机制,因为一些网络原因发生数据的丢失,UDP不会给应用层传递任何的错误
- 面向数据报:不能灵活地控制对写数据的次数和数量
- 交给UDP的报文既不会合并也不会拆分,如果发送一百个字节,对方就会接受一百个字节,不会出现接受十次一次接受十个字节的情况,一定是一次全部接受
UDP的缓冲区
- UDP没有正真意义上的发送缓冲区,在发送数据的时候会直接调用sendto,把数据传输给内核,再由内核传给网络层,然后进行后续的相关操作
- UDP有接收缓冲区,但是这个缓冲区不保证数据的发送顺序和接受顺序一致,而且当接受缓冲区满了以后,后续发送过来的数据会直接被丢弃
UDP的注意事项
- 可以看到UDP包头中的UDP长度为16个比特位,这代表着一次最大可以传64kb大小的的数据(其中包括报头)
- 而在我们现在的互联网中64kb并不是一个很大的数据,所以我们就需要一些手段扩大这个传输的最大容量
-
如果我们需要传输的数据超过64K, 就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装
基于UDP的一些应用层协议
-
NFS: 网络文件系统
-
DHCP: 动态主机配置协议
-
BOOTP: 启动协议(用于无盘设备启动)
-
DNS: 域名解析协议
- TFTP: 简单文件传输协议