【网络原理】UDP协议 | UDP报文格式 | 校验和 | UDP的特点 | 应用层的自定义格式
文章目录
- 一、UDP协议
- 1.UDP的传输流程
- 发送方
- 接收方
- 2.UDP协议报文格式:
- 长度受限
- 校验和
- 如何校验:
- CRC算法:循环冗余算法
- md5算法:
- 2.UDP的特点
- 二、开发中常见的自定义格式
- 1.xml(古老)
- 2.json(最流行)
- 3.protobuffer(pb)
- 端口号
一、UDP协议
1.UDP的传输流程
发送方
1.应用层:
QQ应用程序,把用户A输入的“nb woc”,打包成一个应用层的数据报(这个数据报的格式,只有qq的程序员知道)
假设按照这样的格式:
源qq、目的qq、发送时间、发送内容
123456,654321,2024-04-25 12:00,nb woc
这四个字段使用,来分割。这里就构成了一个简单的应用层数据报(字符串拼贴)。
上述描述的规则,就是此处我们约定的应用层协议。应用层协议中,具体用几个字段,字段的顺序,什么分隔符都可以由程序员根据具体的场景和具体的需求来自主决定。
打包完毕之后,就可以把应用层数据报,通过操作系统的API,把数据交给传输层
2.传输层
对刚才的应用层数据,再次进行打包,变成传输层数据报。
本质上还是”字符串拼接“,在刚才的应用层数据基础上,拼贴传输层的报头。
- 传输层的典型协议:TCP, UDP
以UDP为例:一个数据报 = 报头+载荷
UDP报头中最关键的信息就是“源端口”和“目的端口”
进行封装的过程,就是给数据添加更多的“辅助信息”
就相当于快递运送的时候,会进行多次包装(塑封、外层包装、快递盒等等),就可以在包装外面贴上标签信息。同时,打包也可以保护要传输的内容不被破坏。
打包成传输层数据报之后,这个数据又会进一步交给网络层。
3.网络层
在网络层会再次进行封装,打包成网络层数据报,然后交给数据链路层。
IP报头中,最重要的属性是源IP和目的IP
4.数据链路层
会再次打包成以太网的数据报,交给物理层进行传输。
以太网的报头中,最主要的信息就是mac地址 和 目标mac地址。
5.物理层
把上述的数据,转换成二进制的01序列。通过光信号/电信号进行传输。
- 数据的封装:从上层协议到下层协议,层层给数据添加报头。一方面“贴上”辅助信息,来决定后续怎么传输数据。另一方面,可以通过报头来对传输的数据进行校验。就能及时的发现传输过程中的问题。
数据发送出去之后,由于A和B不是通过网线直连的,中间还要经过很多交换机/路由器设备进行转发。
接收方
当数据到达B之后,B就要针对上述数据进行“分用”
对数据报进行层层解析 ->拆快递!
1.物理层
拿到的光电信号转换成二进制数据,得到以太网数据报。交给数据链路层的协议来处理。
2.数据链路层
通过以太网协议,针对以太网数据报进行解析。解析出报头和报尾,以及中间的载荷。把载荷部分交给网络层协议来处理。
3.网络层
通过IP协议,对网络层数据报进行解析,去掉报头,拿到载荷。再进一步把载荷数据交给传输层。
4.传输层
通过UDP协议,针对这个数据报进行解析,去掉报头。把载荷信息交给应用层。
5.应用层
根据端口号,把数据交给QQ应用程序。QQ拿到数据进行解析,解析的方式就是QQ程序员自定义的应用层协议。
取出来nb woc,显示到页面上
实际上,数据报在网络中间还会经历一定的转发过程。如果经过路由器,就会封装分用到网络层。路由器解析到网络层,拿到IP地址后,决定下一步如何进行传输。在下一步传输的时候,又会重新经过网络层、数据链路层和物理层的封装。
如果经过的是交换机,就会封装分用到数据链路层。拿到mac地址来进行下一步的判断。
2.UDP协议报文格式:
- 源IP,目标IP不在传输层,在网络层的IP协议里
长度受限
- UDP报文长度:2个字节,16位表示的数据(0 ~ 65535 ->64kb)一个UDP数据报最长是64kb.传输的大小有明确的限制。而TCP没有包大小的限制
校验和
本质上也是一个字符串,体积比原始数据更小,又是通过原始的数据生成的。如果原始数据相同,得到的校验和就一定相同。反之,校验和相同,原始数据大概率相同(理论上会有不同情况,概率非常低,可以忽略不计)
网络传输中,由于一些外部干扰,就有可能出现数据传输出错的情况。所以需要有办法能够检测识别出出错的数据。这个手段就是校验和
如何校验:
1.发送方,把要发送的数据整理好(data1),通过一定的算法,计算出校验和checksum1.
2.发送方把data1和checksum1一起通过网络发送出去
3.接收方收到数据,收到的数据称为data2(数据就可能和data1不一样了),也收到了checksum1
4.接收方根据data2,用相同的算法重新计算校验和,得到checksum2
5.对比checksum1==checksum2 ? 大概率相同 :不同 。
- UDP在计算校验和时,采用的是CRC算法
CRC算法:循环冗余算法
把当前要计算校验和的数据,每个字节进行累加。把结果保存在两个字节的变量中。
md5算法:
1.定长。无论原始数据多长,计算的md5,都是固定长度。
2.分散。给定两个原始数据,哪怕绝大部分内容都一样,只要其中一个字节不同,得到的md5的值差异都会很大。
因此,md5也适合作为hash算法
3.不可逆。算容易,还原很难。
2.UDP的特点
1.无连接。UDP协议本身不会存储对端的信息,要在发送数据时,显示指定要传输给谁
DatagramPacket requestPacket = new DatagramPacket(request.getBytes(), request.getBytes().length,InetAddress.getByName(serverIp), serverPort);//把转换字符串ipsocket.send(requestPacket);
2.不可靠,无法得知是否发送成功
3.面向数据报 ,以数据报为单位进行传输。DatagramPacket
4.全双工。通过一个socket,既可以send,也可以receive。
socket.send(requestPacket);//3.尝试读取服务器返回的响应DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);socket.receive(responsePacket);
二、开发中常见的自定义格式
应用层和程序员接触最密切,在应用层中,很多时候都是程序员“自定义”应用层协议的。而协议就是一种约定,程序员在代码中规定好,数据如何进行传输
自定义协议:1.根据需求,明确要传输的信息。2.约定好信息按照什么格式来组织
1.xml(古老)
通过标签来组织数据,提高数据的可读性
请求:
<request> <userId>1000</userId><position>100,30</position>
</request>
缺点:标签写起来繁琐,传输的时候也占用更多网络带宽
2.json(最流行)
当下更流行的数据组织格式
- 键值对结构,键固定是字符串类型。值可以是数字、字符串、json、数组等待
{userId:"1000",position:"100,30",
}
优点:可读性好,更简洁
缺点:同样在网络传输中,消耗额外的带宽(需要把key也进行传输)。
除了对于性能要求非常高的场景不使用json,其余的很多地方都可以使用。
开发效率比执行效率更重要
3.protobuffer(pb)
protobuffer使用二进制的方式来组织数据。并且可以保证带宽占用最低。
相当于把要传递的信息按照二进制形式进行了压缩
优点:占用带宽最低,传输效率最高。适应于对性能要求比较高的场景
缺点:二进制格式,可读性不好,降低开发效率
- “现成”的应用层协议:HTTP协议(超文本传输协议)
端口号
写一个服务器,必须手动指定一个端口号。通过端口来区分当前这个主机上的不同应用程序
写一个客户端,客户端在通信的时候也会有一个端口号,是系统自动分配的
端口号在传输层中,固定占2个字节。表示的范围:0~65535。
1 ~1023 称为“知名端口号”:给一些比较”知名“的服务器,预留的位置
22:ssh服务器端口号(ssh协议是用来登录远程主机的)
80:http服务器的端口号
443:https服务器的端口号
1024 ~ 65535 :普通端口号
点击移步博客主页,欢迎光临~
相关文章:

【网络原理】UDP协议 | UDP报文格式 | 校验和 | UDP的特点 | 应用层的自定义格式
文章目录 一、UDP协议1.UDP的传输流程发送方接收方 2.UDP协议报文格式:长度受限校验和如何校验:CRC算法:循环冗余算法md5算法: 2.UDP的特点 二、开发中常见的自定义格式1.xml(古老)2.json(最流行…...

NodeJs入门知识
**************************************************************************************************************************************************************************** 1、配置Node.js与npm下载(精力所致,必有精品) …...

代码随想录学习Day 34
62.不同路径 题目链接 讲解链接 动归五部曲: 1.确定dp数组及其下标的含义:dp[i][j]的含义是从(0, 0)走到(i, j)所需的步数; 2.确定递推公式:因为只能往右或者往下,所以dp[i][j] dp[i - 1][j] dp[i][j - 1]。 3.…...

由于找不到MSVCP120D.dll,无法继续执行代码。重新安装程序可能会解决此问题
由于找不到MSVCP120D.dll,无法继续执行代码。重新安装程序可能会解决此问题 一、问题详细描述二、问题产生背景三、问题原因四、解决办法1、安装缺少的库2、直接更换更高版本的opencv 五、vs版本对应vc1、版本对应2、vs对应vc查看方法 一、问题详细描述 同样可能会报 ÿ…...

【前端】输入时字符跳动动画实现
输入时字符跳动动画实现 在前端开发中,为了提升用户体验,我们经常需要为用户的交互行为提供即时的反馈。这不仅让用户知道他们的操作有了响应,还可以让整个界面看起来更加生动、有趣。本文将通过一个简单的例子讲解如何实现在用户输入字符时…...

C语言面试重点问题
1. 冒泡排序法 2. strlen、strcpy、strcat、strcmp的用法和原理 3. 大小端的区分 3.1 主函数区分大小端 #include <stdio.h>int main(void) {int num 0x11223344;char *p (char *)#if (0x11 *p){printf("大端!\n");}else if (0x44 *p){printf(…...

antlr4略解
文章目录 1. antlr4是用来干什么的?2. 什么是lexer和parser?3. 使用antlr4生成某语言的lexer和parser的具体过程4. 其他 1. antlr4是用来干什么的? 是用来生成某语言lexer和parser的。 通俗点说,就是输入一个语言的规则描述文件&…...

超级好用的C++实用库之文件目录操作
💡 需要该C实用库源码的大佬们,可扫码关注文章末尾的微信公众号二维码,或搜索微信公众号“希望睿智”。添加关注后,输入消息“超级好用的C实用库”,即可获得源码的下载链接。 概述 文件和目录操作是操作系统层面上的基…...

结合kimi chat的爬虫实战思路
背景 想钻研一下项目组件,找找之后的学习方向。不能自以为是,所以借着网开源项目网站上公布的项目内容看一下,那些是我可以努力去学习的(入门的)。首先需要获取相关内容,于是爬取整理。 任务1:…...

UnsupportedClassVersionError异常如何解决?
下面是异常报错的详细描述 java -version java version "17.0.11" 2024-04-16 LTS Java(TM) SE Runtime Environment (build 17.0.117-LTS-207) Java HotSpot(TM) 64-Bit Server VM (build 17.0.117-LTS-207, mixed mode, sharing) 环境变量已经是jdk17,但…...

LeetCode热题100|动态规划Part.1|70.爬楼梯、118.杨辉三角、198.打家劫舍
70.爬楼梯 代码随想录原题,看这篇文章:C动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯 118.杨辉三角 题目链接:118.杨辉三角 一刷代码 时间复杂度和空间复杂度都造到 O ( n u m R o w s 2 ) O(num…...

python 根据网址和关键词批量下载影像
最近用到了GLASS的LAI产品,但这个产品的文件夹分得很细,我需要的影像又有8个瓦片,一个一个点击很麻烦,于是探索了批量下载的方法 一、下载1幅 import requests import re import os import requests import re# 网页URLurl &…...

爬虫-无限debug场景 解决方式
解决无限debug 场景1 1. 鼠标右键 选择 continue to here(此处不停留)2. 鼠标右键 选择 edite breakpoint 设置 10 保证条件不成立 这行永远不执行3.方法置空 1. 方法调用加断点2. 控制台 setInterval function name() {}4. 替换文件 5. hoo…...

[链表专题]力扣206, 203, 19
1. 力扣206 : 反转链表 (1). 题 : 图略 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:输入:head [1,2] 输出&#x…...

秋招后端开发面试题 - MySQL基础
目录 MySQL基础前言面试题MySQL 基础篇Mysql 的基础架构?MySQL 的长连接和短连接长连接引起的异常重启问题?说一下 MySQL 执行一条查询语句的内部执行过程?MySQL 查询缓存的功能有何优缺点?MySQL 的常用引擎都有哪些?I…...

力扣每日一题113:路径总和||
题目 中等 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSu…...

Thinkphp5 中常见的session 操作方法
在 ThinkPHP 框架中,session 是用于在多个页面或请求之间存储用户信息的机制。以下是在 ThinkPHP 中进行 session 常见操作的一些示例: 启动 Session 在 ThinkPHP 中,通常不需要手动启动 Session,因为框架会在应用启动时自动处理…...

inBuilder 低代码平台新特性推荐 - 第十八期
今天来给大家带来的是inBuilder低代码平台特性推荐系列第十八期——表单设计器集成预约日历组件。 一、场景介绍 项目上希望用日历的形式展示某地点在一段时间内的预约记录,表单设计器新增支持创建日历预约视图,并配置预约属性。 二、运行效果 三、前…...

部署xwiki服务需要配置 hibernate.cfg.xml如何配置?
1. 定位 hibernate.cfg.xml 文件 首先,确保您可以在 Tomcat 的 XWiki 部署目录中找到 hibernate.cfg.xml 文件: cd /opt/tomcat/latest/webapps/xwiki/WEB-INF ls -l hibernate.cfg.xml如果文件存在,您可以继续编辑它。如果不存在ÿ…...

1376:信使(msner)
【解题思路】 每个哨所是一个顶点,哨所与哨所之间的通信线路为边,两哨所间通讯花费的时间为边的权值。记第一个哨所为顶点s,信息从第一个哨所传递到表示为顶点x的某哨所可能有多条路径,每条传送路径有一个花费的时间&…...

Hadoop3:HDFS的架构组成
一、官方文档 我这里学习的是Hadoop3.1.3版本,所以,查看的也是3.1.3版本的文档 Architecture模块最下面 二、HDFS架构介绍 HDFS架构的主要组成部分,是一下四个部分 1、NameNode(NN) 就是Master节点,它是集群管理者。 1、管…...

P2910 [USACO08OPEN] Clear And Present Danger S
Problem: P2910 [USACO08OPEN] Clear And Present Danger S 文章目录 思路解题方法复杂度Code 思路 这是一个图论问题,我们需要找到从一个城市到另一个城市的最短路径。我们可以使用Floyd-Warshall算法来解决这个问题。首先,我们需要构建一个距离矩阵&am…...

ES6 对象方面的新特性
ES6(ECMAScript 2015)为JavaScript语言增加了很多新特性,包括对象字面量属性的简写、计算属性名、方法的简写、对象的解构赋值、Object.assign()方法复制对象属性、Object.is()比较两个值等。以下是一些在ES6中经常使用的对象方法:…...

GO语言核心30讲 进阶技术 (第一部分)
原站地址:Go语言核心36讲_Golang_Go语言-极客时间 一、数组和切片 1. 两者最大的不同:数组的长度是固定的,而切片的长度是可变的。 2. 可以把切片看成是对数组的一层封装,因为每个切片的底层数据结构中,一定会包含一…...

[力扣题解]225. 用队列实现栈
题目:225. 用队列实现栈 思路 用一个队列模拟栈; 假设有数字:1,2,3; pop 队列里是这样的存的:3,2,1; 作为一个栈,应该弹出最后进来的那一个3&…...

Leetcode—2105. 给植物浇水 II【中等】
2024每日刷题(131) Leetcode—2105. 给植物浇水 II 实现代码 class Solution { public:int minimumRefill(vector<int>& plants, int capacityA, int capacityB) {int size plants.size();int i 0;int j size - 1;int capA capacityA;in…...

wordpress外贸建站公司歪建站新版网站上线
wordpress外贸建站公司 歪猫建站 歪猫WordPress外贸建站,专业从事WordPress多语言外贸小语种网站建设与外贸网站海个推广、Google SEO搜索引擎优化等服务。 https://www.waimaoyes.com/dongguan...

关于二手车系统学习--登录模块
1.样式1-17行 <div class="cheader"><div style="width: 80%;margin: 0 auto;line-height: 50px;padding-top: 10px"><el-row><el-col:span="5"style="font-size: 20px;cursor: pointer;color: #00ae66;font-weight: …...

若依生成代码的步骤
1.创建表,要有注释 2.导入表 3.创建主菜单 4.修改表 5.生成代码 6.把代码复制到自己的程序中:复制表、后端、前端 7.重启后端,如果有问题则clean 8.回到浏览器可以看到正常显示了生成的页面...

深度学习论文: LightGlue: Local Feature Matching at Light Speed
深度学习论文: LightGlue: Local Feature Matching at Light Speed LightGlue: Local Feature Matching at Light Speed PDF: https://arxiv.org/pdf/2306.13643 PyTorch代码: https://github.com/shanglianlm0525/CvPytorch PyTorch代码: https://github.com/shanglianlm0525/…...