最简单好记的UDP协议

下面是学习UDP的思维导图

1.首先是UDP的特点:

  • UDP无需建立连接。因此减少开销和建立连接的时延。
  • 无连接状态。TCP需要在端系统中维护连接状态,连接状态包括接收和发送的缓存、拥塞控制参数和序号与确认号的参数,而UDP不需要,故某些专用应用服务器使用UDP时,可以支持更多的客户机。
  • 分组开销小。TCP有20B的首部,而UDP仅有8B。
  • 面向报文。应用程序交给UDP一个报文,UDP添加首部后就交付给IP层;而UDP收到一个UDP数据报,去除首部后就交给应用程序。因此报文是UDP数据报处理的最小单位。应用程序必须选择合适大小的报文,若报文太长,IP层需要进行分片;报文太短,IP数据报的首部相对较大。
  • 尽最大努力交付。即不保证可靠交付,故应用实体可以根据应用需要设计可靠性机制。
  • 无拥塞控制。因此应用层能更好地控制要发送的数据和时间。

2.UDP首部格式

UDP报文有两个字段:数据字段和首部字段。整个UDP数据报作为IP数据报的数据部分封装在IP数据报中。
UDP首部占8个字节,每个字段都是两字节。

  • 源端口
  • 目的端口
  • 长度 UDP用户数据报的长度(包括首部和数据)
  • 校验和 可选。当源主机不想计算校验和时,则可令该字段为全0。

3.UDP校验

在计算校验和之前,需要在UDP数据报之前增加12个字节的伪首部。伪首部的信息是从所在IP分组头中提取的。伪首部既不向下传送也不向上递交。加上伪首部的校验和方式既检查了UDP数据报,又检查了IP数据报的源IP地址和目的IP地址。而IP数据报的检验和只检验IP数据报的首部。

在发送方把全零放入校验和,再把伪首部和UDP用户数据报视为许多位16位字串,若UDP数据报的数据部分不是偶数个字节,则要填入一个全零字节(但此字节不发送)。以二进制反码计算出这些16位字的和,再以此和的二进制反码写入校验和。接收方把收到的UDP数据报加上伪首部(及可能填充的全零字节)一起按二进制反码求和,并与校验和相加。当无差错时其结果应该为1。

4.套接字

UDP通过套接字来定位一个应用进程。

5.UDP的多路分用模型

一个UDP端口与一个报文队列(缓存相关联),UDP根据目的端口号将到达的报文加入对应的队列。应用进程根据需要从端口对应的队列读取整个报文。若报文到达的速度长期大于应用进程从队列读取报文的速度,则会导致队列移除和报文丢失。 端口队列中所有的报文的目的IP地址和目的端口号相同。

猜你喜欢

转载自blog.csdn.net/weixin_40729735/article/details/105147873
今日推荐