📜  UDP协议|用户数据报协议

📅  最后修改于: 2020-11-10 05:53:26             🧑  作者: Mango

UDP协议

在计算机网络中,UDP代表用户数据报协议。 David P. Reed在1980年开发了UDP协议。它是在RFC 768中定义的,它是TCP / IP协议的一部分,因此它是Internet上的标准协议。 UDP协议允许计算机应用程序通过Internet协议(IP)网络以数据报的形式将消息从一台计算机发送到另一台计算机。 UDP是TCP协议(传输控制协议)的替代通信协议。像TCP一样,UDP提供了一组规则,用于控制如何通过Internet交换数据。 UDP通过将数据封装到数据包中并将其自己的标头信息提供给数据包来工作。然后,此UDP数据包被封装到IP数据包中并发送到其目的地。 TCP和UDP协议都通过Internet协议网络发送数据,因此也称为TCP / IP和UDP / IP。这两种协议之间有很多区别。 UDP使进程能够处理通信,而TCP提供主机到主机的通信。由于UDP以数据报的形式发送消息,因此它被认为是尽力而为的通信模式。 TCP发送各个数据包,因此它是可靠的传输介质。另一个区别是TCP是面向连接的协议,而UDP是无连接协议,因为它不需要任何虚拟电路即可传输数据。

UDP还提供了一个不同的端口号来区分不同的用户请求,并且还提供了校验和功能,以验证是否已到达完整的数据。 IP层不提供这两项服务。

UDP协议的特点

以下是UDP协议的功能:

  • 传输层协议

UDP是最简单的传输层通信协议。它包含最少数量的通信机制。它被认为是不可靠的协议,它基于尽力而为的交付服务。 UDP不提供确认机制,这意味着接收方不发送对已接收数据包的确认,发送方也不等待已发送数据包的确认。

  • 无连接

UDP是无连接协议,因为它不会创建虚拟路径来传输数据。它不使用虚拟路径,因此数据包在发送方和接收方之间的不同路径中发送,这导致数据包丢失或接收顺序混乱。

无法保证数据的有序交付。

对于UDP,数据报将以某种顺序发送,但由于未对数据报进行编号,因此不能保证以相同的顺序接收数据报。

  • 港口

UDP协议使用不同的端口号,以便可以将数据发送到正确的目的地。端口号定义在0到1023之间。

  • 传输更快

UDP由于是无连接协议,因此可以实现更快的传输,即不需要虚拟路径来传输数据。但是可能会丢失单个数据包,从而影响传输质量。另一方面,如果数据包在TCP连接中丢失,则会重新发送该数据包,因此可以保证数据包的传送。

  • 确认机制

UDP确实具有任何确认机制,即UDP发送方和UDP接收方之间没有握手。如果消息是通过TCP发送的,则接收方确认我已准备好,然后发送方发送数据。在TCP的情况下,握手发生在发送方和接收方之间,而在UDP中,在发送方和接收方之间不存在握手。

  • 段是独立处理的。

每个UDP段都是单独处理的,因为每个段采用不同的路径到达目的地。由于在发送方和接收方之间没有建立连接,因此UDP段可能会丢失或无法按顺序传递到目的地。

  • 无状态

这是一种无状态协议,这意味着发送方不会获得对已发送数据包的确认。

为什么我们需要UDP协议?

我们知道UDP是不可靠的协议,但是在某些情况下我们仍然需要UDP协议。 UDP部署在数据包需要大量带宽以及实际数据的地方。例如,在视频流中,确认数千个数据包很麻烦,并浪费大量带宽。对于视频流,丢失某些数据包不会造成问题,也可以忽略不计。

UDP头格式

在UDP中,标头大小为8个字节,数据包大小最大为65,535个字节。但是,此数据包的大小是不可能的,因为数据需要封装在IP数据报中,而IP数据包的标头大小可以为20个字节;因此,UDP的最大值将为65,535减去20。UDP数据包的报头可携带的数据大小将为65,535减28,这是UDP数据包的报头为8个字节,而IP报头为20个字节。

UDP标头包含四个字段:

  • 源端口号:这是16位信息,用于标识发送数据包的端口。
  • 目标端口号:它标识哪个端口将接受信息。它是16位信息,用于标识目标计算机上的应用程序级服务。
  • 长度:这是16位字段,用于指定还包括标头的UDP数据包的整个长度。最小值为8字节,因为标头的大小为8字节。
  • 校验和:这是一个16位字段,并且是一个可选字段。该校验和字段检查信息是否正确,因为在传输过程中可能会破坏信息。它是一个可选字段,表示它是否要编写校验和取决于应用程序。如果不想写入校验和,则所有16位均为零;否则,它将写入校验和。在UDP中,校验和字段应用于整个数据包,即报头以及数据部分,而在IP中,校验和字段仅应用于报头字段。

UDP协议中的排队概念

在UDP协议中,数字用于区分服务器和客户端上的不同进程。我们知道UDP提供了处理通信的过程。客户端生成需要服务的进程,而服务器生成提供服务的进程。队列可用于两个进程,即每个进程两个队列。第一个队列是接收消息的传入队列,第二个队列是发送消息的传出队列。进程运行时,队列起作用。如果进程终止,则队列也将被销毁。

UDP通过以下组件来处理UDP数据包的发送和接收:

  • 输入队列: UDP数据包为每个进程使用一组队列。
  • 输入模块:该模块从IP获取用户数据报,然后从同一端口的控制块表中查找信息。如果在控制块表中找到与用户数据报具有相同端口的条目,则将数据排队。
  • 控制块模块:它管理控制块表。
  • 控制块表:控制块表包含打开端口的条目。
  • 输出模块:输出模块创建并发送用户数据报。

有几个进程想要使用UDP服务。 UDP多路复用和多路分解这些进程,以便多个进程可以在单个主机上运行。

局限性

  • 它提供了不可靠的连接传递服务。它不提供IP的任何服务,只提供进程间通信。
  • UDP消息可能会丢失,延迟,重复或出现故障。
  • 它不提供可靠的运输服务。它不提供任何确认或流控制机制。但是,它确实在一定程度上提供了错误控制。

好处

  • 它产生最少的开销。