当前位置: 首页 > article >正文

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

欢迎浏览高耳机的博客

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

感谢三连支持!  

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

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

目录

UPD的基本特性

UPD报文结构及特性扩展

使用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时的注意事项

  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.kler.cn/a/385794.html

相关文章:

  • git配置用户信息
  • 工化企业内部能源能耗过大 落实能源管理
  • Python学习笔记(2)正则表达式
  • 微服务链路追踪skywalking安装
  • 对称加密算法DES的实现
  • 类和对象——拷贝构造函数,赋值运算符重载(C++)
  • cesium 设置相机视角 flyTo 参数destination,orientation
  • 【算法】【优选算法】滑动窗口(上)
  • 几个docker可用的镜像源
  • Unexpected response code: 400解决
  • python 爬虫 入门 六、Selenium
  • 【网络安全】开发中存在的重定向与Referer问题
  • 【MySQL 保姆级教学】深层理解索引及特性(重点)--下(12)
  • lua入门教程:math
  • 麻省理工学院的研究人员最近开发了一种新的机器人训练方法
  • 互联网技术净土?原生鸿蒙开启全新技术征程
  • Tomcat中如何指定JDK版本
  • node.js版本管理工具nvm
  • 【dvwa靶场:XSS系列】XSS (DOM) 低-中-高级别,通关啦
  • ARM64的Mac Node.js前置工作,nvm在线安装
  • JVM中对象在堆中的生命周期?
  • 《Java核心技术 卷I》第10章 图形用户界面程序设计
  • 「QT」几何数据类 之 QRect 矩形类
  • 2025年入门深度学习或人工智能,该学PyTorch还是TensorFlow?
  • 证明正交标架
  • SpringBoot使用自定义注解对API接口进行数据校验