1、简介
•简单的面向数据报的传输层的协议,不提供差错纠正,队列管理,重复消除,流量控制,拥塞控制功能。提供差错检测。使用它的应用程序需要做许多数据报如何发送和处理的控制工作。
2、UDP头部
•
端口号
16
位,当不需要返回时,源端口号可以为
0
•
端口号在不同的传输协议之间是独立的,即不同的服务器
可以使用相同的ip地址与端口号,但传输协议不同
•
长度字段是
udp
头部和数据的总和,最小值
8
,排除
ipv6
超长数据报情况
•
校验和,端到端的传输层校验和,覆盖
udp
头部,数据,一个伪头部,发送端计算的来,目的端验证,途中不变,除非遇到
nat
。
ipv4
可选不强制使用,推荐使用。
Ipv6
强制
.
数据部分需要是偶数,奇数需补0
3、ipv4伪头部
4、Ipv6 伪头部
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 隧道技术
7、Udp Lite
8、Ip 分片
Ipv4 在源主机或者路由器上分片
Ipv6 只能在源主机分片
到达最终目的地完成重组。
为什么不在路途中间重组?
1,路由器负担问题
2,分片路由路径问题
•
标识字段唯一确定一个
ip
数据报
•
偏移字段以
8
字节为单位,并且相对于原始数据报计值
•
MF
字段指示是否还有下一个分片
•
任何一个分片丢了,整个数据报就丢了
•
标识字段唯一确定一个
ip
数据报
•
偏移字段以
8
字节为单位,并且相对于原始数据报计值
•
MF
字段指示是否还有下一个分片
•
任何一个分片丢了,整个数据报就丢了
9、重组超时
•
当数据报的任何一个分片到达时,
ip
层启动一个定时器,时长
30s
或
60s
•
再收到数据分片时,定时器不会重置。
10、采用udp的路径mtu发现
•
路径
mtu
发现机制
(PMTUD)
,可以用它来确定
mtu
的大小,避免分片
•
IP
层会基于每个目的地址缓存一个
PMTUD
信息,当没有更新时就超时
11、最大udp数据报长度
•
Ipv4 65535=20
(不带
ip
选项)
+8+65507
•
Ipv6 65535=8+65527
非超长数据报
•
实现限制:
协议实现提供api可设置缓存大小,一般默认8192或者65535 ,但也有些协议实现不支持大数据量的传送与接收。如dns和dhcp都对发送的数据报大小做了限制。
。数据报截断:
发送方发送一定大小的数据报,接收方不一定能完全接收,所以可能会出现截断,截断后或者丢弃或者后移,看不同的实现了
12、Udp服务器设计
1,限制本地ip地址
2,使用多地址
3,限制远端IP地址
4,每端口多服务器的使用
13、流量和拥塞控制缺失
•
服务端
Udp
端口接收数据,存入缓存队列
•
Udp
无连接
•
缓存队列可能满,服务端无法控制客户端,数据出现丢失
感谢zhangj