UDP协议UDP协议UDP协议概述UDP只在IP的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊的优点。发送数据之前不需要建立连接UDP的主机不需要维持复杂的连接状态表。UDP用户数据报只有8个字节的首部开销。网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。UDP协议UDP协议UDP协议传输层(TCP与UDP)端到端通信主机1路由器路由器主机2端到端点到点点到点点到点网络1网络2UDP协议点到点通信:是由网络互联层来实现的,网络互联层只屏蔽了不同网络之间的差异,构建了一个逻辑上的通信网络,因此它只解决了数据通信问题。端到端通信:是建立在点到点通信基础之上的,它是比网络互联层通信更高一级的通信方式,完成应用程序(进程)之间的通信。端到端的通信是由传输层来实现的。UDP协议传输层端口的概念为了识别传输层之上不同的网络通信程序(进程),传输层引入了端口的概念。在一台主机上,要进行网络通信的进程首先要向系统提出动态申请,由系统(操作系统内核)返回一个本地惟一的端口号,进程再通过系统调用把自己和这个特定的端口联系在一起,这个过程叫绑定(Binding)。这样,每个要通信的进程都与一个端口号对应,传输层就可以使用其报文头中的端口号,把收到的数据送到不同的应用程序,如后图所示。UDP协议应用程序应用程序应用程序应用程序ICMPTCPUDPARPIPRARP以太网网络接口层以太网由传输层报头中的端口字段标识由IP数据报头中的上层协议字段标识由以太网帧类型字段标识……UDP协议在TCP/IP协议中,传输层使用的端口号用一个16位的二进制数表示。因此,在传输层如果使用TCP协议进行进程通信,则可用的端口号共有216个。由于UDP也是传输层一个独立于TCP的协议,因此使用UDP协议时也有216个不同的端口。UDP协议注意:硬件端口与软件端口在协议栈层间的抽象的协议端口是软件端口。路由器或交换机上的端口是硬件端口。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。最终目标的标识—UDP端口UDP和TCP都使用了与应用层接口处的端口(port)与上层的应用进程进行通信。图8-7说明了端口在进程之间的通信中所起的作用。最终目标的标识—UDP端口最终目标的标识—UDP端口若没有端口,运输层就无法知道数据应当交付给应用层的哪一个进程。端口是用来标识应用层的进程。图8-8举例说明了端口的作用。最终目标的标识—UDP端口最终目标的标识—UDP端口端口分类:一类是由因特网分配给一些常用的应用层程序固定使用的熟知端口,其数值一般为0~1023。另一类是临时端口,当写一种新的应用程序时,必须为它指派一个临时端口,否则其他的应用进程就无法和它进行交互。实际上,机器通常从1024起分配动态(临时)端口。UDP数据包格式UDP协议是建立在IP协议之上的,从进程的缓冲区输出一个UDP数据报,把生成的UDP数据报直接封装在IP数据报中进行传输,因此在传输层使用UDP协议时,发送端不需要发送缓冲区。UDP数据报头区UDP数据区IP数据区IP报头区UDP数据报IP数据报被封装在IP中的UDP数据报通过网络传输到目标主机的IP层后,由目标主机的UDP层根据目标端口号送到接收该数据的相应进程。UDP数据包格式用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节,如图8-11所示,由4个字段组成,每个字段都是两个字节。各字段意义如下所述:源端口字段:源端口号,可选项。目的端口字段:目的端口号。长度字段:UDP用户数据报的长度。检验和字段:可选项。UDP数据包格式UDP目标端口号(16位)0151631UDP源端口号(16位)UDP长度(16位)UDP校验和(16位)数据区UDP数据报头区UDP数据区IP数据区IP报头区UDP数据报IP数据报UDP数据包格式UDP数据包格式这个伪头部并不是UDP的真正组成部分,它只是为了UDP在进行差错检查时可以把更多的信息包含进去而人为加上的。伪头部的格式如图所示。协议(8位,UDP值为17)UDP长度(16位)填充域(8位,全0)目标端IP地址(32位)源端IP地址(32位)015163178UDP数据包格式伪头部包含IP头部的一些字段,填充域全填0,目的是使伪头部为16位二进制数的整数倍,这是计算校验和时所需要的。UDP长度为UDP数据报的总长(当然不能包括虚构的伪头部)。源端在发送UDP数据报时,使用构造的UDP伪头部和UDP数据报计算出校验和(校验和计算方法与IP头部校验和的计算方法相同),然后填入UDP头部。计算UDP检验和的例子1001100100010011→153.190000100001101000→8.1041010101100000011→171.30000111000001011→14.110000000000010001→0和170000000000001111→150000010000111111→10870000000000001101→130000000000001111→150000000000000000→0(检验和)0101010001000101→TE0101001101010100→ST0100100101001110→IN0100011100000000→G和0(填充)1001011011101011→求和得出的结果0110100100010100→检验和153.19.8.104171.3.14.1112字节伪首部8字节UDP首部7字节数据填充按二进制反码运算求和将得出的结果求反码全0171510871315全0TESTING全0UDP校验和的计算UDP使用伪头部结构来计算校验和。在发送方将伪头部与UDP数据包一起计算校验和后发送给接收方,接收方同样计算后进行比较,如对,说明是给本机的,且数据没错。伪头部没有传输!还是为了可靠,可以不选。标准UDP端口UDP数据包中,源端口字段可选,目标端口字段必须指定。接收主机发现IP协议字段为17,就将数据交给UDP协议处理。标准UDP端口UDP端口号关键词描述53Domain域名服务器67BootPS引导协议服务器68BootPC引导协议客户机69TFTP简单文件传输协议161SNMP简单网络管理协议162SNMP-TRAP简单网络管理协议陷阱两台要通信的主机,每一端要使用一个二元地址(IP地址,端口号)才可以完成它们之间的通信。标准UDP端口UDP协议的特点UDP对数据的封装非常简单,主要是增加了端口号与校验和,就直接通过IP层进行传输了,因此具有以下特点:(1)UDP是一种无连接、不可靠的数据报传输服务协议。(2)UDP对数据传输过程中惟一的可靠保证措施是进行差错校验,如果发生差错,则只是简单地抛弃该数据报。(3)如果目标端收到的UDP数据报中的目标端口号不能与当前已使用的某端口号匹配,则将该数据报抛弃,并发送目标端口不可达的ICMP差错报文。标准UDP端口(4)UDP协议在设计时的简单性,是为了保证UDP在工作时的高效性和低延时性。因此,在服务质量较高的网络中(如局域网),UDP可以高效地工作。(5)UDP常用于传输延时小,对可靠性要求不高,有少量数据要进行传输的情况,如DNS(域名服务)、TFTP(简单文件传输)等。