udp 的概述(学习笔记-UDP简单理解)

上一章节我们介绍了TCP(详见学习笔记-TCP简单理解),这一章节我们来学习一下UDP。

UDP是什么

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是(Open System Interconnection,OSI) 参考模型中一种无连接的协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。IETF RFC 768 是UDP的正式规范。UDP在IP报文的协议号是17。

udp 的概述(学习笔记-UDP简单理解)(1)

UDP 的首部格式

用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,由四个字段组成,每个字段都是两个字节

udp 的概述(学习笔记-UDP简单理解)(2)

首部字段

源端口: 源端口号。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。

目的端口 :目的端口号。这在终点交付报文时必须使用

长度: UDP 用户数据报的长度,其最小值是8(仅有首部)

检验和: 检测 UDP 用户数据报在传输中是否有错。有错就丢弃。UDP和TCP的校验和都覆盖到了它们的首部和数据。

伪首部

udp 的概述(学习笔记-UDP简单理解)(3)

伪首部的源IP地址字段和目的IP地址字段记录了发送UDP报文时使用的源IP地址和目的IP地址。协议字段指明了所使用的协议类型代码(UDP是17),而长度字段是UDP数据报的长度。接收方进行正确性验证的时候,必须要把这些字段的信息从IP报文的首部中抽取出来,以伪首部的格式进行装配,然后再重新计算校验和。

UDP 用户数据报首部中检验和的计算方法有些特殊。在计算检验和时,要在 UDP 用户数据报之前增加 12 个字节的伪首部。所谓"伪首部"是因为这种伪首部并不是 UDP 用户数据报真正的首部。只是在计算检验和时,临时添加在 UDP 用户数据报前面,得到一个临时的 UDP 用户数据报。检验和就是按照这个临时用户数据报来计算的。伪首部既不向下传也不向上递交,而仅仅是为了计算检验和

主要特点

UDP是一个无连接协议。即发送数据之前不需要建立连接(发送数据结束时也没有连接可释放),减少了开销和发送数据之前的时延。传输数据时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。

尽最大努力交付。即不保证可靠交付,主机不需要维持复杂的连接状态表。

UDP是面向报文的。发送方的 UDP 对应用程序交下来的报文,在添加首部后就向下交付 IP 层。UDP 对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。

UDP 的首部开销小。只有8个字节,比 TCP 的20个字节的首部要短

UDP 没有拥塞控制。吞吐量不受拥挤控制算法的调节,只受生成数据的速率、传输带宽、源端和终端主机性能的限制。网络出现的拥塞不会使源主机的发送速率降低。

UDP 支持一对一、一对多、多对一和多对多的交互通信。

UDP的优缺点优点

①开销更小。TCP为了保证其可靠性,首部包含20字节,以及40字节的可选项,UDP首部只有8字节

②速度更快。UDP发送数据之前没有TCP的连接建立过程。TCP提供了过多的保护,在及时性上做了很多的妥协,比如:控制微包(Nagle算法),延时ACK,流量控制,超时重传等,这些设计严重影响了Tcp的速度和及时性

缺点

①丢失和乱序。因为UDP不提供ACK、序列号等机制,所以是没有办法知道是否有报文丢失以及接收方到达等报文顺序是否和发送方发送的报文数据一样;

②差错。对于差错问题则是可以通过校验和等检测到,但是不提供差错纠正。

③数据完整性。UDP协议头部虽然有16位的校验和,但是IPv4并不强制执行,也就是说UDP无法保证数据的完整性

UDP的封装

udp 的概述(学习笔记-UDP简单理解)(4)

在交给IP层之前,UDP给用户要发送的数据加上一个首部。IP层又给从UDP接收到的数据报加上一个首部。最后,网络接口层把数据报封装到一个帧里,再进行机器之间的传送。如图所示。帧的结构根据底层的网络技术来确定。通常网络帧结构包括一个附加的首部。

UDP的多路复用、多路分解和端口

udp 的概述(学习笔记-UDP简单理解)(5)

协议各层的软件都要对相邻层的多个对象进行多路复用和多路分解操作。UDP软件接收多个应用程序送来的数据报,把它们送给IP层进行传输,同时它接收从IP层送来的UDP数据报,并把它们送给适当的应用程序。UDP软件与应用程序之间所有的多路复用和多路分解都要通过端口机制来实现。实际上,每个应用程序在发送数据报之前必须与操作系统进行协商,以获得协议端口和相应的端口号。当指定了端口之后,凡是利用这个端口发送数据报的应用程序都要把端口号放入UDP报文的源端口字段中。在处理输入时,UDP从IP层软件接收了传入的数据报,根据UDP的目的端口号进行多路分解操作,如下图。理解UDP端的最简单的方式是把它看成是一个队列。在大多数实现中,当应用程序与操作系统协商,试图使用某个给定端口时,操作系统就创建一个内部队列来容纳收到的报文。通常应用程序可以指定和修改这个队列的长度。当UDP收到数据报时,先检查当前使用的端口是否就是该数据报的目的端口。如果不能匹配,则发送一个ICMP端口不可达报文并丢弃这个数据报。如果匹配,它就把这个数据报送到相应的队列中,等待应用程序的访问。当然,如果端口已满也会出错,UDP也要丢弃传入的这个数据报。

应用场合

由于缺乏可靠性且属于非连接导向协议,所以在选择UDP作为传输协议时必须要谨慎。在质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和就是使用的UDP协议。如果某个应用需要很高的可靠性,那么可以用传输控制协议(即TCP协议)来代替UDP。

使用UDP协议的应用有:域名系统(DNS)、简单网络管理协议(SNMP)、动态主机配置协议(DHCP)、路由信息协议(RIP)等等。因为UDP不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失几个数据包,也不会对接收结果产生太大影响。

本文的初衷为学习笔记的分享,部分图文来源于网络,如侵,联删。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页