当前位置: 首页 > 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…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...