【计算机网络】详解UDP协议格式&特点&缓冲区

一、UDP****协议端格式

16 位 UDP 长度, 表示整个数据报(UDP 首部+UDP 数据)的最大长度**;如果16位UDP检验和出错,报文会被直接丢弃。**

1.1、检验和出错的几种常见情况

  1. 数据传输过程中的比特翻转:在数据传输过程中,由于物理介质或网络设备的故障,可能导致数据中的某些比特位发生翻转,即0变为1或1变为0。这种变化会破坏数据的完整性,从而导致UDP报文的检验和错误。
  2. 数据包丢失或损坏:UDP协议是一种无连接的、不可靠的传输协议,它不保证数据包的顺序传递和完整性。因此,在传输过程中,数据包可能会丢失或损坏,这也会导致UDP报文的检验和错误。
  3. 伪头部信息错误:在计算UDP检验和时,通常会包括一个伪头部,该伪头部包含了源IP地址、目的IP地址、协议类型等额外信息。如果这些信息在计算或传输过程中出现错误,也会导致最终的检验和错误。
  4. 发送端和接收端计算不一致:发送端在发送UDP数据包之前会计算校验和,并将其放置在UDP数据报的校验和字段中。接收端在接收到UDP数据包后,也会进行校验和的计算。如果发送端和接收端的计算过程或算法存在差异,或者接收端在计算过程中使用了错误的数据(例如,数据在传输过程中已被篡改),那么两者计算出的校验和可能不一致,从而导致检验和错误。

二、UDP的特点

UDP 传输的过程类似于寄信

  1. 无连接: 知道对端的 IP 和端口号就直接进行传输, 不需要建立连接。UDP是无状态的,这意味着它不会跟踪或维护任何连接状态。每次发送数据都是独立的,不受之前或之后发送的数据的影响。这种无状态特性使得UDP在处理大量短消息或实时数据时非常高效。UDP的无连接特性简化了协议栈的实现。与TCP相比,UDP不需要维护连接状态、处理连接超时或重传机制等复杂功能。这使得UDP在处理实时性要求较高、对丢包不敏感的应用场景如视频流、音频流、在线游戏等时更加高效。
  2. 不可靠: 没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP 协议层也不会给应用层返回任何错误信息;UDP也不保证数据包的到达顺序。由于网络传输的复杂性,数据包可能会以不同的顺序到达接收方。UDP不会对这些数据包进行排序或重组,而是直接将它们传递给应用程序。这意味着应用程序需要自己处理数据包的顺序问题。UDP也不会根据网络的拥塞程度来调整发送速率。这可能导致在网络拥塞时,UDP数据包大量丢失或延迟增加。UDP的头部包含一个简单的校验和字段,用于检测数据在传输过程中是否发生了错误,但这个校验和是可选的。发送方可以选择关闭校验和,以提高传输效率。如果关闭了校验和,那么UDP将不会对数据进行任何形式的错误检测,这进一步增加了数据传输的不可靠性。
  3. 面向数据报: 不能够灵活的控制读写数据的次数和数量;应用层交给 UDP 多长的报文, UDP 原样发送, 既不会拆分, 也不会合并;用 UDP 传输 100 个字节的数据为例子:如果发送端调用一次 sendto, 发送 100 个字节, 那么接收端也必须调用对应的一次 recvfrom, 接收 100 个字节; 而不能循环调用 10 次 recvfrom, 每次接收10个字节。

三、UDP的缓冲区

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

四、UDP注意事项

我们注意到, UDP 协议首部中有一个 16 位的最大长度. 也就是说一个 UDP 能传输的数据最大长度是 64K(包含 UDP 首部)。然而 64K 在当今的互联网环境下, 是一个非常小的数字。如果我们需要传输的数据超过 64K,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

相关推荐
A阳俊yi20 分钟前
Spring Boot日志配置
java·spring boot·后端
起风了布布25 分钟前
配置版本化是怎么实现的
后端
资深前端外卖员26 分钟前
【nodejs高可用】前端APM应用监控方案 + 落地
前端·后端
健康的猪30 分钟前
golang的cgo的一点小心得
开发语言·后端·golang
斜月32 分钟前
一个服务预约系统该如何设计?
spring boot·后端
M1A141 分钟前
云原生第一步:Windows Go环境极速配置
后端·go
三思而后行,慎承诺1 小时前
tcp 和http 网络知识
网络·tcp/ip·http
JavaEdge.1 小时前
LangChain4j HTTP 客户端定制:解锁 LLM API 交互的更多可能性
网络·网络协议·http
Hy行者勇哥1 小时前
形象解释 HTTP 的四种常见请求方式及其中的区别联系
网络·网络协议·http
异常君1 小时前
Java 高并发编程:等值判断的隐患与如何精确控制线程状态
java·后端·代码规范