✅作者简介:大家好,我是小杨
个人主页:「小杨」的csdn博客
希望大家多多支持一起进步呀!
UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的、不可靠的数据传输服务。
UDP 提供了不面向连接的通信,且不对传送的数据报进行可靠的保证,适用于一次传送少量的数据,不适用于传输大量的数据。
UDP 的主要特点为无连接,不可靠传输,面向数据报,全双工通信。下面对这些特点进行逐一解释:
1,无连接:UDP是一种无连接的传输协议,这意味着在通信之前不需要进行连接建立的过程。发送方直接向目标主机发送数据报,接收方无需事先建立连接就能接收数据。
2,不可靠传输:UDP不保证数据传输的可靠性。它将数据划分为独立的数据报,并通过网络发送,但不提供丢包重传、数据校验和错序整理等机制。如果在传输过程中发生数据丢失、损坏或重复,UDP协议不会进行任何处理,这使得UDP的传输不可靠。
3,面向数据报:UDP以数据报(Datagram)为单位进行通信。每个UDP数据包是一个独立的数据报,具有自己的报头,其中包含源端口号、目标端口号和数据长度等信息。这使得UDP的通信单位独立,不受其他数据报的影响,独立地发送和接收数据。
4,全双工通信:UDP支持全双工通信,允许发送方和接收方同时发送和接收数据。发送方可以随时发送数据报,而接收方可以在任何时间接收数据报,而不受发送方的限制。这使得UDP在实现实时双向通信时具有优势。
UDP协议的数据包(也称为UDP报文)由两部分组成:UDP头部和UDP数据部分。
UDP 协议段格式示意图:
UDP 数据包中的各字段代表含义如下:
1,源端口号(Source Port):16位字段,表示发送方的端口号,用于标识发起UDP通信的应用程序的发送端口。
2,目标端口号(Destination Port):16位字段,表示接收方的端口号,用于标识接收方应用程序的接收端口。
3,长度(Length):16位字段,表示UDP报文的长度,包括UDP头部和数据部分的总长度。
4,校验和(Checksum):16位字段,用于检测UDP报文在传输过程中是否发生错误或被篡改。
5,数据区(Data):可选字段,用于携带实际的应用数据内容。
UDP 数据包中的注意事项:
1,UDP协议的首部固定为8个字节,即源端口、目的端口、长度和校验和,其中校验和字段为可选字段,可以不包含校验和。
2,UDP报文长度包括UDP头部和数据部分,最大长度为16位,UDP数据报的最大长度被限制为65535 B ,也就是最多只能传输64KB的数据。如果应用程序需要传输更大的数据,则需要将数据进行分片,并在应用层协议中进行重组,或者采用TCP协议。
3,UDP首部中的源端口和目的端口用于标识发送方和接收方的应用程序或服务。这两个字段共同决定了数据包的传输路径,以确保正确地将数据包传送到相应的应用程序或服务。
拓展:端口号介绍
端口号是在传输层中使用的概念,用于标识不同应用程序或服务的网络进程。
在传输层协议中,头部中的源端口和目的端口用于标识发送方和接收方的应用程序或服务。
这两个字段共同决定了数据包的传输路径,以确保正确地将数据包传送到相应的应用程序或服务。
端口号是一个16比特(2字节)的无符号整数,代表的取值范围为0 ~ 65535,在该范围内被划分3部分,分别为:
下面是一些常见的知名端口号的定义和用途:
进程与端口号之间的关系:
一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定。
拓展:校验和字段介绍
校验和的作用是用于验证UDP数据包的完整性,以确保数据在传输过程中没有被篡改或损坏。
校验和的作用过程:发送方在发送UDP数据包时,会计算数据包的校验和(校验和的计算涉及UDP头部和数据部分),并将校验和值存储在校验和字段中。接收方在接收到UDP数据包后,会重新计算数据包的校验和,并将计算得到的校验和值与接收到的校验和字段进行比对。如果两者一致,则说明数据包在传输过程中没有损坏;如果两者不一致,则说明数据包可能在传输过程中发生了错误。
校验和字段为可选字段,在UDP协议中是可以不选,是否使用校验和可以根据应用程序的需求和对数据完整性的要求来决定。
经典问题:基于传输层UDP协议,来实现一个可靠传输,应该如何设计?
问题引入:虽然校验和可以提供一定程度的数据完整性检查,但是因为UDP本身是一种不可靠传输协议,即使检测到错误或数据篡改,UDP也不会进行任何恢复操作,具体就是不提供丢包重传、数据校验和错序整理等机制。
若想基于传输层UDP协议,来实现一个可靠传输,那就是从下面这几个方面来考虑:
结语
这就是本期博客的全部内容啦!如果有什么其他的问题无法自己解决,可以在评论区留言哦!
最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞,评论✍,收藏),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!