UDP协议:报文结构和注意事项

devtools/2024/11/14 3:57:06/

欢迎浏览高耳机的博客

希望我们彼此都有更好的收获

感谢三连支持!  

         在网络编程中,UDP(用户数据报协议)以其轻量级和高效性而著称。这篇博客我们就来探讨UDP报文结构,以及在使用UDP时需要注意的一些关键事项。

UDP代码实战:UDP 实现的 Echo Server 和 Echo Client 回显程序-CSDN博客

目录

UPD的基本特性

UPD报文结构及特性扩展

UDP%E6%97%B6%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9-toc" style="margin-left:40px;">使用UDP时的注意事项


UPD的基本特性

无连接:

        UDP是无连接的协议,知道对端的IP和端口号就直接进行传输,不需要建立连接。

不可靠传输:

        UDP没有确认机制和重传机制。如果数据因为网络故障无法到达对方,UDP协议层也不会给应用层返回任何错误信息。

面向数据报:

        应用层交给UDP的数据报文UDP原样发送,既不会拆分,也不会合并。发送端和接收端必须匹配数据报的大小。   

拥塞控制的缺失:

        与TCP不同,UDP不进行拥塞控制。这意味着UDP不会根据网络的拥塞情况调整其传输速率,这可能导致在网络拥塞时数据包的大量丢失,但也使得UDP在某些情况下能够更快速地发送数据。    

UPD报文结构及特性扩展

UDP报文结构相对简单,主要包括以下几个部分:

  1. 报文长度(Length)

    • 类型:16位
    • 描述:表示整个数据报(UDP首部+UDP数据)的最大长度。如果超过网络的最大传输单元(MTU),UDP数据报需要进行分片。接收端必须能够正确地重组这些分片,这在某些情况下可能会变得复杂。
  2. 校验和/检验和(Checksum)

    • 类型:16位
    • 描述:用于错误检测。发送端填充校验和,接收端进行CRC校验。如果校验和出错,UDP会直接丢弃该数据报,不会产生任何确认信息。UDP的校验和功能虽然简单,但它对于检测数据在传输过程中的错误至关重要。校验和覆盖了整个UDP数据报,包括UDP头部和数据部分,确保数据的完整性。
  3. 源端口号和目的端口号(Source Port & Destination Port)

    • 类型:各16位
    • 描述:用于标识发送和接收的端口号,是通信双方的标识。这两个字段各占16位,用于标识发送和接收端的端口号。虽然UDP是无连接的,但端口号对于区分同一主机上的多个服务至关重要。
  4. UDP数据(Data)

    • 类型:长度可变
    • 描述:实际要传输的数据内容。

UDP%E6%97%B6%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9">使用UDP时的注意事项

  1. 最大长度限制

    一个UDP能传输的数据最大长度是64K(包含UDP首部)。超过这个大小,需要在应用层手动分包和拼装。
  2. 基于UDP的应用层协议

    包括NFS(网络文件系统)、TFTP(简单文件传输协议)、DHCP(动态主机配置协议)、BOOTP(启动协议)、DNS(域名解析协议)等都是基于UDP的。
  3. 校验和出错处理

    如果校验和出错,UDP会直接丢弃数据报,不会进行重传或通知上层应用。
  4. 端口号的使用

    编写程序时,应避免使用知名端口号(SSH服务器使用22端口, FTP服务器使用21端口, Telnet服务器使用23端口, HTTP服务器使用80端口, HTTPS服务器使用443端口),这些端口号通常被广泛使用的服务所占用。
  5. 多播和广播支持

    UDP支持多播和广播,适用于一对多或多对多的通信场景。
  6. 粘包问题

    虽然UDP是面向数据报的,但在某些情况下可能会出现“粘包”问题,即两个UDP数据报合并在一起传输。
  7. 性能考虑

    由于UDP的简单性,它在延迟敏感型应用中表现更好,如实时视频和音频传输。但对于需要可靠传输的应用,可能需要在应用层实现额外的机制。

        在网络编程中,Echo Server 和 Echo Client 回显是一种经典的示例,用于演示基本的网络通信。Echo Server 接收来自客户端的数据,并将相同的数据发送回客户端。这种模式在测试网络连接和理解网络通信原理时非常有用。在这篇博客中,我们介绍了UDP的特性和报文结构以及一些注意事项,理解了这些,我们可以开始着手进行实战:UDP 实现的 Echo Server 和 Echo Client 回显程序-CSDN博客

希望这篇博客能为你理解UDP网络编程提供一些帮助

如有不足之处请多多指出

我是高耳机


http://www.ppmy.cn/devtools/132826.html

相关文章

golang 实现比特币内核:处理椭圆曲线中的天文数字

在比特币密码学中,我们需要处理天文数字,这个数字是如此巨大,以至于它很容易超出我们宇宙中原子的总数,也许 64 位的值不足以表示这个数字,而像加、乘、幂这样的操作如果使用 64 位整数会导致溢出,因此我们可能需要借助 golang 的 big 包,我们将通过使用 big.Int 来表示…

.Net相关知识

目录 什么是.Net? 微软做.Net平台的目的 如何实现的跨语言? 简单总结 .Net Framework 体系结构 总结 .Net Core Mono 跨平台方式 Framework、Core和Mono总结 总结 什么是.Net? 微软的 .Net既不是编程语言也不是框架! 而是类似于 互联网时代…

ansible进阶功能

目录 handlers-触发器 when-判断 循环 单变量循环 多变量循环 Jinja2-模板 include-引用 roles-角色 vault-加密 handlers-触发器 配合notify使用,通过notify监控是否发生改动,从而触发handlers。 handlers是在task全部执行完之后再执行。 下…

【Python】爬虫使用代理IP

1、代理池 IP 代理池可以理解为一个池子,里面装了很多代理IP。 池子里的IP是有生命周期的,它们将被定期验证,其中失效的将被从池子里面剔除池子里的ip是有补充渠道的,会有新的代理ip不断被加入池子中池子中的代理ip是可以被随机…

Ubuntu 22.04.5 LTS配置 bond

本次纯实验,不会讲解bond功能,配置bond mode 1 和 mode 4 如何配置 确定内核模块是否加载 实验使用root用户权限,非root用户使用sudo 调用root权限 rootubuntu22:~# lsmod | grep bonding rootubuntu22:~# modprobe bonding rootubuntu22:~# …

web安全漏洞之命令注入

命令注入 1.什么是命令注入 通常情况下,开发者使用一些可以执行命令的函数且未对用户输入进行安全检查时,可以造成命令注入。从CTF的角度来讲, 命令注入可以实现: 1、直接读取flag 2、反弹shell 3、利用题目环境漏洞, 控制整个题目环境, 干…

电子学会2024年3月青少年软件编程(图形化)等级考试试卷(二级)真题,含答案解析

我们今天分享的资料是:电子学会2024年3月青少年软件编程(图形化)等级考试试卷(二级)真题,含答案解析 电子学会 2024 年 3 月青少年软件编程(图形化)等级二级考试的主要考点包括: 坐标值的应用:熟练掌握坐标的概念及每个积木的使用,能利用坐标精确控制角色的位置。外…

IP SSL证书

随着互联网技术的发展,网络安全成为企业和个人用户关注的重点。SSL证书作为确保网络通信安全的重要工具,在各类网站和服务中得到广泛应用。然而,除了常见的基于域名的SSL证书外,还有一种特殊的证书类型——IP SSL证书,…