总结 UDP 的报文结构和注意事项

UDP协议端格式

  • UDP报文主体分为两个部分:UDP报头(占8个字节)+UDP数据/UDP载荷
  • UPD报头:源端口号+目的端口号+包长度+校验和

1.源端口号:一般是客户端程序程序请求时,由系统自动指定,端口号范围是0~65535, 0 ~ 1023为知名端口号——占16位,也就是2个字节


2.目的端口:一般是服务器的端口,一般通过程序员自己指定,这样客户端才能根据ip地址和port成功访问服务器——占16位,也就是2个字节


3.UDP长度:是指整个UDP数据报的长度,包括报头+载荷;16个字节


4.UDP校验和:用于检查数据在传输过程中是否出错,是否出现bit反转的问题,当进行校验时,需要在UDP数据报之前增加临时的伪首部;


UDP的特点

UDP 传输的过程类似于寄信。

无连接

知道对端的 IP 和端口号就直接进行传输,不需要建立连接;

不可靠

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

面向数据报

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

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

如果发送端一次发送 100 个字节,那么接收端也必须一次接收 100 个字节;而不能循环接收 10 次,
每次接收 10 个字节。
大小不能变
缓冲区
UDP 只有接收缓冲区,没有发送缓冲区:
UDP 没有真正意义上的 发送缓冲区 。发送的数据会直接交给内核,由内核将数据传给网络层协议
进行后续的传输动作;
UDP 具有接收缓冲区,但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一
致;如果缓冲区满了,再到达的 UDP 数据就会被丢弃;
UDP socket 既能读,也能写,这个概念叫做 全双工
大小受限

UDP 协议首部中有一个 16 位的最大长度。也就是说一个 UDP 能传输的数据最大长度是 64K (包含 UDP 首部)。

基于UDP的应用层协议

NFS:网络文件系统
TFTP:简单文件传输协议
DHCP:动态主机配置协议
BOOTP:启动协议(用于无盘设备启动)
DNS:域名解析协议
当然,也包括你自己写UDP程序时自定义的应用层协议。

UDP 和TCP 的区别(高频面试题)

UDPTCP
是否需要建立连接
通信方式一对一,一对多,多对一,多对多交互通信每条TCP连接只能有两个端点,只能是一对一通信,可以建立多条连接来实现一对多,多对一,多对多等交互通信
对报文的处理面向数据报面向字节流
传输是否可靠不可靠,不使用流量控制和拥塞控制可靠传输,使用流量控制和拥塞控制
大小是否受限
适用场景实时性要求高,允许少量丢包可靠性比较高的地方

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

扩展

这是一个经典面试题:
UDP本身是无连接,不可靠,面向数据报的协议,如果要基于传输层UDP协议,来实现一个可靠传输,应该如何设计?
UDP大小是受限的,如果要基于传输层UDP协议,传输超过64K的数据,应该如何设计?
以上两个问题答案类似,都可以参考 TCP 的可靠性机制在 应用层 实现类似的逻辑:
例如:

  • 应用层(自己写代码)来实现类似TCP的可靠机制;
  • 引入序列号,保证数据顺序;
  • 引入确认应答,确保对端收到了数据;
  • 引入超时重传,如果隔一段时间没有应答,就重发数据;
  • ......
      

        UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中如果出现了丢包,UDO也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能

        如果需要这些细节控制,那么不得不交给由采用UDO的应用程序去处理。换句话说,UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/702773.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析(二)——导入外部数据,导入Excel数据,CSV文件,txt文件,HTML网页,数据抽取,DataFrame对象的loc属性与iloc属性

一.导入外部数据 1.导入.xIs或.xIsx文件 pd.read_ excel(io,sheet_ name,header) 1.1常用参数说明 ●io:表示.xIs或.xIsx文件路径或类文件对象 ●sheet name:表示工作表,取值如下表所示 ●header:默认值为0,取第一行的值为列名,数据为除列…

【保姆级】生成式网络模型基础知识(图像合成/语音合成/GPT)

生成式模型基础知识 初步接触生成任务 生成任务,顾名思义就是要去生成一个东西,比如生成图片/音频/文字等等。 大家接触最多比如chatGPT、stable diffusion、还有一些语音合成相关的东西。 那么问题来了,具体生成步骤是什么样的&#xff…

MIT 6.5840(6.824) Lab1:MapReduce 设计实现

1 介绍 本次实验是实现一个简易版本的MapReduce,你需要实现一个工作程序(worker process)和一个调度程序(coordinator process)。工作程序用来调用Map和Reduce函数,并处理文件的读取和写入。调度程序用来协…

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏5(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言三段攻击攻击设置只对敌人造成伤害限制可以移动攻击问题 角色连续按四下攻击,最后会多a一下问题:站在原地连续攻击野猪,只有第一下攻击野猪才掉血,后面的攻击野猪不掉血源码完结 …

Keli5烧写程序成功后再次烧写程序却不能识别芯片。解决方法

1问题(已排除硬件问题和Debug配置问题) 再次烧写不能识别下如图(提示为不能识别到芯片) 硬件识别正常 Debug配置正常 就是不能识别到芯片 2为什么会出现这个问题 在STM32Cude设置中没有设置SYS(默认是No Debug&…

[Cesium for Supermap]加载iserver发布的wms服务

1,wms服务 2,加载代码 let provider new Cesium.WebMapServiceImageryProvider({url: "http://support.supermap.com.cn:8090/iserver/services/map-china400/wms111/China_4326",enablePickFeatures:true,rectangle: Cesium.Rectangle.fromD…

必背!!2024年软考中级——网络工程师考前冲刺几页纸

距离软考考试的时间越来越近了,趁着这两周赶紧准备起来 今天给大家整理了——软考网络工程师考前冲刺几页纸,都是核心重点,有PDF版,可打印下来,每天背一点。 计算机总线分类 ①总线的分类:数据总线、地址总…

618值得入手的数码有哪些?数码好物清单推荐|款款实用闭眼冲

每年的618购物节都是消费者们翘首以盼的盛宴,这一天,各大品牌和电商平台都会推出极具吸引力的优惠活动,让消费者们能够以更优惠的价格购买到心仪的数码好物,为了帮助大家在这个购物狂欢节中挑选到真正实用、性价比高的数码产品&am…

重启服务器后node节点显示NotReady

场景:夜间进行了断电维护,重启后发现业务无法使用,检查发现一个node节点显示NotReady. 去到目标服务器查看kubelet服务未成功启动 journalctl -u kubelet 执行journalctl -u kubelet 查看日志发现提示: ailed to run Kubelet: run…

在UBuntu上安装QT环境

一、UBuntu环境 二、官网下载QT https://download.qt.io/archive/qt/ 安装所需选择版本下载,可以现在windows下载在复制进去 三、安装QT 1、复制到ubuntu 2、打开终端,改变刚下载文件的权限 权限代号 r:读取权限,数字代号为 “…