UDP 的报文结构及注意事项

这篇具有很好参考价值的文章主要介绍了UDP 的报文结构及注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

UDP的特点

  • 无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接。
  • 不可靠:即使因为网络故障等原因无法将数据报发送给接收端,UDP协议层也不会给应用层返回任何错误信息。
  • 全双工:即可以接收数据报,也可以发送数据报
  • 面向数据报:应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。

用UDP传输100个字节的数据:

如果发送端一次发送100个字节,那么接收端也必须一次接收100个字节;而不能循环接收10次,
每次接收10个字节。

UDP协议报文结构

示例图: UDP 的报文结构及注意事项

对于UDP来说,报头一共有8个字节,分成源端口目的端口UDP报文长度,和检验和这四个部分(每个部分2个字节)

UDP报文长度

一个UDP数据报,最大只能传输64KB的数据

经典面试题一:如果传输超过64KB的数据,该如何设计?
第一种方案(不推荐):通过代码的方式针对应用层数据报进行手动的分包,拆分成多个包通过多个UDP数据报进行传输。(此方法比较麻烦)
第二种方案(推荐):不用UDP,换成TCP(TCP没有这样的限制)

经典面试题二:如果一定要基于传输层UDP协议,来实现一个可靠传
,应该如何设计?(参考TCP的可靠性机制在应用层实现类似的逻辑)

  • 引入序列号,保证数据顺序;
  • 引入确认应答,确保对端收到了数据;
  • 引入超时重传,如果隔一段时间没有应答,就重发数据; ……

校验和

原因:网络传输过程中,可能会受到一些干扰,在这些干扰下就可能出现“比特翻转“的情况”,导致数据的含义发生改变。
作用:验证传输的数据是否正确
基本原理:发送方把要发送的数据计算出校验和(checksum1),接收方收到数据就把数据按照同样的方式再计算一遍检验和(checksum2),如果结果和发送方发来的校验和一致,说明数据传输没有出错,否则代表数据出错。

TCP/UDP对比

归根结底,TCP和UDP都是程序员的工具,什么时机用,具体怎么用,还是要根据具体的需求场景去判定。文章来源地址https://www.toymoban.com/news/detail-456797.html

  • TCP用于可靠传输的情况,应用于文件传输重要状态更新等场景;
  • UDP用于对高速传输实时性要求较高的通信领域,例如,早期的QQ,视频传输等。另外UDP可以用于广播。

到了这里,关于UDP 的报文结构及注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 结构体的使用和结构体指针的定义注意事项

    1、使用背景      由于想把不同地方的三个变量数据存放在一个结构体中,并且调用W25QXX_Write((u8*)p,FLASH_SIZE-100,SIZE); //从倒数第100个地址处开始,写入SIZE长度的数据。调用flash写数据函数,其参数为指针地址,于是需要定义一个结构体和指向结构体的指针,这样调用flash写函数

    2024年01月20日
    浏览(43)
  • Golang struct 结构体注意事项和使用细节

     一个int类型刚好8个字节。 可以看到结构体的字段在内存当中是连续分布的,通过地址的加减来找到对应的数据。 可以看到指针的地址也是连续的,r有两个*point类型,这个两个*Point类型的本身地址也是连续的,但是他们指向的地址不一定是连续。 结构体是用户单独定义的类

    2024年02月11日
    浏览(42)
  • android studio 使用MQTT协议连接onenet 注意事项和相关函数

    一、注意事项: 1.添加依赖: 2.在注册表允许打开网络 3.在application     /application之间添加用于支持 MQTT(Message Queuing Telemetry Transport)通信协议的 Eclipse Paho Android 服务。 4.打开项目中的 gradle.properties 文件,并确保以下属性设置为true------更新所有的支持库到AndroidX中。 二、

    2024年04月26日
    浏览(38)
  • Linux ping命令教程:如何检查网络连接状况(附案例详解和注意事项)

    Ping(Packet Internet Groper)命令用于检测主机。通过发送Internet控制消息协议( ICMP )Echo数据包到目标主机,检测目标主机是否可达。如果互联网上两个主机之间可以通信,并且没有防火墙阻止这种通信,那么ping命令在一个主机上可以成功地ping另一个主机。因此,你可以使用pin

    2024年01月25日
    浏览(46)
  • 岩土工程安全监测中振弦采集仪连接振弦传感器时注意事项

    岩土工程安全监测中振弦采集仪连接振弦传感器时注意事项 岩土工程安全监测是保障工程稳定和安全的重要手段之一,而振弦采集仪则是岩土工程安全监测的常用设备之一,可以用于实时监测地下水位、土体变形、岩体应力等。其中,振弦传感器是振弦采集仪的核心部件之一

    2024年02月08日
    浏览(49)
  • Linux telnet命令详解:通过TCP/IP网络连接与管理远程机器(附实例教程和注意事项)

    telnet 命令,全称为teletype network,是一个使用telnet网络协议来连接并管理远程机器的命令。它通过TCP/IP网络使用端口23来建立连接,并提供了一种使用命令行界面(CLI)管理远程系统的方式。虽然 telnet 与SSH相似,但两者有所不同,因为SSH使用了加密,而 telnet 则是以明文形式

    2024年02月04日
    浏览(36)
  • 【正点原子STM32】认识HAL库(CMSIS、STM32Cube固件包、HAL库框架结构、使用HAL库、注意事项)

    一、初识HAL库 1.1、CMSIS简介 1.2、HAL库简介 二、STM32Cube固件包浅析 2.1、如何获取STM32Cube固件包? 2.2、STM32Cube固件包文件夹简介 2.3、CMSIS文件夹关键文件 三、HAL库框架结构 3.1、HAL库文件夹结构 3.2、HAL库文件介绍 3.3、HAL库API函数和变量命名规则 四、如何使用HAL库 4.1、基于CM

    2024年02月21日
    浏览(35)
  • 【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

      CMSIS (微控制器 软件接口标准 ):Cortex Microcontroller Software Interface Standard,是由ARM和与其合作的芯片厂商( 比如ST、NXP公司等 )、软件工具厂商( Keil、IAR公司等 ),共同制定的标准。 如果没有此标准,ARM公司的产品兼容性非常差。   下图中分为三层,第一层是用户层

    2024年02月11日
    浏览(41)
  • 学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

    本篇分享学习Linux过程中的一些经验 Linux严格区分大小写 Linux中所有内容以文件形式保存 ,包括硬件,Linux是以管理文件的方式操作硬件 硬盘文件是 /dev/sd[a-p] 光盘文件是 /dev/sr0 等 对于设置需要写入文件,命令行的设置在重启之后就会失效,只有下入文件才可以保存下来 文

    2024年02月11日
    浏览(56)
  • 弱电线布线注意什么?弱电线布线的注意事项

    弱电 弱电一般是指直流电路或音频、视频线路、网络线路、电话线路,直流电压一般在36V以内。家用电器中的电话、电脑、电视机的信号输入(有线电视线路)、音响设备(输出端线路)等用电器均为弱电电气设备。 弱电线的种类如:电话线、网络线、有线电视线及音响线

    2024年02月07日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包