目录
1.UDP协议是传输层协议
网络协议是分层的,UDP协议是属于传输层协议.
2.UDP协议的特点
<1>无连接
发送端知道接收端的IP和端口号就直接进行传输,不需要与接收端建立连接.
<2>不可靠
发送方不知道对方是否收到了信息. 如果因为网络故障数据无法发到对方,UDP协议层也不会给应用层返回任何错误信息.
<3>面向数据报
以数据报为基本单位进行发送(每个数据报多大,不同的协议是有不同的约定的).
发送的时候,一次至少发一个数据报.如果尝试发一个半,实际上只发出去了一个.
接收的时候,一次至少接收一个数据报.如果尝试接收半个,剩下半个就丢失了.
<4>全双工
UDP的socket既能读,也能写.
<5>缓冲区
UDP只有接收缓冲区,没有发送缓冲区:
UDP没有真正意义上的发送缓冲区.发送数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;
UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致;如果缓冲区满了,再到达的UDP数据就会被丢弃.
3.UDP协议报文格式
也可以表示为:
整个UDP数据报由报头和载荷(应用层数据)组成.
报头中16位UDP长度 表示整个UDP数据报的最大长度.
而16位(2个字节)表示的数据范围是0-65535 byte,也就是说一个UDP数据报的最大长度就是64KB.
所以使用UDP传输数据的时候一定要警惕大的报文!如果报文长度超过64kb,此时就可能丢失一部分数据.
校验和:其实就是为了验证看当前数据是否出现问题了. 校验和往往是根据原始数据的内容来生成的.不同的内容生成的校验和也就不一样.如果数据在传输的过程中发生了改变(比特翻转),那么校验和也就不一样了.
如果校验和正确,不一定确保数据就是对的.
但是如果校验和不正确,就能说明数据一定是错的.
关于校验和如何进行校验可以查看这篇文章: 校验和如何进行校验
4.基于UDP的应用层协议
- NFS: 网络文件系统
- TFTP: 简单文件传输协议
- DHCP: 动态主机配置协议
- BOOTP: 启动协议(用于无盘设备启动)
- DNS: 域名解析协议
- 当然也包括自己写UDP程序时自定义的应用层协议