协议的概念+本质+作用+最终表现形式,网络问题(技术+应用+解决的协议+存在原因),主机的对称性

news/发布时间2024/5/15 5:51:57

目录

协议

概念

示例 -- 摩斯密码

本质

作用

网络问题

引入

技术问题

应用问题

主机的对称性

问题对应的协议

问题出现的原因

理解协议(代码层面)

举例 -- 快递单

协议的最终表现形式

协议被双方主机认知的基础


协议

概念

  • 协议是在计算机通信和数据传输中规定通信双方之间行为和数据格式的一组规则
  • 这些规则确保了不同设备和系统之间的互操作性和正确的数据传递
  • 协议定义了通信的步骤、数据的格式、错误处理机制等,使得通信双方能够理解和解释彼此之间传递的信息

示例 -- 摩斯密码

我们以现实中存在的协议来举例子,比如摩斯密码:

  • 它规定,不同元素的排列代表了不同的含义:
  • 也就是说,不用费劲巴拉的写复杂的字母和数字,二进制就可以完整的表示它们(简洁而统一)

并且双方都知道这些规则,只需要严格按照协议规定发送消息,就可以确保对方理解

  • 它通常用于电报通信
  • 摩斯密码的点和划可以通过电流的有无来表示
  • 根据当时时代的发展限制,借助电流传导+二进制表示的方式,可以有效减少由于传输距离引起的信号衰减和失真
  • 毕竟一套东西被设计出来,一定在某些方面是有用的,不然早就被淹没在历史长河中了

本质

协议本质上是一种约定,对所有人使用某资源的一种约定(就像你如果想要和中国人说话,就得会中文)

  • 各方约定好一套规定,确保信息在参与方之间的一致性和可预测性
  • 为什么要提出规定呢?自然是为了解决某个/某些问题

作用

协议本身,就是为了降低沟通的成本->也就减少了沟通出错的概率(相当于基数小了,自然出错的概率也会减少),比如:

  • 面对不同的人/设备,统一的标准能减少问题的出现
  • 如果要进行长距离传输,途中可能会出现各种问题,提前制定好应对措施可以减少出现错误的可能性

网络问题

引入

  • 协议是为了解决某个具体问题才被提出的具体方案
  • 而这里我们讨论的是关于网络的东西,所以针对的自然是网络通信中可能会出现的问题
  • 知道了问题所在,也就能知道协议的内容和具体作用

技术问题

我们根据这张图,来思考不同主机在传递信息时会经过哪些,以及过程中会发生哪些问题:

数据传输必定通过设备来完成

  • 所以,首先要考虑的是,数据如何准确无误地到达下一个设备?

设备与设备之间并不是一对一的

  • 如何定位目标主机的位置呢?

在长距离传输中,会经过无数的设备,但我们无法确保设备不会出错,即使没有出错,也不能保证数据不出错

  • 如何解决数据丢失/损坏的问题?

应用问题

除此之外,我们要明确一点,保证数据成功传输是我们最终的目的吗?

就像你网购,货物的运输过程你真的关心吗

  • 实际上你需要的只是货物,以及拿到后我需要使用它
  • 所以说,数据运输到位后如何被处理,也是我们需要考虑的(因为发来后,解码得到的只是二进制数据,并不是我们真正想要的形式)
  • 比如,发来的视频数据可以被播放,图片数据可以被查看

主机的对称性

以上这些问题,在双方主机上都会存在,收发正常才能算可以通信

所以,需要在双方电脑上都解决这些问题,才能保证正常通信

问题对应的协议

上面说过,协议是为了解决某个具体问题提出的,所以针对这里的每个问题,都会有对应的协议

  • 数据链路层协议 -- 解决设备之间的传输问题
  • ip协议 -- 解决主机定位的问题
  • tcp协议 -- 解决数据丢失/损坏的问题
  • https/http/smtp/ftp -- 解决数据应用层面的问题

问题出现的原因

究其根本,为什么会出现这些问题呢?

  • 如果我与你之间只有几十厘米,交流自然不成问题
  • 扩大到几十米,就得喊着说了,中间还会存在各种阻碍(比如其他人/阻挡物)
  • 再继续扩大,大到人与人不可能通过声音交流,就需要借助设备来交流
  • 随着距离的增加,设备也会增加
  • 自然而然的,随着以上需求的增加,技术就需要革新,这过程中必然有无数的问题暴露出来

理解协议(代码层面)

举例 -- 快递单

快递单其实也是一种协议

  • 收件方,寄件方,快递公司都可以看懂上面的信息,比如:姓名,地址,邮寄编号,电话号码等等
  • 通过这些信息你就可以确定对方的身份,这是多方之间做的一种约定(经手货物的人不同,但都认识快递单,可以通过快递单来得知需要的信息)

还有,快递一般都会有外包装(但实际上你只想要里面的货物),为什么要这样多此一举呢?

  • 首先是保护隐私
  • 其次是它上面贴着快递单,你需要快递单来确认信息

  • 所以,和现实中类似,在网络世界中,你收到的信息不止有信息,还有一些额外的字段
  • 他其实就是协议的具体实现,也被叫做"协议的报头"

协议的最终表现形式

回到代码方面,如果要用代码来表示快递单上的信息(姓名,电话,地址等等),你该如何做?

  • 是不是就是定义一个结构体,用多个变量来表示?
  • 而快递单的信息,正是由结构体+实际数据构成的
  • 所以,协议的最终表现形式就是结构体对象

协议被双方主机认知的基础

所以,为什么协议可以被双方主机认识?

  • 就是因为双方主机上都存在相同的结构体类型
  • 传递一个结构体对象,就能使双方建立起约定
  • (建立好约定后,就像双方都有相同的锁和钥匙,可以互相开对方的门)

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

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

飞天使-k8s知识点23-kubernetes实操8-数据存储1

文章目录 持久化存储的必要EmptyDirHostPathNFS 持久化存储的必要 Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据共…

韩国突发:将批准比特币ETF

作者:秦晋 韩国两党宣布将批准比特币ETF。比特币也再次成为竞选的宠儿。 4月10日,韩国将迎来每隔4年而进行的一次立法大选。在大选之前,现执政党与反对党都承诺将批准比特币ETF。 我们知道,比特币的主要受众群体以年轻人居多。此前…

零基础C++开发上位机--基于QT5.15的串口助手(一)

嵌入式开发的过程中,大部分我们的代码是无法一次成功的。这时候我们大部分的工程师可能最熟练的调试方法是printf函数,打印随意一个数据,来观察当前运行的函数是否执行正确。我们连接的工具有各个大神做的串口助手。另外,在做一般…

Git基本操作(2)

Git基本操作(2) 上交文件之后,git文件的变化git cat-file HEAD指针里面有啥文件被修改git statusgit diff 文件名 版本回退(git reset)撤销回退git reflog 撤销的三种情况还没有addgit checkout -- [file] 已经add还没…

聊聊分库分表

文章导读 背景介绍 随着互联网技术的发展,数据量呈爆炸性增长。大数据量的业务场景中,数据库成为系统性能瓶颈的一个主要因素。当单个数据库包含了太多数据或过高的访问量时,会出现查询缓慢、响应时间长等问题,严重影响用户体验。…

如何在Linux部署OpenGauss数据管理系统并实现公网访问内网数据

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统,采用木兰宽松许可证v2发行。openGauss内核深度融合…

学习JAVA的第二天(基础)

目录 基本概念 关键字 class关键字 字面量 练习 变量 定义格式 变量使用 数据类型 基本数据类型 标识符 命名规则 键盘录入 1.导包 2.创建对象 3.接受数据 运算符 算术运算符 练习 隐式转换(自动类型提升) 强制转换 自增自减运算符 …

【前端素材】推荐优质后台管理系统Jampack平台模板(附源码)

一、需求分析 后台管理系统(或称作管理后台、管理系统、后台管理平台)是一种专门用于管理网站、应用程序或系统后台运营的软件系统。它通常由一系列功能模块组成,为管理员提供了管理、监控和控制网站或应用程序的各个方面的工具和界面。以下…

[论文解读]ALOHA 2:用于双手遥控操作的增强型低成本硬件

多样化的演示数据集推动了机器人学习的重大进步,但此类数据的灵活性和规模可能受到硬件成本、硬件鲁棒性和远程操作难易程度的限制。我们推出ALOHA 2,这是ALOHA的增强版本,与原始设计相比,它具有更高的性能、人体工程学和稳健性。…

Spring 容器、核心容器总结

目录 创建容器获取 bean容器类层次结构图核心容器总结容器相关bean 相关依赖注入相关 创建容器 方式一: 类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext("applicationContext.xml");方式二: 文件路径加载配…

TCP Keepalive 和 HTTP Keep-Alive

HTTP 的Keep-Alive 在 HTTP 1.0 中默认是关闭的,如果浏览器要开启 Keep-Alive,它必须在请求的包头中添加: Connection: Keep-Alive然后当服务器收到请求,作出回应的时候,它也添加一个头在响应中: Connec…

基于java+springboot+vue实现的美食信息推荐系统(文末源码+Lw)23-170

1 摘 要 使用旧方法对美食信息推荐系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在美食信息推荐系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发…

Elasticsearch:创建自定义 ES Rally tracks 的分步指南

作者:Alejandro Snchez 按照这个综合教程学习如何制作个性化的 Rally tracks ES Rally 是什么?它的用途是什么? ES Rally 是一个用于在 Elasticsearch 上测试性能的工具,允许你运行和记录比较测试。 做出决策可能很困难&#x…

【kubernetes】二进制部署k8s集群之master节点和etcd数据库集群(上)

目录 前言:关于整个k8s集群的主机规划以及本文部署架构 步骤一:完成操作系统初始化配置 步骤二:完成etcd集群部署 关于etcd集群 ①准备签发证书环境 ②先完成单独一个节点的部署 ③通过部署好的etcd01节点 完成另外两个节点的部署 拓展…

如何在CentOS安装SQL Server数据库并实现无公网ip环境远程连接

文章目录 前言1. 安装sql server2. 局域网测试连接3. 安装cpolar内网穿透4. 将sqlserver映射到公网5. 公网远程连接6.固定连接公网地址7.使用固定公网地址连接 前言 简单几步实现在Linux centos环境下安装部署sql server数据库,并结合cpolar内网穿透工具&#xff0…

使用IntelliJ IDEA查看接口的全部实现方法

在大型Java项目中,经常会使用接口和抽象类进行代码设计。为了更好地了解代码结构和功能,我们需要快速查看一个接口的所有实现类。IntelliJ IDEA提供了一些方便的方法来实现这一目标。 1. 点击查看接口的实现子类 在IDEA中,你可以轻松地查看…

南邮概率统计与随机过程练习册答案

**南京邮电大学** **概率统计与随机过程练习册答案简介** 本文档是一份精心整理的南京邮电大学概率统计与随机过程课程的练习册答案集。它旨在为学习该课程的学生提供一个详尽的解题参考,帮助他们更好地理解和掌握概率论与统计学的基本概念和方法。 **内容概览:** - **章节…

发布订阅模式:观察者模式的一种变体

发布-订阅模型(Publish-Subscribe Model)的底层机制通常基于观察者模式。 发布-订阅模型是观察者模式的一种变体。 在观察者模式中,主题(或被观察者)维护了一组观察者,当主题的状态发生变化时&#xff0c…

【day02】每天三道 java后端面试题:Java、C++和Go的区别 | Redis的特点和应用场景 | 计算机网络七层模型

文章目录 1. Java、C和 Go 语言的区别,各自的优缺点?2. 什么是Redis?Redis 有哪些特点? Redis有哪些常见的应用场景?3. 简述计算机网络七层模型和各自的作用? 1. Java、C和 Go 语言的区别,各自的…

2.1_4 进程通信

文章目录 2.1_4 进程通信(一)什么是进程间通信(二)为什么进程通信需要操作系统支持(三)共享存储(四)消息传递(1)直接通信方式(2)间接通…
推荐文章