TCP/IP详解 第十章用户数据报协议 UDP

1、简介

简单的面向数据报的传输层的协议,不提供差错纠正,队列管理,重复消除,流量控制,拥塞控制功能。提供差错检测。使用它的应用程序需要做许多数据报如何发送和处理的控制工作。

2、UDP头部

TCP/IP详解 第十章用户数据报协议 UDP

端口号16位,当不需要返回时,源端口号可以为0
端口号在不同的传输协议之间是独立的,即不同的服务器

     可以使用相同的ip地址与端口号,但传输协议不同

 

长度字段是udp头部和数据的总和,最小值8,排除ipv6 超长数据报情况
校验和,端到端的传输层校验和,覆盖udp头部,数据,一个伪头部,发送端计算的来,目的端验证,途中不变,除非遇到natipv4可选不强制使用,推荐使用。Ipv6强制.

      数据部分需要是偶数,奇数需补0

 

3、ipv4伪头部

TCP/IP详解 第十章用户数据报协议 UDP

4、Ipv6 伪头部

TCP/IP详解 第十章用户数据报协议 UDP

5、udp测试

sock -v -u -i  192.168.21.26 discard
tcpdump -n -p -s 1500 -vvv host 192.168.21.26 and \(udp or icmp \)

6、Teredo 隧道技术

TCP/IP详解 第十章用户数据报协议 UDP

TCP/IP详解 第十章用户数据报协议 UDP

7、Udp Lite

TCP/IP详解 第十章用户数据报协议 UDP

8、Ip 分片

Ipv4 在源主机或者路由器上分片

Ipv6 只能在源主机分片

到达最终目的地完成重组。

为什么不在路途中间重组?

1,路由器负担问题

2,分片路由路径问题

 

TCP/IP详解 第十章用户数据报协议 UDP

标识字段唯一确定一个ip数据报
偏移字段以8字节为单位,并且相对于原始数据报计值
MF 字段指示是否还有下一个分片
任何一个分片丢了,整个数据报就丢了
标识字段唯一确定一个ip数据报
偏移字段以8字节为单位,并且相对于原始数据报计值
MF 字段指示是否还有下一个分片
任何一个分片丢了,整个数据报就丢了
 

9、重组超时

当数据报的任何一个分片到达时,ip层启动一个定时器,时长30s60s
再收到数据分片时,定时器不会重置。
 

10、采用udp的路径mtu发现

路径mtu发现机制(PMTUD),可以用它来确定mtu的大小,避免分片
IP层会基于每个目的地址缓存一个PMTUD信息,当没有更新时就超时

11、最大udp数据报长度

Ipv4  65535=20(不带ip选项)+8+65507
Ipv6  65535=8+65527   非超长数据报
实现限制:

    协议实现提供api可设置缓存大小,一般默认8192或者65535 ,但也有些协议实现不支持大数据量的传送与接收。如dnsdhcp都对发送的数据报大小做了限制。

。数据报截断:

     发送方发送一定大小的数据报,接收方不一定能完全接收,所以可能会出现截断,截断后或者丢弃或者后移,看不同的实现了

12、Udp服务器设计

1,限制本地ip地址

2,使用多地址

3,限制远端IP地址

4,每端口多服务器的使用

 

13、流量和拥塞控制缺失

服务端Udp端口接收数据,存入缓存队列
Udp 无连接
缓存队列可能满,服务端无法控制客户端,数据出现丢失

 

 

感谢zhangj