传摘要:UDP是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,UDP协议基本上是IP协议与上层协议的接口。本文中对UDP协议进行一下具体的讲述,在第一章中将介绍UDP的基本概念,UDP协议的端口,长度和效验及其计算等方面的问题;在第二章中介绍了UDP数据的封装与拆装以及它的应用。第一章UDP基本原理1.1UDP基本概念以及适用范围:1.1.1UDP的基本概念UDP,即用户数据报协议(UserDatagramProtocol)[5]。作为运输层协议,UDP使用端口号来完成进程到进程之间的通信,UDP在运输层提供非常有限的流控制机制,在收到分组时没有流控制也没有确认。但是,UDP提供了某种程度的差错控制。如果UDP检测出在收到的分组有一个差错,它就悄悄的丢弃这个分组。UDP不负责为进程提供连接机制,它只从进程接收数据单元,并将他们不可靠的交付给接收端。数据单元必须足够小,能够装进到一个UDP分组中。所以,UDP提供的是无连接的、不可靠的运输服务。1.1.2UDP的适用范围[7](1)UDP适用于需要简单的请求-响应通信,而较少考虑流控制和差错控制的进程;(2)UDP适用于具有内部流控制和差错控制机制的进程。例如,简单文件传送协议(TFTP)的进程就包括流控制和差错控制,它能够很容易的使用UDP;(3)对多播和广播来说,UDP是个合适的运输协议。多播和广播能力已经嵌入在UDP软件中,但没有嵌入到TCP软件中;(4)UDP可用于进程管理,如SMTP;(5)UDP可用于某些路由选择更新协议,如路由选择信息协议RIP。1.1.3UDP协议的建立以及使用的优点[3]协议是建立在IP协议之上的,从进程的缓冲区输出一个UDP数据报,把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输层使用UDP协议时,发送端不需要发送缓冲区,图1所示:UDP数据报IP数据报图1尽管与IP协议类似,UDP提供的也是无连接的,不可靠的数据报传递服务,但是,有别于IP协议的是:1.UDP提供了端到端的通信机制2.增加了对数据区的完整性校验在网络通信中使用UDP协议的好处:在少量数据的传输时,使用UDP协议传输信息流,可以减少TCP连接的过程,提高工作效率。但是使用UDP协议还有很多不足:当使用UDP协议传输信息流时,用户应用程序必须负责解决数据报排序,差错确认等问题。在多媒体应用中,常用TCP支持数据传输,UDP支持音频/视频传输。UDP数据报头区UDP数据区IP报头区IP数据区1.2UDP特点及其其应用[8](1)UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当UDP它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。(2)由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。(3)UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。(4)吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。(5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。(6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。由于缺乏拥塞控制(congestioncontrol),需要基于网络的机制来减小因失控和高速UDP流量负荷而导致的拥塞崩溃效应。换句话说,因为UDP发送者不能够检测拥塞,所以像使用包队列和丢弃技术的路由器这样的网络基本设备往往就成为降低UDP过大通信量的有效工具。数据报拥塞控制协议(DCCP)设计成通过在诸如流媒体类型的高速率UDP流中增加主机拥塞控制来减小这个潜在的问题。虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP(RoutingInformationProtocol)[5]中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。UDP广泛用在多媒体应用中,例如,ProgressiveNetworks公司开发的RealAudio软件,它是在因特网上把预先录制的或者现场音乐实时传送给客户机的一种软件,该软件使用的RealAudioaudio-on-demandprotocol协议就是运行在UDP之上的协议,大多数因特网电话软件产品也都运行在UDP之上。UDP只是在IP的数据服务之上增加了很少的一点功能,即端口的功能和差错检验的功能。但是UDP不提供可靠性:他把应用程序封装后传给IP层,被IP层封装后发送出去,但是不保证他们到达目的地,但UDP在某些方面有其特殊的优点[10]:1.发送数据前不需要建立连接2.UDP的主机不需要维持复杂的链接状态表3.UDP用户数据报只有8个字节的首部开销4.网络出现的拥塞不会使源主机的发送数据降低,这对某些实现应用是很重要的。1.3UDP协议中涉及的的几个基本概念[9]1.3.1点到点通信点到点通信:是由网络互联层来实现的网络互联层只屏蔽了不同网络之间的差异,构建了一个逻辑上的通信网络,因此他只解决了数据通信问题。1.3.2端到端通信端到端通信:IP协议在IP数据包的包头增添了IP地址,根据IP地址,路由器可以一站一站的将数据包从源主机路由到目标主机,依靠IP地址,IP协议实现了点到点的通信如图2所示:,它是建立在点到点通信基础上的,他是比网络互联层通信更高一级的通信方式,完成应用程序(进程)之间的通信,端到端的通信是由传输层来实现的。网络1网络2传输层端到端通信图2端到端通信——IP地址+端口如图3所示:主机1路由器主机2路由器QQ腾讯公司QQServerWebServerClientIE浏览器CDAB进程进程(服务器端(客户机端应用程序)应用程序)800080(端口号)(端口号)178952100用户数据报服务器端客户端用户数据报图3IP地址+端口对定义了端到端通信,例如(202.115.65.71,1500)和(202.115.64.37,80)1.3.3UDP协议的作用[2]UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。UDP/TCPUDP/IP178980005210080521008017898000UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。1.3.4UDP协议的应用[13]既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。关于UDP协议的最早规范是RFC768,1980年发布。尽管时间已经很长,但是UDP协议仍然继续在主流应用中发挥着作用。包括视频电话会议系统在内的许多应用都证明了UDP协议的存在价值。因为相对于可靠性来说,这些应用更加注重实际性能,所以为了获得更好的使用效果(例如,更高的画面帧刷新速率)往往可以牺牲一定的可靠性(例如,画面质量)。这就是UDP和TCP两种协议的权衡之处。根据不同的环境和特点,两种传输协议都将在今后的网络世界中发挥更加重要的作用。1.4端口[4]1.4.1传输层端口传输层端口的概念:为了识别传输层之上不同的网络通信程序(进程),传输层引入了端口的概念,在一台主机上,要进行网络通信的进程首先要向系统提出动态申请,由系统(操作系统内核)返回一个本地唯一的端口号,进程再通过系统调用把自己和这个特定的端口联系在一起,这个过程叫绑定。这样,每个要通信的进程都与一个端口号对应,传输层就可以使用其报文中的端口号,把收到的数据传送到不同的应用程序,如图4所示以太网图4在TCP/IP协议中,传输层使用的端口号用一个16位的二进制数表示,因此,在传输层如果使用TCP协议进行进程通信,则可用的端口号共有2的16次方个不同的端口。由于UDP也是传输层一个独立于TCP的协议,因此使用UDP协议时也有2的16个不同的端口应用程序应用程序应用程序应用程序TCPUDPICMPRARPIPARP以太网网络接口层由传输层报头中的端口字段标识由IP数据报头中的上层协议字段标识由以太网帧类型字段标识1.4.2UDP端口---最终目标的标识端口分类: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端口号关键词描述53Domain域名服务器67Bootps引导协议服务器68Bootpc引导协议客户机69TFTP简单文件传输协议161SNMP简单网络管理协议162SNMP-TRAP简单网络管理协议陷阱图5两台要通信的主机,每一端要使用一个二元地址(IP地址,端口号)才可以完成他们之间的通信。UDP和TCP都使用了与应用层接口处的端口与上层的应用进程进行通信。图6说明了端口在进程之间的通信中所起的作用应用进程应用进程应用进程应用进程应用层运输层TCP报文段用户数据报TCP报文段用户数据报网络层IP数据报IP数据报图6端口在进程之间的通信中所起的作用端口端口端口端口端口端口端口端口TCP复用UDP复用UDP分用TCP分用NASPNASPNASPNASPIP复用IP复用若没有端口,运输层就无法知道数据应当交付给应用层的哪一个进程,端口是用来表示应用层的进程,图7举例说明了端口的作用计算机A计算机C连接1连接2计算机B连接3图7与主机C的SMTP建立三个连接1.4.4UDP熟知端口号[13]UDP使用的熟知端口IP=131.6.23.13IP=128.36.1.22IP=130.42.85.15端口1500端口1501端口25端口1500端口协议说明7ECHO将收到的数据报回送到发送器9DISCARD丢弃任何收到的数据报11USERS活跃的用户13DAYTIME返回日期和时间53NAMESERVER域名服务67BOOTPS下载引导程序信息的服务器端口68BOOTPC下载引导程序信息的客户端口69TFTP简单文件传送协议111RPC远程过程调用123NTP网络时间协议161SNMP简单网络管理协议162SNMP简单网络管理协议协议端口号的指定的两种方式:方式一:使用集中式管理机构。这个机构负责指派协议端