【计算机网络】详解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,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。

相关推荐
不凉帅23 分钟前
NO.2计算机基础
网络·嵌入式·硬件·软件·计算机基础
REDcker31 分钟前
RESTful API设计规范详解
服务器·后端·接口·api·restful·博客·后端开发
微学AI1 小时前
内网穿透的应用-告别局域网束缚!MonkeyCode+cpolar 解锁 AI 编程新体验
linux·服务器·网络
CS创新实验室1 小时前
《计算机网络》深入学:IEEE 802 标准
计算机网络·以太网·局域网·ieee·无线网·802
sunnyday04261 小时前
基于Netty构建WebSocket服务器实战指南
服务器·spring boot·websocket·网络协议
呉師傅2 小时前
东芝3525AC彩色复印机CC219测试页打印方法【实际操作】
运维·网络·windows·计算机外设·电脑
没有bug.的程序员2 小时前
Java 序列化:Serializable vs. Protobuf 的性能与兼容性深度对比
java·开发语言·后端·反射·序列化·serializable·protobuf
开开心心就好3 小时前
音频编辑工具,多端支持基础剪辑易操作
java·网络·windows·java-ee·电脑·maven·excel
GeekyGuru3 小时前
TCP/IP协议栈深度解析:从分层原理到内核实现与调优
网络·网络协议·tcp/ip
txinyu的博客4 小时前
MAC 地址
服务器·网络·macos