2024年6月1日发(作者:)
传摘要:UDP是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息
传送服务,UDP协议基本上是IP协议与上层协议的接口。本文中对UDP协议进行一下具体
的讲述,在第一章中将介绍UDP的基本概念,UDP协议的端口,长度和效验及其计算等方面
的问题;在第二章中介绍了UDP数据的封装与拆装以及它的应用。
第一章 UDP基本原理
1.1 UDP基本概念以及适用范围:
1.1.1 UDP的基本概念
UDP,即用户数据报协议(User Datagram Protocol)
[5]
。作为
运输层协议,UDP使用端口号来完成进程到进程之间的通信,UDP在
运输层提供非常有限的流控制机制,在收到分组时没有流控制也没有
确认。但是,UDP提供了某种程度的差错控制。如果UDP检测出在收
到的分组有一个差错,它就悄悄的丢弃这个分组。UDP不负责为进程
提供连接机制,它只从进程接收数据单元,并将他们不可靠的交付给
接收端。数据单元必须足够小,能够装进到一个UDP分组中。所以,
UDP提供的是无连接的、不可靠的运输服务。
1.1.2 UDP的适用范围
(1)UDP适用于需要简单的请求-响应通信,而较少考虑流控制
和差错控制的进程;
(2)UDP适用于具有内部流控制和差错控制机制的进程。例如,
简单文件传送协议(TFTP)的进程就包括流控制和差错控制,它能够
很容易的使用UDP;
(3)对多播和广播来说,UDP是个合适的运输协议。多播和广
[7]
播能力已经嵌入在UDP软件中,但没有嵌入到TCP软件中;
(4)UDP可用于进程管理,如SMTP;
(5)UDP可用于某些路由选择更新协议,如路由选择信息协议
RIP。
1.1.3 UDP协议的建立以及使用的优点
协议是建立在IP协议之上的,从进程的缓冲区输出一个UDP数
据报,把生成的UDP数据报直接封装在IP 数据报中进行传输,因此
在传输层使用UDP协议时,发送端不需要发送缓冲区,图1所示:
UDP数据报
IP数据报
[3]
UDP数据报头区 UDP数据区
IP报头区 IP数据区
图1
尽管与IP协议类似,UDP提供的也是无连接的,不可靠的数据
报传递服务,但是,有别于IP协议的是:
提供了端到端的通信机制
2.增加了对数据区的完整性校验
在网络通信中使用UDP协议的好处:在少量数据的传输时,使
用UDP协议传输信息流,可以减少TCP连接的过程,提高工作效率。
但是使用UDP协议还有很多不足:当使用UDP协议传输信息流时,用
户应用程序必须负责解决数据报排序,差错确认等问题。在多媒体应
用中,常用TCP支持数据传输,UDP支持音频/视频传输。
1.2 UDP特点及其其应用
(1) UDP是一个无连接协议,传输数据之前源端和终端不建立
连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽
可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受
应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收
端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消
息段。
(2) 由于传输数据不建立连接,因此也就不需要维护连接状态,
包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消
息。
(3) UDP信息包的标题很短,只有8个字节,相对于TCP的20
个字节信息包的额外开销很小。
(4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据
的速率、传输带宽、源端和终端主机性能的限制。
(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机
不需要维持复杂的链接状态表(这里面有许多参数)。
(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报
文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是
[8]
保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
由于缺乏拥塞控制(congestion control),需要基于网络的机制来
减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,
因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路
由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工
具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速
率UDP流中增加主机拥塞控制来减小这个潜在的问题。虽然UDP是一
个不可靠的协议,但它是分发信息的一个理想协议。
例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP
也用在路由信息协议RIP(Routing Information Protocol)
[5]
中修
改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另
一个新的消息就会替换它。UDP广泛用在多媒体应用中,例如,
Progressive Networks公司开发的RealAudio软件,它是在因特网
上把预先录制的或者现场音乐实时传送给客户机的一种软件,该软件
使用的RealAudio audio-on-demand protocol协议就是运行在UDP
之上的协议,大多数因特网电话软件产品也都运行在UDP之上。UDP
只是在IP的数据服务之上增加了很少的一点功能,即端口的功能和
差错检验的功能。但是UDP不提供可靠性:他把应用程序封装后传给
IP层,被IP层封装后发送出去,但是不保证他们到达目的地,但UDP
在某些方面有其特殊的优点
[10]
:1.发送数据前不需要建立连接2.UDP
的主机不需要维持复杂的链接状态表用户数据报只有8个字节
的首部开销4.网络出现的拥塞不会使源主机的发送数据降低,这对
某些实现应用是很重要的。
1.3 UDP协议中涉及的的几个基本概念
[9]
1.3.1 点到点通信
点到点通信:是由网络互联层来实现的网络互联层只屏蔽了不同
网络之间的差异,构建了一个逻辑上的通信网络,因此他只解决了数
据通信问题。
1.3.2 端到端通信
端到端通信:IP协议在IP数据包的包头增添了IP地址,根据IP
地址,路由器可以一站一站的将数据包从源主机路由到目标主机,依
靠IP地址,IP协议实现了点到点的通信如图2所示:,它是建立在
点到点通信基础上的,他是比网络互联层通信更高一级的通信方式,
完成应用程序(进程)之间的通信,端到端的通信是由传输层来实现
的。
主机1 路由器 路由器 主机2
网络1 网络2
传输层端到端通信
图2
端到端通信——IP地址+端口 如图3所示:
QQ 腾讯公司 QQ
Server Web Server Client IE浏览器
C D A B
进程 进程
(服务器端 (客户机端
应用程序) 应用程序)
8000 80 (端口号) (端口号)1789 52100
UDP/TCP
用户数据报
UDP/IP
1789 8000
52100 80
服务器端 客户端
52100 80
1789 8000
用户数据报
图3
IP地址+端口 对定义了端到端通信,例如
(202.115.65.71,1500)和(202.115.64.37,80)
1.3.3 UDP协议的作用
UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一
个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前
8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
[2]
UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被
一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常
实用和可行的网络传输层协议。
1.3.4 UDP协议的应用
[13]
既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必
要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为
UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安
全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑
使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将
安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使
速度得到了保证。关于UDP协议的最早规范是RFC768,1980年发布。
尽管时间已经很长,但是UDP协议仍然继续在主流应用中发挥着作
用。包括视频电话会议系统在内的许多应用都证明了UDP协议的存在
价值。因为相对于可靠性来说,这些应用更加注重实际性能,所以为
了获得更好的使用效果(例如,更高的画面帧刷新速率)往往可以牺
牲一定的可靠性(例如,画面质量)。这就是UDP和TCP两种协议的
权衡之处。根据不同的环境和特点,两种传输协议都将在今后的网络
世界中发挥更加重要的作用。
1.4 端口
[4]
1.4.1 传输层端口
传输层端口的概念:为了识别传输层之上不同的网络通信程序(进
程),传输层引入了端口的概念,在一台主机上,要进行网络通信的
进程首先要向系统提出动态申请,由系统(操作系统内核)返回一个
本地唯一的端口号,进程再通过系统调用把自己和这个特定的端口联
系在一起,这个过程叫绑定。这样,每个要通信的进程都与一个端口
号对应,传输层就可以使用其报文中的端口号,把收到的数据传送到
不同的应用程序,如图4所示
应用程序
ICMP
ARP
以太网
应用程序 应用程序 应用程序
TCP UDP
由传输层报头中的
端口字段标识
由IP数据报头中的
上层协议字段标识
IP RARP
由以太网帧类型字
段标识
以太网网络接口层
图4
在TCP/IP协议中,传输层使用的端口号用一个16位的二进制数
表示,因此,在传输层如果使用TCP协议进行进程通信,则可用的端
口号共有2的16次方个不同的端口。
由于UDP也是传输层一个独立于TCP的协议,因此使用UDP协议
时也有2的16个不同的端口
1.4.2 UDP端口---最终目标的标识
端口分类:1.是由因特网分配给一些常用的应用层程序固定使用
的熟知端口,其数值一般为0~1023;2.是临时端口,当写一种新的
应用程序时,必须为他指派一个临时端口,否则其他的应用程序就无
法和它进行交互。而实际上,机器通常从1024起分配动态(临时)
端口。
由于大多数网络应用程序都在同一台机器上运行,计算机上必须
能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以
及源计算机能收到正确的回复。这是通过使用 UDP的“端口号”完
成的。例如,如果一个工作站希望在工作站 128.1.123.1 上使用域
名服务系统,它就会给数据包一个目的地址 128.1.123.1 ,并在 UDP
头插入目标端口号 53 。源端口号标识了请求域名服务的本地机的应
用程序,同时需要将所有由目的站生成的响应包都指定到源主机的这
个端口上。
1.4.3标准UDP端口:
UDP数据包中,源端口字段可选,目标端口字段必须指定,接收
主机发现IP协议字段为17,就将数据交给UDP协议处理,图5对端
口号进行了描述:
DUP端口号
53
67
68
关键词
Domain
Bootps
Bootpc
描述
域名服务器
引导协议服务器
引导协议客户机
69
161
162
TFTP
SNMP
SNMP-TRAP
简单文件传输协议
简单网络管理协议
简单网络管理协议陷阱
图5
两台要通信的主机,每一端要使用一个二元地址(IP地址,端
口号)才可以完成他们之间的通信。
UDP和TCP都使用了与应用层接口处的端口与上层的应用进程进
行通信。图6说明了端口在进程之间的通信中所起的作用
应用进程 应用进程 应用进程 应用进程
应
用
层
端口 端口 端口 端口 端口 端口 端口 端口
运
输
层
TCP复用 UDP复用 TCP分用 UDP分用
TCP报文段 用户数据报 TCP报文段 用户数据报
网
NASP NASP NASP NASP
络
层
IP复用 IP复用
IP数据报 IP数据报
图6端口在进程之间的通信中所起的作用
若没有端口,运输层就无法知道数据应当交付给应用层的哪一个
进程,端口是用来表示应用层的进程,图7举例说明了端口的作用
计算机A
IP=131.6.23.13
连接1
端口
1500
连接2
端口
1501
计算机C
IP=130.42.85.15
端口
25
计算机B
IP=128.36.1.22
连接3
端口
1500
图7 与主机C的SMTP建立三个连接
1.4.4 UDP熟知端口号
UDP使用的熟知端口
[13]
端口
7
9
11
13
53
67
68
69
111
123
161
162
协议
ECHO
DISCARD
USERS
DAYTIME
NAMESERVER
BOOTPS
BOOTPC
TFTP
RPC
NTP
SNMP
SNMP
说 明
将收到的数据报回送到发送器
丢弃任何收到的数据报
活跃的用户
返回日期和时间
域名服务
下载引导程序信息的服务器端口
下载引导程序信息的客户端口
简单文件传送协议
远程过程调用
网络时间协议
简单网络管理协议
简单网络管理协议
协议端口号的指定的两种方式:
方式一:使用集中式管理机构。这个机构负责指派协议端口并发
布这些指派。所有的软件在设计时都要遵从这些指派的规定。这种方
式又称为统一指派(UNIVERSAL ASSIGNMENT),这些被管理机构指定
的端口指派也叫知名端口(WELL-KNOWN PORT)的指派。
方式二:使用动态绑定(DYNAMIC BINDING)。当一个应用程序
需要使用端口时,网络软件就指定一个端口。为了知道另一台机器上
的当前端口号,就必须送出一个请求报文,然后目的主机进行回答,
把正确的端口号送回来。
TCP/IP采用一种混合方式对端口地址进行管理,对某些常用服
务的端口进行指派,但为本地站点和应用程序留下了很大的端口取值
范围。
1.5插口地址
[12]
UDP需要两个标识符,IP地址和端口号。一个IP地址与一个端
口号合起来就叫做插口地址(SOCKER ADDRESS)。客户插口地址唯一
地定义了客户进程,而服务器插口地址唯一地定义了服务器进程(见
下图8)。
202.114.200.254 53
202.114.200.254 53
插口地址
图8
要使用UPD的服务,需要一对插口地址:客户端插口地址和服务
器端插口地址。至四种信息是IP首部和UDP首部的一部分。IP首部
包括IP地址,UDP首部包括端口号。
被封装在IP中的UDP数据报通过网络传输到目标主机的IP层
后,由目标主机的UDP层根据目标端口号送到接收该数据的相应进
程。
1.6 用户数据报
[9]
用户数据报UDP(图F所示为UDP用户数据报的首部和伪首部)
有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,
如图9所示,由4个字段组成,每个字段都是两个字节,各字段意义
如下所述:
源端口字段:源端口号,可选项。
目的端口字段:目的端口号。
长度字段:UDP用户数据报的长度。
检验和字段:可选项。
UDP源端口号(16位) UDP目标端口号(16位)
UDP长度(16位) UDP校验(16位)
0 15 16 31
数据区
图9 UDP数据报
最大UDP数据报长度:
1.理论上,IP数据报的最大长度是65535字节,这是由IP首
部16比特总长度字段所限制的2.取出20字节的IP首部8个字节的
UDP首部UDP数据报中的用户数据的最长长度为65507字节3,但是,
大多数实现所提供的长度比这个最大值小
主要原因:
[11]
1.应用程序可能会受到其程序接口的限制。Socket
API提供了一个可供应用程序调用的函数,以设置接受和发送缓存的
长度,对于UDP socket,这个长度与应用程序可以读写的最大UDP
数据报的长度有关,现在的大部分系统都默认提供了可读写大于8192
字节的UDP数据报(使用这个默认值是因为8192是NFS读写用户数
据数的默认值)。2.因为TCP/IP的内核实现,存在一些实现特性(或
差错),使数据报长度小于65535字节.
字节 4 4 1 1 2
字节 12 2 2 2 2
伪首部
首部 数 据
UDP用户数据段
首 部 数 据
IP数据报
图10 UDP用户数据报的首部和伪首部
在图10中伪首部并不是UDP的真正组成部分,他只是为了UDP
在进行差错检查时可以把更多的信息包含进去而人为加上的其中伪
头部的格式如图11所示
源 端IP地址(32位)
7 8 15 16 31 0
目标端IP地址(32位)
填充域(8位,全0) 协议(8位,UDP值为17) UDP长度(16位)
图11
伪头部包含IP头部的一些字段,填充域全填0,目的是使伪头
部为16位二进制数的整数倍,这是计算校验和时所需要的,UDP长
度为UDP数据报的总长(当然不能包括虚构的伪头部)。
源端在发送UDP数据报时,使用构造的UDP伪头部和UDP数据报
计算出校验和(校验和计算方法与IP伪头部校验和的计算方法相
同),然后填入UDP头部。
1.7 UDP校验和的计算
[8]
1.7.1 校验和计算步骤
1.构造该数据包的伪头部图12
目的IP地址
0 协议(17) UDP长度
图12
2.将UDP数据包的校验和字段设置为0 图13
16位源端口号 16位目的端口号
16位UDP长度 UDP校验和设置0
数据
图13
3.将UDP数据报连接在伪头部的后面,将UDP数据包的长度补足
16位的整数倍 图14
UDP伪头部 UDP包头 UDP数据 填充0
图14
4.最后,将IP协议校验和计算方法对整个数据结构作校验和计
算并填入UDP校验和字段
例题:图15(计算UDP检验和的例子)
10011001 00010011 1.53.19
153.19.8.104
00001000 01101000 8.104
12字节伪首部
171.3.14.11
10101011 00000011 171.3
00001110 00001011 14.11
全0 17 15
00000000 00010001 0和17
1087 13
8字节UDP首部 00000000 00001111 15
15
全
0
00000100 00111111 1087
00000000 0000 1101 13
7字节数据
数据
数据
数据
数据
00000000 00001111 15
数据
数据
数据
全
0
00000000 00000000 0(校验和)
01010100 01000101 数据
01010011 01010100 数据
填充 01001001 01001110 数据
01000111 00000000 数据和0(填充)
UDP校验和
按二进制反码运算求和 10010110 11101011 和
求解果的反码 01101001 00010100 校验和
图15
注:UDP的检验和是可选的,而TCP的检验和是必须的
如果传送的检验和为0,说明发送端没有计算检验和
如果发送端没有计算检验和而接收端检测到检验和有差错,那么
UDP数据报就要被悄悄的抛弃,不产生任何差错报文
UDP检验和选项在默认条件下是打开的
尽管UDP检验和是可选的,但是他们应该总是在用
UDP数据报的长度在检验和的计算过程中出现两次
1.7.2校验值的作用
UDP协议使用报头中的校验值来保证数据的安全。校验值首先在
数据发送方通过特殊的算法计算得出,在传递到接收方之后,还需要
再重新计算。如果某个数据报在传输过程中被第三方篡改或者由于线
路噪音等原因受到损坏,发送和接收方的校验计算值将不会相符,由
此UDP协议可以检测是否出错。这与TCP协议是不同的,后者要求必
须具有校验值。许多链路层协议都提供错误检查,包括流行的以太网
协议,也许想知道为什么UDP也要提供检查和。其原因是链路层以下
的协议在源端和终端之间的某些通道可能不提供错误检测。虽然UDP
提供有错误检测,但检测到错误时,UDP不做错误校正,只是简单地
把损坏的消息段扔掉,或者给应用程序提供警告信息。
[8]
1.8 UDP数据包
[13]
UDP数据包,是一种无连接的协议。在OSI模型中,在第四层——
传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和
不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法
得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传
输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务
器模式的网络应用都需要使用UDP协议.
UDP数据包格式如下图所示:
0 16 31
16位源端口号(可选)
16位UDP长度
16位目的端口号(必须)
16位UDP校验和(可选)
数 据


发布评论