UDP介绍

UDP(用户数据报协议)是一种通信协议,主要用于在Internet上的应用程序之间建立低延迟和容错的连接。它通过在接收方提供协议之前启用数据传输来加快传输速度。因此,UDP在对时间敏感的通信中很有用,包括Internet语音(VoIP),域名系统(DNS)查找以及视频或音频回放。UDP是传输控制协议(TCP)的替代方法。

UDP和TCP都运行在IP之上,有时也称为UDP/IP或TCP/IP。但是,两者之间存在重要差异。例如,UDP支持进程间通信,而TCP支持主机间通信。此外,TCP发送单独的数据包,并被视为可靠的传输介质。另一方面,UDP发送称为数据报的消息,被认为是一种尽力而为的通信模式-意味着该服务不提供任何保证数据将被传递的功能,也不提供特殊功能来重新传输丢失或损坏的消息。

UDP提供IP层未提供的两种服务。它提供端口号以帮助区分不同的用户请求,并提供可选的校验和功能以验证数据是否完整到达。

由于TCP具有将大数据集分解为单个数据包,检查并重新发送丢失的数据包并按正确顺序重组数据包的能力,因此它已成为用于大量Internet连接的主要协议。但是这些额外的服务要付出额外的数据开销和延迟。

相反,UDP被认为是无连接协议,因为它不需要在任何数据传输发生之前就建立虚拟电路。通信协议仅发送数据包,这意味着它具有更低的带宽开销和延迟。使用UDP,数据包可能在发送者和接收者之间采用不同的路径,结果,某些数据包可能会丢失或乱序接收。

用户数据报协议功能

用户数据报协议的属性使其可以与可忍受丢失数据的应用程序一起使用而受益。例如:

  • 它允许丢弃和接收数据包的顺序与发送数据包的顺序不同,从而使其适合于可能需要考虑延迟的实时应用。
  • 它可以用于基于事务的协议,例如DNS或网络时间协议(NTP)。
  • 它可用于连接大量客户端且无需实时纠错的地方,例如游戏,语音或视频会议以及流媒体。

UDP包头结构

UDP消息数据在通过网络传输时需要包含一个特定的数据包头部,UDP包头含一组由协议的技术规范定义的参数-称为字段

用户数据报协议包头具有四个字段,每个字段为2个字节。它们是:

  • 源端口号,即发送方的编号
  • 目的端口号,数据报指向的端口
  • 长度,UDP报头和所有封装数据的字节长度
  • checksum,用于错误检查-在IPv6中需要使用它,在IPv4中是可选的。

UDP如何工作

UDP使用IP将数据报从一台计算机发送到另一台计算机。UDP通过收集UDP数据包中的数据并将其自己的包头信息添加到数据包中来工作。该数据由进行通信的源端口和目标端口,数据包长度和校验和组成。将UDP数据包封装在IP数据包中之后,它们便被发送到目的地。

与TCP不同,UDP不保证数据包将到达正确的目的地。这意味着UDP不会直接连接到接收计算机,而TCP会直接连接。而是将数据发送出去,并依靠发送方计算机和接收方计算机之间的设备正确地获取数据。

使用UDP的大多数应用程序会等待由于使用通信协议发送的数据包而导致的任何预期答复。如果应用程序在一定时间内未收到答复,则该应用程序将再次发送数据包,否则它将停止尝试。

UDP使用简单的传输模型,该模型不包含握手对话以提供可靠性,排序或数据完整性。因此,UDP的服务是不可靠的,数据包可能会乱序到达,出现重复或消失而不会发出警告。

尽管这种传输方法不能保证所发送的数据将到达目的地,但它的开销很低,并且对于不一定必须第一次工作的服务很受欢迎。

UDP的应用

当将应用程序配置为管理重新传输丢失的数据包并正确安排接收到的数据包的过程时,UDP可以用于需要无损数据传输的应用程序中。 与TCP相比,此方法可以帮助提高大文件的数据传输速率。

在开放系统互连(OSI)通信模型中,UDP与TCP一样位于第4层,即传输层。UDP与更高级别的协议配合使用,以帮助管理数据传输服务,包括普通文件传输协议(TFTP),实时流协议(RTSP)和简单网络管理协议(SNMP)。

UDP是网络应用程序的理想协议,在这些应用程序中,感觉到的延迟至关重要,例如在游戏 以及语音和视频通信中,这可能会遭受一些数据丢失,而不会负面影响感觉到的质量。在某些情况下,尽管存在一些损失,但仍使用前向纠错技术来改善音频和视频质量。

UDP也可用于依赖可靠信息交换但应具有自己的应答数据包方法的应用程序。这些服务之所以具有优势,是因为它们没有绑定到固定的模式以保证发送的数据包的完整性和正确性。用户可以决定如何以及何时响应不正确或未分类的信息。

UDP还可以用于多播,因为它支持数据包交换。此外,UDP用于某些路由更新协议,例如路由信息协议(RIP)。

UDP最后还可以用于那些对丢包不敏感的应用,为了尽快的发送更多的数据,偶尔丢弃一些数据包是可以接受的。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁