关于UDP协议的介绍

UDP用户数据报头格式:

; 源端口是可选域 , 当其有意义时 , 它指的是发送进程的端口 , 这也就假定了在没有其它信息的情况下 , 返回信息应该向什么地方发送 。假如不使用它 , 则在此域中填0 。目的端口在有特定的目的网络地址时有意义 。长度指的是此用户数据报长度的八进制表示 。(这表明最小的数据报长度是8 。)校验码有16位 , 是对IP头 , UDP头和数据中信息包头的数位取反之和再取反得到的 。
; 包头从概念上说是在UDP头信息之前的 , 它包括有源地址 , 目的地地址 , 所使用的协议和UDP长度 。这些信息使信息不能被错误地接收 。这个校验过程与TCP中使用的过程一致 。


假如计算出的校验码为零 , 它将被全零发送 。全零的校验值意味着发送者未产生校验码 。
用户接口
; 用户接口应该答应创建新的接收端口 , 在接收端口的接收操作有:应该返回一个八进制数说明源端口和源地址 , 答应数据报传送 , 指定数据 , 源和目标端口和目的地地址 。
IP层接口
; UDP模块必须能够决定源和目标的网络地址 , 而且必须能够从包头中得知所使用的协议 。一个可能的接口方式是返回整个数据报 , 包括接收操作返回的包头 。这样的接口还应该答应UDP向IP传送完整的带包头的数据报用于传送 。由IP来确定一致性并计算校验码 。
协议应用
; 此协议的最主要的用途是网际名称服务器和小文件传输协议 。
协议号
; 在IP中使用它时 , 它的协议号是17(八进制中是21) 。
UDP协议的标题结构
UDP信息包由UDP标题和数据组成 。UDP的标题结构如图15-21所示,它由5个域组成:源端端口(Source Port)、目的地端口(Destination Port)、用户数据包的长度(Length)和检查和(Checksum) 。其中 , 前4个域组成UDP标题(UDP header) , 每个域由4个字节组成;检查和域占据2个字节 , 它用来检测传输过程中是否出现了错误;用户数据包的长度包括所有5个域的字节数 。

UDP信息包的标题结构
; 检查和的具体计算可在RFC 1071中找到 , 现举一例说明使用检查和检测错误的道理 。例如 , 假设从源端A要发送下列3个16位的二进制数:Word1 , word2和word3到终端B , 检查和计算如下:
word1; ; 0110011001100110
word2; ; 0101010101010101
word3; ; 0000111100001111
sum=word1word2word3; ;1100101011001010
检查和(sum的反码); ; 0011010100110101
; 从发送端发出的4个(word1 , 2 , 3以及检查和)16位二进制数之和为1111111111111111 , 假如接收端收到的这4个16位二进制数之和也是全“1” , 就认为传输过程中没有出差错 。
; 许多链路层协议都提供错误检查 , 包括流行的以太网协议 , 读者也许想知道为什么UDP也要提供检查和 。其原因是链路层以下的协议在源端和终端之间的某些通道可能不提供错误检测 。虽然UDP提供有错误检测 , 但检测到错误时 , UDP不做错误校正 , 只是简单地把损坏的消息段扔掉 , 或者给应用程序提供警告信息 。
; 读者也可能会问 , 收发两端的两个进程是否有可能通过UDP提供可靠的数据传输?答案是可以的 。但必需要把确认和重传措施加到应用程序中 , 应用程序不能指望UDP来提供可靠的数据传输 。
【关于UDP协议的介绍】UDP协议的几个特性
(1) UDP是一个无连接协议 , 传输数据之前源端和终端不建立连接 , 当它想传送时就简单地去抓取来自应用程序的数据 , 并尽可能快地把它扔到网络上 。在发送端 , UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端 , UDP把每个消息段放在队列中 , 应用程序每次从队列中读一个消息段 。

推荐阅读