UDP

UDP协议通常称为用户数据报协议。它跟TCP、SCTP等协议同处于网络模型中的传输层,位于IP层之上,应用层之下。现在已经提到过,IP层负责路由,将一个IP数据报传送到目的地址。所以IP层解决的是主机到主机的路由问题。那么传输层是做什么的呢?顾名思义,传输层的作用就是负责数据的发送和接收。它一方面按照应用层程序的要求将一个数据报交给IP层路由到目的主机,另一方面又将IP层递交过来的数据报按照目的端口递交到不同的上层应用程序。

 

UDP协议是最简单的传输层协议,简单到连RFC也才只有3页内容。它描述了UDP的用途、基本报文格式和跟相邻层的接口。UDP协议是一种面向事务的无连接的协议。它只负责简单的收发数据,而不负责流量控制、差错检测和重传等事情。所以对于一些对即时性要求比较高,而对差错不太敏感的上层协议,比如DNS、VOIP等,UDP是一个很好的选择。而如果上层应用对可靠性要求比较高,那就最好不要使用UDP协议。

 

UDP的报文格式非常简单:

UDP_第1张图片

其中长度字段表示整个UDP数据报,包含UDP头部的长度,其单位是8位字节。所以如果长度字段的值为20,则表示头部为4字节,数据部分为16字节。

 

端口这个概念通常表示的一种与应用程序之间的关联关系。就好比我们去饭店吃饭,点完菜后店员会在每个桌上放一个桌牌。等到服务员上菜的时候,他就知道把这个菜送到哪个桌子上。端口就类似于这里的桌牌。当一个数据报来了,同时有好几个上层程序在等待对端的数据,这时候UDP层只需要看一下端口号,然后找到与此端口关联的应用程序,将数据交给它来处理就行了。源端口对应着发送数据的应用程序,目的端口对应着接收数据的应用程序。

 

校验和的目的是为了保证数据的完整性。但是不同于IP层的校验和只对首部字段进行校验,UDP层的校验和包括了UDP头部和数据部分,除此之外还包含了以下的伪首部:


这样就可以防止数据报的路由错误。校验和不是必须计算的,如果其值为0,表示没有计算校验和,那么接收方也没有必要验证校验和。

你可能感兴趣的:(tcp,网络)