UDP协议

基础概念

UDP是一种传输层协议,用于在计算机网络中通过网络传输数据。与TCP不同,UDP是面向数据报的协议,是一种无连接的协议,即不需要在数据传输之前建立连接。

传输特点

  • 无连接: 发送方直接将数据包发送到目标地址,知道对端的IP和端口号就直接进行传输,不需要建立连接和维护状态。这使得UDP在某些场景下更高效,因为不需要连接建立和维护过程所带来的开销。
  • 不可靠: 它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。其本身并不提供数据包的确认和重传,也不处理数据包丢失或重复,没有流量控制,也不保证数据包的顺序性,无法避免网络阻塞;如果因为网络故障该段无法发到对方, UDP协议层也不会给应用层返回任何错误信息;这些错误处理机制需要在应用层进行实现。
  • 面向数据报: 不能够灵活的控制读写数据的次数和数量;应用层交给UDP多长的报文, UDP原样发送, 既不会拆分, 也不会合并;
    例如用UDP传输100个字节的数据:
    如果发送端调用一次sendto, 发送100个字节, 那么接收端也必须调用对应的一次recvfrom, 接收100个
    字节; 而不能循环调用10次recvfrom, 每次接收10个字节;

协议格式

UDP协议端格式图,图片来源于《图解TCP/IP》

如上图所示,UDP协议格式包括5个部分,其中报头分为4个字段。接下来详细介绍报文的格式。

  • 源端口号:即发送端的进程端口号,字段长16比特位。该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值设置为0。可用于不需要返回的通信中。
  • 目标端口号:表示接收端端口,字段长度16位。
  • 包长度:该字段保存了UDP报头的长度跟数据的长度之和,单位为字节(8位字节)
  • 校验和:当你使用UDP协议发送数据时,数据包的内容可能会在传输过程中受到干扰、错误或损坏。为了帮助识别这些问题并确保数据的准确传输,UDP包含了一个称为“校验和”的特殊数据来提供可靠的UDP首部和数据。如果校验和出错, 数据报就会直接丢弃;
    给一个简单点的理解:
    想象你要给朋友发一封信,你写了信放进信封,然后写下信封上的数字,这个数字是你信的内容的某种摘要。当你的朋友收到信时,他也会计算信的内容的摘要,然后对比你写的数字和他计算出的数字。如果两个数字一样,说明信的内容没有在传输过程中出现问题。但如果数字不一样,就意味着信的内容可能在传输途中发生了变化,可能是信纸有点折叠,文字模糊了一些,或者是信封上的标签不小心撕破了。
    在UDP协议中,也有类似的机制。每个UDP数据包都有一个校验和,这个校验和是根据数据包中的内容计算出来的一个数字。当接收方收到数据包时,它会再次计算校验和,然后将计算出的数字与数据包中的校验和进行比较。如果两个数字一样,说明数据包的内容没有在传输过程中发生错误。但如果数字不一样,就表示数据包可能在传输过程中发生了变化,可能是因为某些原因导致数据包的内容被改变了。
    简而言之,UDP首部的校验和就像是一个邮件的数字标签,用于检查数据包是否在传输中出现了错误或损坏。这可以帮助确保数据的可靠传输。

UDP的缓冲区

UDP没有真正意义上的发送缓冲区. 调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后
续的传输动作;
UDP具有接收缓冲区. 但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果
缓冲区满了, 再到达的UDP数据就会被丢弃;
UDP的socket是全双工的,既能读也能写。

应用场景

UDP被设计用于那些对实时性和效率要求较高,但对数据可靠性要求相对较低的应用。
由于UDP面向无连接,它可以随时发送数据。再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:

  • 包总量较少的通信(DNS、SNMP等)。
  • 视频、音频等多媒体通信(即时通信)
  • 限定于LAN等特定网络中的应用通信,在局域网中,由于网络质量相对较好,数据包丢失的概率较低。
  • 广播通信(广播、多播)

UDP的不可靠如何缓解

例如在视频、音频等多媒体通信中,由于需要低延迟,实时性要求较高,显然更适合UDP,而为了减少UDP的数据包丢失带来的影响,可以在应用层实现对应的差错处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值