协议的概念+本质+作用+最终表现形式,网络问题(技术+应用+解决的协议+存在原因),主机的对称性
目录
协议
概念
示例 -- 摩斯密码
介绍
作用
协议的本质
作用
网络问题
引入
技术问题
应用问题
主机的对称性
问题对应的协议
问题出现的原因
理解协议(代码层面)
举例 -- 快递单
协议的最终表现形式
协议被双方主机认知的基础
协议
概念
- 协议是在计算机通信和数据传输中规定通信双方之间行为和数据格式的一组规则
- 这些规则确保了不同设备和系统之间的互操作性和正确的数据传递
- 协议定义了通信的步骤、数据的格式、错误处理机制等,使得通信双方能够理解和解释彼此之间传递的信息
示例 -- 摩斯密码
介绍
我们以现实中存在的协议来举例子,比如摩斯密码:
- 它规定,不同元素的排列代表了不同的含义:
- 也就是说,不用费劲巴拉的写复杂的字母和数字,二进制就可以完整的表示它们(简洁而统一,减少了沟通成本)
- 双方都知道这些规则(也就是这些符号代表的含义),他们只需要严格按照协议规定发送消息,就能够确保对方理解
作用
- 它通常用于电报通信
- 摩斯密码的点和划可以通过电流的有无来表示
- 根据当时时代的发展限制,借助电流传导+二进制表示的方式,可以有效减少由于传输距离引起的信号衰减和失真
- 毕竟一套东西被设计出来,一定在某些方面是有用的,不然早就被淹没在历史长河中了
协议的本质
协议本质上是一种约定,对所有人[需要使用某资源时]的一种约定
比如:
- 你如果想要和中国人说话,就得会中文
- 如果对方发送给你word文档/excel表格,你得用对应的软件打开
作用
为什么要提出规定呢?自然是为了解决某个/某些问题
- 协议本身,就是为了降低沟通的成本->也就减少了沟通出错的概率(相当于基数小了,自然出错的概率也会减少)
- 建立好约定后,你就可以以较小成本来完成交流,可以确保信息在参与方之间的一致性和可预测性
比如:
- 苹果/香蕉这些名称(或者其他语言下的名称),都是我们对[对应东西]的一种约定,使用这套规定,就可以很轻松让别人知道你说的是什么
- 如果要进行长距离传输,途中可能会出现各种问题,提前制定好应对措施可以减少出现错误的可能性
网络问题
引入
- 协议是为了解决某个具体问题才被提出的具体方案
- 而这里我们讨论的是关于网络的东西,所以针对的自然是网络通信中可能会出现的问题
- 知道了问题所在,也就能知道协议的内容和具体作用
技术问题
我们根据这张图,来思考不同主机在传递信息时会经过哪些,以及过程中会发生哪些问题:
数据传输必定通过设备来完成
- 所以,首先要考虑的是,数据如何准确无误地到达下一个设备?
设备与设备之间并不是一对一的
- 如何定位目标主机的位置呢?
在长距离传输中,会经过无数的设备,但我们无法确保设备不会出错,即使没有出错,也不能保证数据不出错
- 如何解决数据丢失/损坏的问题?
应用问题
除此之外,我们要明确一点,保证数据成功传输是我们最终的目的吗?
就像你网购,货物的运输过程你真的关心吗
- 实际上你需要的只是货物,以及拿到后我需要使用它
- 所以说,数据运输到位后如何被处理,也是我们需要考虑的(因为发来后,解码得到的只是二进制数据,并不是我们真正想要的形式)
- 比如,发来的视频数据可以被播放,图片数据可以被查看
主机的对称性
以上这些问题,在双方主机上都会存在,收发正常才能算可以通信
所以,需要在双方电脑上都解决这些问题,才能保证正常通信
问题对应的协议
上面说过,协议是为了解决某个具体问题提出的,所以针对这里的每个问题,都会有对应的协议
- 数据链路层协议 -- 解决设备之间的传输问题
- ip协议 -- 解决主机定位的问题
- tcp协议 -- 解决数据丢失/损坏的问题
- https/http/smtp/ftp -- 解决数据应用层面的问题
问题出现的原因
究其根本,为什么会出现这些问题呢?
- 如果我与你之间只有几十厘米,交流自然不成问题
- 扩大到几十米,就得喊着说了,中间还会存在各种阻碍(比如其他人/阻挡物)
- 再继续扩大,大到人与人不可能通过声音交流,就需要借助设备来交流
- 随着距离的增加,设备也会增加
- 自然而然的,随着以上需求的增加,技术就需要革新,这过程中必然有无数的问题暴露出来
理解协议(代码层面)
举例 -- 快递单
快递单其实也是一种协议
- 收件方,寄件方,快递公司都可以看懂上面的信息,比如:姓名,地址,邮寄编号,电话号码等等
- 通过这些信息你就可以确定对方的身份,这是多方之间做的一种约定(经手货物的人不同,但都认识快递单,可以通过快递单来得知需要的信息)
还有,快递一般都会有外包装(但实际上你只想要里面的货物),为什么要这样多此一举呢?
- 首先是保护隐私
- 其次是它上面贴着快递单,你需要快递单来确认信息
- 所以,和现实中类似,在网络世界中,你收到的信息不止有信息,还有一些额外的字段
- 他其实就是协议的具体实现,也被叫做"协议的报头"
协议的最终表现形式
回到代码方面,如果要用代码来表示快递单上的信息(姓名,电话,地址等等),你该如何做?
- 是不是就是定义一个结构体,用多个变量来表示?
- 而快递单的信息,正是由结构体+实际数据构成的
- 所以,协议的最终表现形式就是结构体对象
- (注意,结构体对象只是其中的一种表现类型,协议也可以是其他形式,这里只是以结构体对象为例,来让我们更好地理解协议是什么)
协议被双方主机认知的基础
所以,为什么协议可以被双方主机认识?
- 就是因为双方主机上都存在相同的结构体类型
- 传递一个结构体对象,就能使双方建立起约定
- (建立好约定后,就像双方都有相同的锁和钥匙,可以互相开对方的门)
相关文章:
协议的概念+本质+作用+最终表现形式,网络问题(技术+应用+解决的协议+存在原因),主机的对称性
目录 协议 概念 示例 -- 摩斯密码 介绍 作用 协议的本质 作用 网络问题 引入 技术问题 应用问题 主机的对称性 问题对应的协议 问题出现的原因 理解协议(代码层面) 举例 -- 快递单 协议的最终表现形式 协议被双方主机认知的基础 协议 概念 协议是在计算机通信…...
iOS中卡顿产生的主要原因及优化思路
卡顿本质上是一个UI体验上的问题,而UI的渲染及显示,主要涉及CPU和GPU两个层面。若 CPUGPU渲染耗时超过16.7ms,就会在屏幕vsync信号到来时无法更新屏幕内容,进而导致卡顿。 iOS中UI渲染主要包含Layout->Draw->Prepare->Co…...
spring boot集成Elasticsearch 7.16.3
环境:Elasticsearch 版本 7.16.3 Elasticsearch for windows下载地址 windows 若依 spring boot版本 2.6.0 pom文件添加 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-elasticsearch<…...
HTML5+CSS3小实例:环绕小球弹性loading动画
实例:环绕小球弹性loading动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge&quo…...
SpringBoot 自定义注解实现操作日志记录
文章目录 前言正文一、项目结构介绍二、核心类2.1 核心注解2.1.1 CLog 日志注解2.1.2 ProcessorBean 处理器bean 2.2 切面类2.3 自定义线程池2.4 工具类2.4.1 管理者工具类 2.5 测试2.5.1 订单创建处理器2.5.2 订单管理者2.5.3 订单控制器2.5.4 测试报文2.5.5 测试结果 附录1、…...
ubuntu常见配置
ubuntu各个版本的安装过程大差小不差,可以参考,ubuntu20.04 其它版本换一下镜像版本即可 安装之后需要配置基本的环境,我的话大概就以下内容,后续可能有所删改 sudo apt-get update sudo apt-get install gcc sudo apt-get inst…...
electron+vue3全家桶+vite项目搭建【27】封装窗口工具类【1】雏形
文章目录 引入思路抽出公共声明文件抽出全局通用数据类型和方法主进程模块1.抽离基础常量2.封装窗口工具类 渲染进程模块测试结果 引入 demo项目地址 可以看到我们之前在主进程中的逻辑全部都塞到index.ts文件中,包括窗口的一些事件处理,handle监听&am…...
从模型到复合AI系统的转变
2023年,大型语言模型(LLM)吸引了所有人的注意力,它可以通过提示来执行通用任务,例如翻译或编码。这自然导致人们将模型作为AI应用开发的主要成分而密切关注,所有人都在想新的LLM将带来什么能力。然而,随着越来越多的开发者开始使用LLM构建,我们认为这种关注正在迅速改变:最先进…...
将仓库A中的部分提交迁移到仓库B中
结论: 使用git format-patchgit am即可实现 使用场景: 例如仓库A这里有5个提交记录,commitid1, commitid2, commitid3, commitid4,commitid5 仓库B想用仓库A中提交的代码,手动改比较慢,当改动较多的时候…...
信息安全技术基础
本博客地址:https://security.blog.csdn.net/article/details/136331705 一、信息安全基础 1、信息安全的基本要素有机密性、完整性、可用性、可控性与可审查性。信息安全的范围包括设备安全、数据安全、内容安全和行为安全。其中数据安全即采取措施确保数据免受未…...
flask知识--01
flask介绍 # python 界的web框架: Django:大而全,使用率较高 :https://github.com/django/django -FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi -flask:公司一些…...
软考52-上午题-【数据库】-关系模式2
一、关系模式的回顾 见:软考38-上午题-【数据库】-关系模式 二、关系模式 2-1、关系模式的定义 示例: 念法:A——>B A决定B,或者,B依赖于A。 2-2、函数依赖 1、非平凡的函数依赖 如果X——>Y,&a…...
devc++跑酷小游戏3.5.0
本来想搞存档的,失败了,要再学学文件操作的函数。还有一个打印地图的函数,更失败,彻底放弃。最近开学了,游戏不会经常更新,要写作业。昨天写到10点T_T #include<bits/stdc.h> #include<windows.h…...
Redisson限流算法
引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.12.3</version> </dependency>建议版本使用3.15.5以上 使用 这边写了一个demo示例,定…...
GPT与MBR:硬盘分区表格式的革新与区别
概述 在计算机存储领域,硬盘分区是管理数据和操作系统部署的基础。两种广泛使用的分区表格式——MBR(Master Boot Record)和GPT(GUID Partition Table),各自代表了不同的技术阶段和发展需求。本文将详细介…...
机器学习-1
文章目录 前言机器学习基本定义 练习题 前言 在本片开始将为大家介绍机器学习相关的知识点。 机器学习基本定义 夏天,我们通常会去水果店里买西瓜,我们看到一个根蒂蜷缩、敲起来声音浑浊的青绿色的西瓜,我们提着西瓜就去结账了,…...
Stream流详解
当我们对一个集合中的元素进行多次过滤应该怎样做? 下面看一个案例 按照下面的要求完成集合的创建和遍历 创建一个集合,存储多个字符串元素 把集合中所有以"张"开头的元素存储到一个新的集合 把"张"开头的集合中的长度为3的元素存储到一个新…...
javaweb学习(day05-TomCat)
一、介绍 1 官方文档 地址: https://tomcat.apache.org/tomcat-8.0-doc/ 2 WEB 开发介绍 2.1 WEB 在英语中 web 表示网/网络资源(页面,图片,css,js)意思,它用于表示 WEB 服务器(主机)供浏览器访问的资源 2.2 Web 资源 WEB 服务器 ( 主机 ) 上供外界访问的 …...
【Unity】构建简单实用的年份选择器(简单原理示范)
在许多应用程序和游戏中,年份选择是一个常见的需求。无论是在日历应用程序中查看事件,还是在历史类游戏中选择时间段,年份选择器都是用户体验的重要组成部分,下面实现一个简易的年份选择器。 一、效果预览: 目录 一、…...
LeetCode 2120.执行所有后缀指令
现有一个 n x n 大小的网格,左上角单元格坐标 (0, 0) ,右下角单元格坐标 (n - 1, n - 1) 。给你整数 n 和一个整数数组 startPos ,其中 startPos [startrow, startcol] 表示机器人最开始在坐标为 (startrow, startcol) 的单元格上。 另给你…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...


