当前位置: 首页 > news >正文

网络原理 一

一、协议

网络通信中,协议是非常重要的概念.

协议进行了分层,此处就是按照这几层顺序来介绍每一层中的核心协议.

应用层,就对应着应用程序,是程序员打交道最多的一层,调用系统提供的 网络api 写出的代码都是基于应用层的.

应用层这里当然也有很多现成的协议,但更多的还是,程序员根据实际场景,自定义协议.

   ->   网络传输的数据要怎么使用,也要考虑数据是怎么样的格式,里面包含哪些内容,

协议是一种约定,虽然存在很多现有的协议,但是除此之外,程序员也可以自己来约定协议.

自定义协议约定好两方面内容:

1   ->   服务器和客户端之间要交互哪些信息

2   ->   数据的具体格式

客户端按照上述约定发送请求,服务器按照上述约定来解析请求

服务器按照上述约定构造响应,客户端也按照上述约定解析请求.

为了让程序员更方便的去约定这里的协议格式,业界也给出了几个比较好用的方案,可以拿过来直接套进来.

1.1 xml

大概的模型如下:

请求:

<request>

        <userld>1000</userld>

        <position>[经纬度]</position>

</request>

响应:

<response>

        <shops>

                <shop>

                        <id>1001</id>

                        <name>杨国福麻辣烫</name>

                        <image>图片地址</image>

                        <rank>4.8</rank>

                        <description>这是麻辣烫</description>

                </shop>

        </shops>

</response>

形如 :<name>   这叫做标签(tag),标签是成对出现的.

<name>称为 开始标签        </name>称为结束标签

开始标签和结束标签之间夹着的就是标签的值.标签可以嵌套

标签名字/标签的值/标签的嵌套关系,都是程序员自定义的.

1.2 json

请求

{

        userld:1000,

        position:[经纬度]

}

响应

{

   {

        id:1001,

        name:"杨国福麻辣烫"

   },

   {

        id:1002,

        name:"隆江猪脚饭"

   }

}

键值对结构

键和值之间使用 "  :  " 分割

键和对之间使用 "  ,  "分割

把若干个键值对使用{}括起来,此时就形成了一个json对象.

还可以把多个json对象放到一起,使用 "  ,  " 分隔开,应且使用 "  [ ]  " 整体括起来,就形成了一个json数组

1.3 protobuffer

只是开发阶段(代码)定义出这里有哪些资源,描述每个字段的含义,

程序真正运行的时候,实际传输的数据是不包含这样的描述信息的.

这样的数据是按照二进制的方式来组织的.

虽然protobuffer运行效率高,但是使用并没有比json广泛.

这样的设定,最高效的做法,并不太有利于程序员阅读.

二、传输层

2.1 端口号

端口号是一个2个字节的整数,使用端口号的时候, 1 - 1024 都属于是系统保留的自用端口.

2.2 UDP协议

无连接,不可靠传输,面向数据报,全双工

UDP数据报 = 报头 + 载荷

UDP报头中有一共有4个字段,每个字段两个字节

由于协议字节中使用两个字节表示端口号,端口号的取值范围就是0-65535   ->   最大就是64kb

2.3 校验和/检验和

校验和/检验和   ->   验证数据再传输过程中是否正确.

前提 : 数据在传输过程中可能会坏掉.

网络数据传输,本质上是光信号/电信号/电磁波,很有可能会受到干扰.

使用高电平低电平表示 0 1 

外界如果加上一个磁场,就可能把其中的低电平变成高电平

此时,出现0 -> 1  ,  1 -> 0  这叫做比特翻转

校验的作用就是用来识别当前数据是否出现了比特翻转,识别数据是否正确.

相关文章:

网络原理 一

一、协议 网络通信中,协议是非常重要的概念. 协议进行了分层,此处就是按照这几层顺序来介绍每一层中的核心协议. 应用层,就对应着应用程序,是程序员打交道最多的一层,调用系统提供的 网络api 写出的代码都是基于应用层的. 应用层这里当然也有很多现成的协议,但更多的还是,程…...

xcode配置快速打开终端命令行工具教程

以往我们使用idea编辑器或者vscode编辑器的时候&#xff0c;我们可以快速的在编辑器下面打开终端进行相关的操作&#xff0c;但是在xcode里面却没有这么方便的功能按钮&#xff0c;真的不是很习惯&#xff0c;所以这次就来给xcode配置这么一个方便的功能。 idea的Terminal 这…...

AIGC降重:如何2分钟降低论文AI率和查重率?推荐使用SpeedAI科研小助手

确保学术论文的独立性与诚信性&#xff0c;对于学业的成就及学位的获取至关重要&#xff0c;其中&#xff0c;论文的人工智能查重与降低AIGC相似度扮演着核心角色。 常规的查重手段主要围绕查重软件的运用和个体的自行审查&#xff1b;而降重则通常通过语句重组、同义替换、内…...

Blazor入门-连接MySQL的简单例子:列出数据+简单查询

参考&#xff1a; ASP.NET Core 6.0 Blazor Server APP并使用MySQL数据库_blazor mysql-CSDN博客 https://blog.csdn.net/mzl87/article/details/129199352 本地环境&#xff1a;win10, visual studio 2022 community, mysql 8.0.33 (MySQL Community Server), net core 6.0 目…...

CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)

注意&#xff1a;本模型继续加入 组合预测模型全家桶 中&#xff0c;之前购买的同学请及时更新下载! 往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;Transformer-BiGRU预测模…...

箭头函数的意义和函数的二义性

前言 说到箭头函数&#xff0c;可能很多人的第一反应就是和普通函数的区别&#xff1a; 箭头函数没有 this&#xff0c;普通函数的 this 指向依赖它是如何被调用的箭头函数没有 arguments 对象&#xff0c;而是通过剩余参数&#xff08;rest parameters&#xff09;来获取所有…...

618必买的数码好物有哪些?盘点兼具设计与实用的数码好物分享

随着618购物节的到来&#xff0c;数码爱好者们又开始跃跃欲试&#xff0c;期待在这个年度大促中寻找到自己心仪的数码好物&#xff0c;在这个数字化时代&#xff0c;数码产品不仅是我们日常生活的必需品&#xff0c;更是提升生活品质的重要工具&#xff0c;那么在众多的数码产品…...

【好书分享第十三期】AI数据处理实战108招:ChatGPT+Excel+VBA

文章目录 一、内容介绍二、内页插图三、作者简介四、前言/序言五、目录 一、内容介绍 《AI数据处理实战108招&#xff1a;ChatGPTExcelVBA》通过7个专题内容、108个实用技巧&#xff0c;讲解了如何运用ChatGPT结合办公软件Excel和VBA代码实现AI办公智能化、高效化。随书附赠了…...

001 CentOS 7.9 安装及配置jdk-8u411-linux-x64.tar.gz

文章目录 1. 下载JDK安装包2. 创建安装目录3. 上传并解压JDK安装包4. 配置环境变量5. 验证安装-bash: pathmunge: command not found配置文件区别$PATH https://dbeaver.io/ 1. 下载JDK安装包 首先&#xff0c;需要从Oracle官方网站或其他可信赖的来源下载jdk-8u411-linux-x64…...

Revit二次开发-WPF ProgressBar 执行程序中显示进度条

Revit开发执行命令时如果时间长,界面会顶住,导致用户误以为程序未响应,解决方法:增加WPF ProgressBar 进度条执行程序中显示进度条,提示命令还是进行中, 实现流程: 新建一个WPF,Window启动时加载一个事件Loaded=“Window_Loaded”,用于显示进度条在WPF后台,新建一个异…...

React:构建Web应用的未来

引言 在不断发展的Web开发领域&#xff0c;React已经成为一股主导力量&#xff0c;重塑了我们构建用户界面和交互式应用的方式。React由Facebook&#xff08;现Meta&#xff09;开发&#xff0c;由于其创新的基于组件的架构、高效的虚拟DOM渲染和声明式编程风格而广受欢迎。在…...

【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词

目录 本文安装包下载地址注意安装elasticsearch1.上传文件2.解压elasticsearch-6.3.1.tar.gz3.开启远程连接权限4.修改其他配置[root用户操作]5.重启虚拟机6.启动es7.外部访问 安装kibana-61.解压2.配置3.启动kibana4.访问5.在开发工具中做数据的增删改查操作 安装IK分词1.wind…...

IDEA中各种Maven相关问题(文件飘红、下载依赖和启动报错)

错误情况 包名、类名显示红色、红色波浪线&#xff0c;大量依赖提示不存在&#xff08;程序包xxx不存在&#xff09; 工程无法启动 一、前提条件 1、使用英文原版IDEA 汉化版的可能有各种奇怪的问题。建议用IDEA英文版&#xff0c;卸载重装。 2、下载maven&#xff0c;配置环…...

Android 13 VSYNC重学习

Android 13 VSYNC重学习 引言 学无止境&#xff0c;一个字干就完事&#xff01; 源码参考基于Android 13 aosp&#xff01; 一. Android VSync模块开胃菜 在开始正式的分析之前&#xff0c;我们先简单对Android的Vsync模块简单介绍下,如下图所示&#xff0c;其中: HW_VSync是…...

std::move和左值右值

引用&#xff1a;windows程序员面试指南 std::move std::move 是 C 标准库中的一个函数模板&#xff0c;用于将一个左值&#xff08;左值引用&#xff09;转化为右值引用&#xff0c;从而实现移动语义。 移动语义是一种可以将资源&#xff08;如内存&#xff09;从一个对象转…...

QT学习备份

2023年1月2日09:00:32 1.信号/槽编辑器 发送者&#xff1a;控件 信号&#xff1a;是控件发出的信号 接受者&#xff1a;包含控件的容器 槽&#xff1a;程序上用slot标识的方法 2.Q_OBJECT宏 只有继承了QObject类的类&#xff0c;才具有信号槽的能力。所以&#xff0c;为了使用…...

【wiki知识库】03.前后端的初步交互(展现所有的电子书)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f4c2;前端配置文件补充 三、&#x1f30f;前端Vue的改造 四、&#x1f4a1;总结 一、&#x1f525;今日目标 在上一篇文章当中&#xff0c;我已带大家把后端的一些基本工…...

AOP——学习

AOP&#xff08;面向切面编程&#xff09;是Spring框架的重要特性之一&#xff0c;用于分离关注点并处理横切关注点&#xff0c;如日志记录、安全性和事务管理。在面试中&#xff0c;AOP相关的问题通常会涉及基本概念、应用场景、实际使用、以及与其他编程范式的比较。以下是一…...

Linux静态库、共享动态库介绍、制作及使用

参考学习&#xff1a;Linux下的各种文件 、动态库基本原理和使用方法&#xff0c;-fPIC选项的来龙去脉 、Linux静态库和动态库分析 文章写作参考&#xff1a;Linux共享库、静态库、动态库详解 - sunsky303 - 博客园 (cnblogs.com) 一.Linux共享库、静态库、动态库详解 使用G…...

【Paddle】稀疏计算的使用指南 稀疏ResNet的学习心得 (2) + Paddle3D应用实例稀疏 ResNet代码解读 (1.6w字超详细)

【Paddle】稀疏计算的使用指南 & 稀疏ResNet的学习心得 Paddle3D应用实例稀疏 ResNet代码解读 写在最前面一、稀疏格式简介1. COO&#xff08;Coordinate Format&#xff09;2. CSR&#xff08;Compressed Sparse Row Format&#xff09; 二、Paddle稀疏张量支持1. 创建 C…...

气象数据可视化实战:从雷达图到三维风场,前端技术栈全解析

气象数据可视化实战&#xff1a;从雷达图到三维风场&#xff0c;前端技术栈全解析 气象数据的可视化一直是前端开发领域最具挑战性的方向之一。想象一下&#xff0c;当你需要将每小时更新的全球气象数据转化为直观的动态图像&#xff0c;让气象学家一眼就能看出台风路径、让飞行…...

轻流MCP|让AI从「会回答」走向「能参与实际业务」

当越来越多企业开始把 AI 引入日常工作&#xff0c;一个现实问题也越来越突出&#xff1a; AI 怎么真正接入业务系统&#xff0c;而不是只停留在聊天层&#xff1f; 过去&#xff0c;很多 AI 更擅长回答问题、生成内容、整理信息。它可以帮助人更快完成写作、总结和分析&#x…...

intv_ai_mk11生成效果:对‘提高工作效率’需求输出结构清晰、可执行的5条建议

intv_ai_mk11生成效果&#xff1a;对"提高工作效率"需求输出结构清晰、可执行的5条建议 1. 模型介绍与使用场景 intv_ai_mk11是一个基于Llama架构的中等规模文本生成模型&#xff0c;特别适合处理通用问答、文本改写、解释说明等任务。这个模型已经完成本地部署&am…...

【若依】框架:从零构建前后端分离项目实战

1. 环境准备与项目初始化 第一次接触若依框架时&#xff0c;我被它"开箱即用"的特性惊艳到了。这个基于Spring Boot的权限管理系统&#xff0c;前后端分离架构设计得非常清晰。下面我会手把手带你完成环境搭建&#xff0c;过程中遇到的坑也会一并说明。 开发环境需要…...

DFRobot URM07超声波传感器UART通信与温度补偿详解

1. DFRobot URM07超声波测距传感器技术深度解析1.1 产品定位与工程价值DFRobot URM07&#xff08;SKU: SEN0153&#xff09;是一款面向嵌入式系统设计的工业级超声波距离传感器模块&#xff0c;其核心价值在于将高精度测距、环境温度补偿、超低功耗与UART标准化接口四者深度融合…...

102. 在控制平面主机名更改后恢复 Rancher 配置的 RKE2 集群

Environment 环境 Rancher provisioned RKE2 downstream cluster control plane node hostname changed, without removing the node from the cluster. Rancher 配置了 RKE2 下游集群控制平面节点的主机名更改&#xff0c;但未将该节点从集群中移除。 Procedure 程序It is …...

3步实现跨平台日历同步:从需求到落地

3步实现跨平台日历同步&#xff1a;从需求到落地 【免费下载链接】ics iCalendar (ics) file generator for node.js 项目地址: https://gitcode.com/gh_mirrors/ic/ics 场景需求&#xff1a;现代日程管理的痛点与解决方案 在数字化办公环境中&#xff0c;日程管理面临…...

用快马AI一键生成数据库管理原型,告别navicat手工建表写接口

用快马AI一键生成数据库管理原型&#xff0c;告别navicat手工建表写接口 最近在开发一个员工信息管理系统时&#xff0c;我深刻体会到传统数据库管理工具的局限性。虽然navicat这类工具能帮我们可视化操作数据库&#xff0c;但每次新建项目都要手动建表、写接口&#xff0c;重…...

余姚加工中心编程培训排行榜单

舜龙模具数控培训执行标准&#xff1a;学习进度一对一、培训一人、合格一人、成就一人&#xff1b;舜龙自有模具工厂&#xff0c;全程实战教学&#xff0c;所学贴合岗位实操&#xff0c;毕业即可对接就业。1998年-2026年&#xff0c;舜龙28年匠心传承。舜龙模具数控培训&#x…...

告别预烘焙!在UE材质编辑器中实时生成FlowMap和法线贴图(附节点图)

实时材质魔法&#xff1a;UE引擎中FlowMap与法线贴图的动态生成技术 在游戏开发与动态视觉创作领域&#xff0c;材质表现的真实感与动态效果一直是技术美术师们追求的核心目标。传统工作流中&#xff0c;FlowMap&#xff08;流场图&#xff09;和法线贴图的生成往往依赖于外部软…...