UDP的报文结构及其注意事项

1. 概述

UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的数据传输服务,不保证数据的可靠传输。在网络通信中,UDP通常用于一些对实时性要求较高、数据量较小、传输延迟较低的应用,如音频、视频传输等。

2. UDP特点

1、无连接

UDP传输的过程类似于寄信,知道对端的IP和端口号就可以直接进行数据报传输,不用像TCP协议需要建立连接。

2、不可靠

UDP没有任何安全机制,发送端发送数据报以后,如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息。

3、面向数据报

UDP通过数据报的形式进行传输,用户的请求或响应都会从数据报转换成字符串

应用层交给UDP多长的报文,UDP原样发送,既不会拆分也不会合并

例:用UDP传输100个字节的数据,如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节,而不能循环接收10次每次接收10个字节。

4、全双工通信

UDP的Socket既能读也能写,客户端和服务器都可以发送请求/接受响应。

3. UDP的报文结构

UDP数据报=报头+载荷

1、报头

对于UDP来说,报头一共有8个字节​​​​,包含4个字段,每个字段2个字节。

报头=源端口+目的端口+报文长度+校验和

2、载荷

应用层数据报

UDP报头分为四个部分,每个部分占两个字节。

  • 源端口
  • 目的端口
  • 报文长度
  • 校验和

3.1源端口和目的端口

源端口和目的端口各占2字节(Byte),端口号范围:0~65535

比如:源端口是3306,目的端口是8866。

例:

3.2 报文长度

报文的长度也用2个字节表示,范围是0~65535,单位是字节(Byte)

一般我们都说UDP最大报文长度是64KB (65536B),实际上是65535B

如果超过了64KB,可以通过以下两种方式来解决:

  • 在应用层通过代码的方式针对应用层数据报进行手动分包,拆成多个包通过多个UDP数据报进行传输。
  • 换成TCP 协议

3.3 校验和

1、定义
将发送前和发送后的校验和进行比较,检查发送前后数据报是否一致。用来验证传输的数据是否是正确的。

2. 校验和存在的意义就是用来判定当前传输的数据是否出错:

如果校验和不对,此时数据一定不对

如果校验和对,数据也有一定概率是错的

为了让校验和能够识别率更高一些,计算时通常会以数据内容作为参数来计算,数据内容发生变化,校验和也会发生变化。

3.校验和主要校验的内容

数据内容: 校验和对数据报中的每个比特位进行求和计算,以确保数据内容在传输过程中没有被篡改或损坏。

传输过程中的错误: 校验和可以检测到数据在传输过程中是否发生了错误,例如比特翻转或数据丢失。

数据包的完整性: 通过与发送端发送的校验和进行比较,接收端可以验证数据包在传输过程中是否保持完整,即数据在发送端和接收端之间没有发生改变。

  1. 校验和的实现方式

校验和使用的是一种简单的错误检测机制,它的实现方式如下:

1.计算校验和: 发送端在发送UDP数据包之前,会对UDP数据报文的内容进行校验和的计算。计算过程通常包括以下步骤:

将UDP数据报文划分为以16比特为单位的字(对于字节不足16比特的部分,可以补零)。
将这些16比特字相加,得到一个32比特的中间结果。
如果中间结果的高16比特不为0,则将其与低16比特相加,直到高16比特为0为止。
最终的校验和就是将最后的结果按位取反得到的值。

2.校验和字段: 发送端将计算得到的校验和值放置在UDP数据报的校验和字段中。

3.接收端验证: 接收端在接收到UDP数据包后,会进行校验和的验证。验证的步骤与计算过程类似:

接收端同样将UDP数据报文划分为16比特的字,并对其进行求和计算。
接收端将计算得到的校验和与UDP数据包中的校验和字段进行比较。
如果两者相等,则认为数据包未损坏;如果不相等,则认为数据包可能已经损坏。

4. 注意事项

1.无连接性:UDP是一种无连接的协议,不像TCP那样需要建立连接和维护状态。因此,发送端发送UDP数据报文后,无法知道是否被接收端正确接收,也无法进行重传操作。应用层需要自行处理丢包和数据重传的问题。

2.不可靠性:UDP不提供数据的可靠传输和重传机制,也不具备拥塞控制。因此,数据报文在传输过程中可能会丢失、重复或乱序。应用层需要自行处理这些问题,如通过数据包序号、确认应答等方式实现可靠性传输。

3.数据完整性:UDP提供校验和字段用于检验数据报文的完整性,但并不提供数据的纠错功能。因此,在传输过程中可能会出现数据损坏的情况。应用层可以通过校验和验证数据的完整性,但无法进行错误的纠正。

4.数据包大小限制:UDP数据报文的最大长度为65535字节,包括UDP头部和数据部分。超过这个长度的数据报文将被分片或丢弃。因此,在发送UDP数据时需要注意控制数据包的大小,避免过大导致分片或丢包。如果传输数据超过64K,就需要在应用层手动的分包, 多次发送, 并在接收端手动拼装。

5.适用场景:UDP适用于对实时性要求较高、传输延迟较低的应用场景,如音视频传输、在线游戏等。但对于需要可靠传输和数据完整性保障的应用,应该选择TCP协议。

6.端口号选择:在使用UDP通信时,需要选择合适的端口号进行通信。系统保留端口号(0-1023)通常用于特定的协议和服务,应避免使用这些端口号,以免与系统服务冲突。

相关推荐
sunfove8 小时前
光网络的立交桥:光开关 (Optical Switch) 原理与主流技术解析
网络
Kevin Wang72710 小时前
欧拉系统服务部署注意事项
网络·windows
min18112345610 小时前
深度伪造内容的检测与溯源技术
大数据·网络·人工智能
汤愈韬11 小时前
NAT策略
网络协议·网络安全·security·huawei
汤愈韬11 小时前
Full Cone Nat
网络·网络协议·网络安全·security·huawei
zbtlink11 小时前
现在还需要带电池的路由器吗?是用来干嘛的?
网络·智能路由器
桌面运维家11 小时前
vDisk配置漂移怎么办?VOI/IDV架构故障快速修复
网络·架构
dalerkd11 小时前
忙里偷闲叙-谈谈最近两年
网络·安全·web安全
汤愈韬12 小时前
NAT ALG (应用层网关)
网络·网络协议·网络安全·security·huawei
运维栈记13 小时前
虚拟化网络的根基-网络命名空间
网络·docker·容器