通用底层协议分析(UDP)
UDP的特点
①UDP是无连接的,发送数据之前不需要建立连接,因此减少了开销和发送数据之前的时延.
②UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表.
③UDP是面向报文的.UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界.UDP一次交付一个完整的报文.
应用程序必须选择适合大小的报文:
若报文太长,UDP把它交给IP层后,IP层在传送时可能要进行分片,这会降低IP层的效率.
若报文太短,UDP把它交给IP层后,会使IP数据报的首部的相对长度太大,这也降低了IP层的效率.
④UDP没有拥塞控制,因此网络中出现的拥塞不会使源主机的发送速率降低.这对某些实时应用是很重要的.很适合多媒体通信的要求.
⑤UDP支持一对一,一对多,多对多,多对一的交互通信.
⑥UDP首部开销小,只有8个字节,比TCP的20个字节的首部要短.
UDP的报文格式:
UDP报文的封装:
UDP校验和的计算和伪首部
- 校验的内容:首部+数据区,包括源,目标IP
- 计算校验和的过程:使用伪首部,但不发送伪首部
-
伪首部的格式:
UDP-Lite
Lightweight User Datagram Protocol:增加校验和字段使用的灵活性
方法:数据=敏感(校验和计算的输⼊区,当这个区域的数据发⽣差错时,报⽂将被丢弃)+非敏感两个区域(数据不进⾏校验,即便这个区域的数据发⽣差错,报⽂也不
会被丢弃)
报文格式:
校验和覆盖:从报文首部的第一个字节开始计算校验和时,校验和覆盖的字节数.
“0”:整个报文都被覆盖.
规定:首部必须被覆盖.
UDP端口
实质:是一个可读,可写的软件结构,内部有一个接受报文缓冲区.每个端口有一个16bit整数标识.
获得端口号源端口:任意 目标端口:集中式统一指派;动态指派
常用的几个知名端口:53(DNS),88(kerberos),161(snmp)
最大UDP数据报长度
理论上:65535(IP长度)-20(IP头)-8(UDP头)=65507
实际实现:例⼦(最⼤IP数据报⻓度):
- ①SunOS 4.1.3 环回测试 :32767
- ② BSD/386 - > SunOS 4.1.3 :32786
- ③ Solaris 2.2 环回测试:65507
结论:最⼤报⽂⻓度与源端和⽬的端实现有关.