目录
一、UDP协议端格式
二、UDP的特点
三、基于UDP的应用层协议
一、UDP协议端格式
UDP协议是一个传输层的一个重要的协议,要了解这个协议,其最主要的工作就是去理解协议报文格式。
- 16位UDP长度,是表示整个数据报的最大长度(字节)(UDP首部(报头)+UDP数据);
- UDP数据报包括了首部(源端口号,目的端口号,UDP长度,UDP检验和)和数据部分,其中首部8字节,剩余部分的数据部分为65527字节;
- 校验和常用于校验检测,如果校验和出错,就会直接丢弃。
如图UDP数据报:
像源端口号,目的端口号以及UDP报文长度通俗易懂,很容易理解,而下面就介绍UDP校验和。
校验和:
在网络传输中,由于一些外部干扰,就可能出现数据传输出错的情况,这时就需要有办法识别出有错的数据,而校验和就是这样的一种检查手段。
校验和其实本质上也是一个字符串,体积比原始的数据更小,又是通过原始的数据生成的。
原始数据相同,得到的校验和就一定相同,反之,校验和相同,原始数据大概率相同。
基于校验和来完成数据的校验过程:
- 发送方把要发送的数据整理好(data1),通过一定的算法,计算出校验checksum1;
- 发送方把data1和checksum1一起通过网络发送出去;
- 接收方收到数据,把收到的数据称为data2(数据可能和data1就不一样了),收到数据checksum1;
- 接收方再根据data2重新计算校验和(按照相同的算法),得到checksum2;
- 对比checksum1和checksum2是否相同,如果不同,则认为data2和data1一定不相同;如果checksum1和checksum2相同,则认为data1和data2大概率是相同的(理论上存在不同的可能性,概率比较低,工程上忽略不计)。
对于计算校验和,有很多种算法:
CRC算法(循环冗余算法),md5算法。
md5算法的特点:
- 定长:无论原始数据有多长,计算得到的md5都是固定长度。
- 分散:给定两个原始数据,哪怕绝大部分内容都一样,只要其中一个字节不同,得到的md5值差异都会很大。
- 不可逆:给出一个原始数据,计算md5,非常容易,但给出md5,还原出原始数据却很难。
二、UDP的特点
UDP传输的过程类似于寄信
特点:
- 无连接:知道对端的IP和端口号直接进行传输,不需要建立连接。
- 不可靠:没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发送到对方,UDP协议层也不会给应用层返回任何错误信息。
- 面向数据报:应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。比如用UDP传输100个字节的数据:如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节;而不能循环接收10次。每次接收10个字节。
- 缓冲区:UDP只有接收缓冲区没有发送缓冲区,UDP没有真正意义的发送缓冲区,发送的数据会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;如果缓冲区满了,再达到的UDP数据就会丢弃。
- 全双工:通过一个socket既可以send,又可以receive。
- 大小受限:UDP协议首部中有一个16位的最大长度。也就是说一个UDP能传输的数据最大长度是64K(包含了首部0)。
三、基于UDP的应用层协议
- NFS:网络文件系统
- TFTP:简单文件传输协议
- DHCP:动态主机配置协议
- BOOTP:启动协议(用于无盘设备启动)
- DNS:域名解析协议