UDP协议和报文格式,校验和,CRC的含义

news/2024/5/18 14:41:40 标签: udp, 网络协议, 网络

💖💖💖每日一看,学习动力

一、UDP协议及其报文格式

UDP:特点:无连接,不可靠传输

报头里面有啥呢? 

那么首先我要先提问一下?2个字节,可以表示的数据范围有多大?(挺重要的需要记住)

1字节 🌸 🌸

  有符号-128——+127

  无符号 0——255

2字节 🌸 🌸

  有符号 —32768——32767

  无符号  0——65535

4字节

  有符号-21亿——21亿

  无符号0——42亿94万

报头的内部

合法的端口范围在:0——65535不能再大了,但是我们实际上不用0,1-1024这个范围大端口号,有特殊意义——叫做知名端口号(也不建议使用,1——1024这个范围大端口号有特殊意义,连mysql都是3306🌝🌝🌝当然,你要是非想要的话,你需要有管理员权限,我们CURDboy这么会有管理员呢🌚🌚🌚润)

一次通信,涉及五元组,源端口,目的端口,源IP,目的IP,协议类型,但是上面中名气比较大的服务器,都是上个世纪的情况(这里大部分服务器都已经过气,😜)

二、UDP报头遇到的问题及解决方法

UDP报文长度->2字节换算成单位64kb 如今很小,当年很大(大佬们,也没想到互联网发展这么吊),此时我们该如何把这个报文长度改大呢?分配4个字节可以不呢——相当困难->主要原因政治上困难,网络通信,你改对端就需要改一系列东西,十分复杂(主要是你改动,别人改不改,一个地方不改,你就损失一大块蛋糕了)。

那么可能小可爱会问了,假如真超过64KB咋整啊~

改法1:

在应用层(代码中)把广告拆分成多组,通过多个UDP数据报进行传输

代码的改动会很多,很多地方要改,还要重新测试,拆分之后,传输过去,对面还要进行拼接,改这么拼?,顺序乱了怎么办,某部分丢失又怎么办

改法2:使用Tcp去代替UDP,TCP没有要求报文长度(多长都行)(更实用一些)

三、校验和

校验和:检察数据是否在网络运输的过程中出错了

一个结论:网络传输过程中,收到外界干扰,数据可能出错,本质上,光信号/电信号/电磁波/磁场,高能粒子射线(太阳耀斑这种)

可能你原先输入的是1,就会变成0,0变成1这种——》也叫做比特翻转🍀🍀

我们的校验和就是为了应对这个情况

接收方收到数据的时候,需要确认数据是否错误,校验和是最简单的方式 

实际校验和,不仅仅是“长度”而是根据数据的内容生成的,当内容发生改变的时候,就能感知到错误,

UDP的校验和具体是怎么实现的呢,使用一种简单粗暴的CRC校验和算法(循环冗余校验和)

CRC会把累加结果,保存到2个字节的变量中,加着加着,可能就会溢出,溢出也无所谓,所有字节都加了一个遍,最终得到了校验和传输数据的时候,会把原始数据和校验和一起传递过去。接收方收到数据,同时也收到了发送端->送过来的校验和(旧的),接收方会同样再去算一遍,得到新校验和,如果旧的校验和和新的校验和相同,就可以视为数据传输的过程中,是正确的。

如果不同,则视为传输过程中数据出错了,数据相同->校验和不同,校验和不同也就是数据不同,(当然有一些算法进行校验,可以更高精确度,但是要付出更大的代价,简单粗暴就好)

假如说正好巧了,某个字节多了一个,后面一个字节少一个,两种相加,正好抵消(这也没有办法,不用特别严谨,项目中已经很够用了。出错就会进行丢弃。但TCP可要求对方重发数据(更可靠)——下一篇文章


http://www.niftyadmin.cn/n/5014237.html

相关文章

deepin V23通过flathub安装steam畅玩游戏

deepin V23缺少32位库,在星火商店安装的steam,打开报错,无法使用! 通过flathub网站安装steam,可以正常使用,详细教程如下: flathub网址:主页 | Flathub 注意:flathub下载速度慢,只…

个人微信多账号聚合管理如何实现?

在日常工作中,您是否会遇到以下问题: 微信号多,需反复切换设备及账号,工作效率低。 无法快速响应客户消息,客户体验感差。 无法随时掌握员工与客户沟通情况,员工沟通质量难以控制,管理难。 员…

电子文件存档管理制度

1、 公司各部门的电子文档(件)应当在主管或经理计算机上或者文件服务器上建立专门的部门分类 文件夹进行保存。 各部门主管负责本部门电子文件的积累、保管和归类整理工作。 2、 任何人员不得将公司相关资料包含电子文件通过任何途径传递出公司&#x…

python中的符号含义

一、/ 在Python中,/符号有两种作用: 进行除法运算:当两个操作数都是整数类型时,使用/进行除法运算,结果将会是浮点数类型。例如,5/2的结果是2.5。 执行路径操作:在路径字符串中,/符…

vscode 调试 ROS2

1、在下列目录同层级找到.vscode文件夹 . ├── build ├── install ├── log └── src 2、 安装ros插件 3、创建tasks.json文件,添加下列内容 //代替命令行进行编译 {"version": "2.0.0","tasks": [{"label": &…

计算机常用编程英文词汇

A abstract base class (ABC)抽象基类 abstract class 抽象类 abstract 抽象的 abstraction 抽象、抽象物、抽象性 access function 访问函数 access level访问级别 access 存取、访问 account 账户 action 动作 activate 激活 active 活动的 actual parameter 实参 adapter 适…

瑞吉外卖第二天

问题分析 前面我们已经完成了后台系统的员工登录功能开发,但是目前还存在一个问题,接下来我们来说明一个这个问题, 以及如何处理。 1). 目前现状 用户如果不登录,直接访问系统首页面,照样可以正常访问。 2). 理想…

Hadoop生态圈中的Hive数据仓库技术

Hadoop生态圈中的Hive数据仓库技术 一、Hive数据仓库的基本概念二、Hive的架构组成三、Hive和数据库的区别四、Hive的安装部署五、Hive的基本使用六、Hive的元数据库的配置问题七、Hive的相关配置项八、Hive的基本使用方式1、Hive的命令行客户端的使用2、使用hiveserver2方法操…