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

相关推荐
XINGTECODE8 分钟前
海盗王集成网关和商城服务端功能golang版
开发语言·后端·golang
程序猿进阶14 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺18 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
凡人的AI工具箱40 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
先天牛马圣体1 小时前
如何提升大型AI模型的智能水平
后端
java亮小白19971 小时前
Spring循环依赖如何解决的?
java·后端·spring
2301_811274311 小时前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端
hzyyyyyyyu2 小时前
内网安全隧道搭建-ngrok-frp-nps-sapp
服务器·网络·安全
草莓base2 小时前
【手写一个spring】spring源码的简单实现--容器启动
java·后端·spring
Ljw...2 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改