网络基础——UDP协议

  • UDP协议端格式

        

由上图可知,UDP报头由四个域组成。其中每个域各占用两个字节,具体为:源端口号、目的端口号、数据报长度和校验值。

UDP协议使用端口号为不同的应用保留其各自的数据传输通道。数据发送方将UDP数据包通过源端口发送出去,而数据接收方则通过目标端口接收数据。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0~65535。

数据报的长度是指包括报头和数据部分在内的总字节数。因为报头长度固定,所以该域主要被用来计算可变长度的数据部分(又称为数据负载)。

UDP协议使用报头中的校验值来保证数据的安全。校验值首先在数据发送方通过特殊算法计算得出,在传到接收方后,还需重新计算。若某个数据报在传输过程中收到损害,则发送方和接收方的校验计算值不相符,以此来检测UDP协议是否出错。如果校验和出错,就会直接丢弃。

  • UDP的特点

(1)无连接:知道数据接收端的IP和端口号即可直接进行传输,不需要建立连接;

(2)不可靠:没有确认和重传机制,若因网络故障数据无法发送到对方,UDP协议层也不会给应用层返回任何错误信息;

(3)面向数据报:应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。因此不能够灵活地控制读写数据的次数和数量。

注:不存在绝对可靠的机制,要做到可靠性,就要保证两种机制:确认机制和重传机制。

  • UDP的缓冲区

(1)UDP无真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据传给网络层协议进行后续的传输动作;

(2)UDP具有接收缓冲区,但该缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致。若该缓冲区已满,则再到达的UDP数据就会被丢弃。

UDP的socket可以同时读写,这个概念就叫做全双工

注:UDP协议首部有一个16位的最大长度,即一个UDP所能传输的数据最大长度为64K。若需要传输的数据超过64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

  • 基于UDP的应用层协议

        NFS:网络文件系统;

        TFTP:简单文件传输协议;

        DHCP:动态主机配置协议;

        BOOTP:启动协议(用于无盘设备启动);

        DNS:域名解析协议。

当然,也包括用户在写UDP程序时自定义的应用层协议。


猜你喜欢

转载自blog.csdn.net/cecilia3333/article/details/80345022