UDP协议详解

一、UDP报头结构

UDP是无连接的,不可靠的运输协议。

8个字节首部

数据

总长度 8-65535个字节

首部结构:

源端口号 16位

目的端口 16位

总长度 16位

检验和 16位

源(目的)端口号:源(目的)主机是客户端,UDP随机选择一个临时的端口号。源(目的)主机是服务器的,大多是是一个熟知的端口号,即:提供什么样的协议服务,就用什么样的端口号。比如:DNS:53,SNMP:161。

总长度:首部+数据的总长度,单位byte。不过实际的总长度要比65535小,因为UDP的包到网络层还需要封装IP报头。所以实际的数据长度最大为:65535-8-20=65507

检验和:检验整个数据包,而且数据必须进行填充使数据是16的倍数,还要加上伪首部:

  源ip

目的ip

全0

8位协议

16位UDP总长度

增加源ip,目的ip主要是为了防止ip首部收到损伤,交付到错误的主机。

8位协议:17。 确保使用的协议是UDP。

二、复用和分用

UDP支持一对一、一对多、多对多的通信。

1、复用

在发送端,可能有多个进程要发送数据报,但只有一个UDP。多对一,因而需要复用。UDP接受来自不同的进程的报文,这些进程就通过指派给他们的端口号进行区分。在添加了首部之后,UDP就把数据报送往ip。

2、分用

在接收端也只有一个UDP。但我们可能有多个进程都接收UDP包,一对多的关系,因而需要分用。UDP接受来自ip的用户数据报后,经过差错检查并剥除首部后,UDP根据端口号把每一个报文交付到适当的进行。

三、排队

在UDP中队列与端口相关联。在客户端,当一个进行启动时,它从操作系统那请求得到一个端口号,一些编译程序为进程生成输入队列和输出队列。

注意:即使一个进程与多个进程通信,该进程也只能获得一个端口号,一个输出队列和一个输入队列。通常,短暂端口号标识客户端的队列,队列和进程同时存在,当进程结束,队列就被销毁。

客户进程通过输出队列使用源端口号发送特别请求。UDP一个一个地移动这些消息,在完成添加UDP头后,将数据移交至IP层,一个输出队列有可能溢出。如果发生这种情况,操作系统会通知客户进程等待一会。  当一个消息抵达客户端,UDP检查是否有接收到的用户数据包中端口号标识的输入队列,如果有该队列,UDP将接收到的数据送入该输入队列的尾部,如果没有该队列,UDP丢弃该数据报并发送一个icmp端口不可达报文(type=3,code=3)给服务器端,当输入队列溢出时,UDP丢弃溢出的用户数据包并发送一个端口不可达报文。

服务端跟客户端基本一样。不过服务器进行在它开始运行时就请求为它的熟知端口创建了入队列和出队列。

四、UDP应用

UDP协议是基于无连接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,因此效率比TCP要高。UDP一般用于即时通信(对数据准确性和丢包要求比较低,但速度必须快),在线视频(速度一定要快,保证视频连续,但是偶尔花了一个图像帧,人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等。UDP主要用于那些面向查询——应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。使用UDP的服务包括NTP(网落时间协议)和DNS(DNS也使用TCP)。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值