【网络原理】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);//把转换字符串ip
            socket.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 :普通端口号


点击移步博客主页,欢迎光临~

偷cyk的图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nn.TransformerEncoderLayer详细解释,使用方法!!

nn.TransformerEncoderLayer nn.TransformerEncoderLayer 是 PyTorch 的 torch.nn 模块中提供的一个类&#xff0c;用于实现 Transformer 编码器的一个单独的层。Transformer 编码器层通常包括一个自注意力机制和一个前馈神经网络&#xff0c;中间可能还包含层归一化&#xff…

uniapp关于iconfont字体图标使用

1、打开[阿里巴巴矢量图标库](https://www.iconfont.cn/)&#xff0c;选择需要的图标添加到购物车 2、点开购物车&#xff0c;将图标添加到项目 3、点开项目&#xff0c;点击下载至本地&#xff0c;会得到一个download.zip包 4、解压download包 5、将包里的iconfont.css和iconf…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-8.1--C语言LED驱动程序

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Q1季度阿胶电商数据分析:某黑马品牌线上销售增长超1800%

作为滋补养三大宝之一&#xff0c;阿胶具有补血滋阴、润燥止血、益智健脑、缓延衰老、强筋健骨、提高免疫力等多种功效和作用。同时阿胶被誉为“补血神器”、“美容养颜”等&#xff0c;使得其备受市场欢迎。 根据鲸参谋数据显示&#xff0c;今年Q1季度&#xff0c;在综合电商…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第15课-xcard方式跳转平行3D馆

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第15课-xcard方式跳转平行3D馆 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智…

记录一次大数据量接口优化过程

问题描述 记录一次大数据量接口优化过程。最近在优化一个大数据量的接口&#xff0c;是提供给安卓端APP调用的&#xff0c;因为安卓端没做分批次获取&#xff0c;接口的数据量也比较大&#xff0c;因为加载速度超过一两分钟&#xff0c;所以导致接口超时的异常&#xff0c;要让…

【C++干货基地】探索C++模板的魅力:如何构建高性能、灵活且通用的代码库(文末送书)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引入 哈喽各位铁汁们好啊&#xff0c;我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发&#xff0c;不知道各位的…

天空卫士旗舰产品入选《网络安全专用产品指南》

权威认证 近日&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;发布了第一版《网络安全专用产品指南》。这一权威指南中&#xff0c;天空卫士荣获殊荣&#xff0c;旗下三款尖端产品荣耀入选&#xff0c;分别是增强型Web安全网关&#xff08;ASWG&#xff09;、数…

广交会烹饪机器人用上大模型 支付宝小程序云提供技术支持

近日&#xff0c;第135届广交会正在火热进行&#xff0c;记者获悉&#xff0c;支付宝小程序云助力合作伙伴田螺云厨&#xff0c;在烹饪机器人上开始用上大模型技术。各类智能产品的亮相&#xff0c;从中国制造迈向中国创造&#xff0c;也成为广交会的一个亮点。 &#xff08;图…

ipad的文件如何传到手机里 iPad较大文件怎么发送出去 iMazing下载教程

在现代生活中&#xff0c;随着移动设备的普及和多样化&#xff0c;我们经常需要在不同设备之间传输文件&#xff0c;以便在工作、学习或娱乐中更加便捷地使用这些文件。iPad和iPhone是用户广泛使用的设备&#xff0c;我们时常使用它们来存储和访问大量的个人数据。但有时&#…

人脸识别开源算法库和开源数据库

目录 1. 人脸识别开源算法库 1.1 OpenCV人脸识别模块 1.2 Dlib人脸识别模块 1.3 SeetaFace6 1.4 DeepFace 1.5 InsightFace 2. 人脸识别开源数据库 2.1 CelebA 2.2 LFW 2.3 MegaFace 2.4 Glint360K 2.5 WebFace260M 人脸识别 (Face Recognition) 是一种基于人的面部…

C#命名空间常用函数

在C#中&#xff0c;不同命名空间下有各种常用函数&#xff0c;下面列举一些常见的函数及其对应的命名空间&#xff1a; System命名空间&#xff1a; Console.WriteLine()&#xff1a;用于向控制台输出信息。Convert.ToInt32()&#xff1a;用于将其他数据类型转换为整数类型。 S…

python与上位机开发day04

模块和包、异常、PyQt5 一、模块和包 1.1 模块 Python中模块就是一个.py文件&#xff0c;模块中可以定义函数&#xff0c;变量&#xff0c;类。模块可以被其他模块引用 1.1.1 导入模块 """ 导入格式1&#xff1a; import 模块名 使用格式&#xff1a; …

【百度Apollo】探索自动驾驶:Apollo 新版本 Beta 全新的Dreamview+,便捷灵活更丰富

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、Dreamview介绍二、Dreamview 新特性2.1、基于模式的多场景——流程更简洁地图视角调节&#xff1a;调试流…

JavaEE技术之MySql高级(索引、索引优化、sql实战、View视图、Mysql日志和锁、多版本并发控制)

文章目录 1. MySQL简介2. MySQL安装2.1 MySQL8新特性2.2 安装MySQL2.2.1 在docker中创建并启动MySQL容器&#xff1a;2.2.2 修改mysql密码2.2.3 重启mysql容器2.2.4 常见问题解决 2.3 字符集问题2.4 远程访问MySQL(用户与权限管理)2.4.0 远程连接问题1、防火墙2、账号不支持远程…

Python中的类(Class)详解——新手指南

在Python编程中&#xff0c;类&#xff08;Class&#xff09;是一个非常重要的概念&#xff0c;它允许程序员创建自己的对象类型。这些对象类型可以包含数据&#xff08;称为属性&#xff09;和函数&#xff08;称为方法&#xff09;&#xff0c;它们定义了这些对象的行为。本文…

Spring-Mybatis-Xml管理(动态sql语句,sql语句复用)

目录 前置条件 动态SQL语句 动态删除数据 1.集合类型:数组 2.集合类型: List 型 SQL语句重用 说明 &#x1f9e8;前置条件 已经创建了实体类(这边举个例子) 实体类User表 表中的字段名User实体类的属性值id (bigint auto increment) 长整型 自动增长private Long iduser…

场景文本检测识别学习 day06(Vi-Transformer论文精读)

Vi-Transformer论文精读 在NLP领域&#xff0c;基于注意力的Transformer模型使用的非常广泛&#xff0c;但是在计算机视觉领域&#xff0c;注意力更多是和CNN一起使用&#xff0c;或者是单纯将CNN的卷积替换成注意力&#xff0c;但是整体的CNN 架构没有发生改变VIT说明&#x…

C++入门第二节

点赞关注不迷路&#xff01;&#xff0c;本节涉及c入门关键字、命名空间、输入输出... 1. C关键字 C总计63个关键字&#xff0c;C语言32个关键字 asmdoifreturntrycontinueautodoubleinlineshorttypedefforbooldynamic_castintsignedtypeidpublicbreakelselongsizeoftypenam…

LeetCode-hot100题解—Day5

原题链接&#xff1a;力扣热题-HOT100 我把刷题的顺序调整了一下&#xff0c;所以可以根据题号进行参考&#xff0c;题号和力扣上时对应的&#xff0c;那么接下来就开始刷题之旅吧~ 1-8题见LeetCode-hot100题解—Day1 9-16题见LeetCode-hot100题解—Day2 17-24题见LeetCode-hot…