目录
一、UDP特点
1、无连接
2、不可靠
3、面向数据报
4、全双工通信
二、UDP报文结构
1、报头
2、载荷
三、端口
四、报文长度
五、校验和
1、定义
六、注意事项
1、UDP只有接收缓冲区、没有发送缓冲区
2、UDP大小受限
3、基于UDP的应用层协议
4、MTU对UDP协议的影响
一、UDP特点
1、无连接
UDP传输的过程类似于寄信,知道对端的IP和端口号就可以直接进行数据报传输,不用像TCP协议需要建立连接。
2、不可靠
UDP没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。
3、面向数据报
UDP通过数据报的形式进行传输,用户的请求或响应都会从数据报转换成字符串
应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并
例:用UDP传输100个字节的数据,如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节,而不能循环接收10次每次接收10个字节。
4、全双工通信
UDP的Socket既能读也能写,客户端和服务器都可以发送请求/接受响应。
二、UDP报文结构
UDP数据报=报头+载荷
1、报头
对于UDP来说,报头一共有8个字节,包含4个字段,每个字段2个字节。
报头=源端口+目的端口+报文长度+校验和
2、载荷
应用层数据报
三、端口
载荷中每个端口号在UDP报文中占了两个字节,端口号的取值范围是0~65535
端口号不是代表主机的地址,而是用来区分主机中的应用程序,代表了不同的应用程序。
- 源IP和源端口是指数据从哪里来
- 目的IP和目的端口是指数据到哪里去
例:
四、报文长度
报文长度是两个字节,表示范围0~65535,等于64KB。一个UDP报文最大传输的长度是64KB。
如果超过了64KB,可以通过以下两种方式来解决:
- 在应用层通过代码的方式针对应用层数据报进行手动分包,拆成多个包通过多个UDP数据报进行传输。
- 换成TCP协议
五、校验和
1、定义
将发送前和发送后的校验和进行比较,检查发送前后数据报是否一致。用来验证传输的数据是否是正确的。
校验和存在的意义就是用来判定当前传输的数据是否出错:
- 如果校验和不对,此时数据一定不对
- 如果校验和对,数据也有一定概率是错的
为了让校验和能够识别率更高一些,计算时通常会以数据内容作为参数来计算,数据内容发生变化,校验和也会发生变化。
校验和往往就是取内容或是内容的一部分,通过数学公式变换得到一个数值。如果内容发生改变,得到的校验和也就改变了。
发送方把载荷数据带入到校验和算法中,计算生成得到校验和结果设为sum1,发送方把这一整串数据发送给接收方。
接收方收到的数据既有载荷也有校验和sum1,接受方就可以把载荷按照同样的算法,再计算一边校验和得到sum2。
如果校验和结果不一样,原始输入的内容一定不一样,就可以视为传输出错了。如果sum1变了,内容没变,但是还是和sum2对不上,也视为传输出错。
六、注意事项
1、UDP只有接收缓冲区、没有发送缓冲区
- UDP没有真正意义上的发送缓冲区。发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作。
- UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。如果缓冲区满了,再到达的UDP数据就会被丢弃。
2、UDP大小受限
UDP协议首部有一个16位的最大长度,一个UDP能传输的数据最大长度是64KB(包含UDP首部)。
3、基于UDP的应用层协议
- NFS :网络文件系统
- TFTP :简单文件传输协议
- DHCP :动态主机配置协议
- BOOTP :启动协议(用于无盘设备启动)
- DNS :域名解析协议
4、MTU对UDP协议的影响
一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层被分成多个IP数据报。在这多个IP数据报中有任意一个丢失,都会引起接收端网络层重组失败。这就意味着如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。