首页 > 代码库 > UDP的机制
UDP的机制
由于UDP是无连接服务,所以传输的每个数据报都和其他所有传输的数据报无关。即使不同的数据报源于相同的源进程,并且都是传输到相同的目的进程,它们之间也没有任何关系。用户数据报没有编号,也没有连接建立或连接终止序列。因此,每个数据报可能都是通过不同的路由传输的,并且接收数据报的顺序可能与发送顺序不同。
UDP的一个明显的缺点就是使用UDP的高层进程不能只向UDP软件发送一个数据流,然后通过这个软件把数据分割成一序列相关的数据报。相反,每个数据流必须小到足以适合单用户数据报。因此,UDP只适合发送短信息的进程。
UDP还是一个极其简单和非常不可靠的协议。在传输数据报以前,UDP不提供数据编码序列或任何交换缓冲区容量的机制。因此,没有办法控制数据的流量,如果消息超过了目的设备的缓冲区空间,目的设备可能就会被传入的消息淹没。
除了校验和以外,UDP协议没有其他的错误控制机制。校验和将检测大多数传输错误,但是,没有任何过程来要求重新传送被损坏的数据报。因此,被损坏的数据报将在不通知发送端的情况下被丢弃,而发送端却不知道这个数据报将永远到达不了目的地。如果有一个使用UDP的进程需要流量和、或错误控制机制,就必须为它提供进程层协议。
UDP数据报结构:包括大小可变的数据部分和大小固定的报头。
UDP报头包括了源端口号、目标端口号、UDP长度和UDP校验和 。
①源端口号:定义了使用UDP传输发送数据包的应用程序和进程。在某些情况下使用临时端口号。端口号有3个范围:公用端口、临时端口和动态端口。大多数情况下,不管是在UDP还是在TCP上的应用程序或进程都使用一个端口号,因为UDP和TCP分配的端口号相同。但是,在极少数情况下,UDP和TCP端口号的服务对象不同,例如,UDP端口520分配给路由信息协议,而TCP端口520分配给扩展文件对称服务进程。
②目标端口号:用来说明使用UDP传输的目标应用程序和进程。
③UDP长度:表示包含报头和数据在内的整个用户数据报的长度,一字节为单位。此字段的最小值是8。
④UDP校验和:表示一个根据存储在IP报头、UDP报头和数据中的值计算出来的值。为了将结果补足16位,需要在末端添加零。UDP校验和域是可选的。如果使用校验和,整个数据报的内容都要进行校验和计算,包括UDP报头(除了UDP校验和域本身)、数据报有效载荷源于IP首部和伪首部。UDP伪首部并不在数据包中,仅用来计算UDP首部的校验和,并把UDP首部和IP首部联系起来。
UDP的特性可以归纳为如下几点:
①UDP是面向事务的协议,它用最少的传输服务为应用向其他程序发送报文提供了一个途径。
②UDP是无连接的、不可靠的传递机制。在发送数据报前,UDP在发送和接收两者之间不建立连接。
③数据分组的封装和解包都建立在UDP使用的协议端口上。每个UDP数据报都包括一个熟知的端口号。
④UDP让用户能直接访问Internet层的数据报服务。
⑤数据报协议使用Internet协议(IP)作为数据传输机制的底层协议。
⑥UDP报头和数据都以最初传输时相同的形式被传送到最终目的地。
⑦UDP不提供确认,也不对数据的到达顺序加以控制。因此UDP报文可能会丢失。
⑧不实现数据分组和传送和重复检测。
⑨当分组没有被传送时,UDP不能报告错误。然而,在传送UDP包时,有效数据被传输给由源和目标端口号标识的正确应用。