协议
一、为什么要有协议?
协议的产生是为了解决问题,那么解决什么问题?
- 如何处理发来的数据
- 长距离传输的数据丢失问题
- 如何定位主机的问题
- 怎么保证数据准确到达下一个主机的问题
那么为什么会产生这些问题?
归根结底,还是因为距离变长的原因。
因为距离的边长,导致我们的需要进行跨主机通信,跨主机的通信又导致着我们通信之后,
**如何将数据发送的问题。数据发送过去之后,
如何处理数据,处理完的数据在传输的过程中,
如果发生数据包的丢失,比特位翻转,乱序的这些长距离传输的问题怎么解决,将数据传到另一台主机之后,
如何将这些数据处理获取到我们想要的信息。
诸如上面的这些问题的产生,为了能够解决这些问题,我们的协议因此诞生。每一层问题通过设定对应的协议来解决相应的问题,前一个问题的目的是下一个问题的开始,我们的协议也意味着要分层设定来解决对应层的问题。
二、什么是协议?
协议就是一种约定,就比如我们生活中我们要发快递,将一个物品交给另一个人,我们在发快递的时候,不仅仅只是将物品给快递员,这样子快递员不知道要将快递发给谁,怎么联系收件人,快递拿到哪里才能交给收件人。而是我们在发快递的时候,会将物品放在快递盒子里打包,然后在快递盒子上添上快递信息,这样就能让我们知道快递是谁发来的,发到哪里,怎么联系对方。
而协议,就是一种类似与快递信息的产物,它是一种约定,一种我们双方都能看的懂,并从中获取到传输的信息的约定,在语言层面上,我们可以抽象的将其理解为协议就是一种结构体,这个结构体的组成双方都知道,而结构体,不就是由二进制码组成的吗,所以,协议是一种我们双方都可以看的懂,并且是在我们要发送的内容的基础上额外多出来的那部分二进制码。 类似于摩斯密码的东西,它需要双方都清楚的知道如何解码,也就是约定。所以我们的主机在看到协议的那部分二进制码的时候,我们不仅仅只是看到了那部分二进制码,更能理解它背后真正的含义。
三、思考:只要通信的两台主机,约定好协议就可以了吗?
首先,计算机的厂商很多,操作系统也很多,网络硬件也很多,那么假如,只是通信的两台主机约定协议,那么是不是不同的操作系统之间就不能通信了?
是不是新的主机想通信就得和另外一台主机制定新的协议?就好比:中国人要和外国人说话,就要用一种新的语言来说话吗?那显然是不可能的。
所以,这时候就需要制定一个统一的标准,让我们所有的主机都遵守这个约定,制定出来一个标准,让大家都来遵守,这就是网络协议。这样任意两台主机都能有一个共同的标准,就都能看的懂对方发来数据背后所蕴含的信息。
四、协议分层
1.协议为什么要分层?
协议分层的原因有两个方面:
首先,要制定协议,规模太大了,所以我们要分层去实现,以高内聚,低耦合的目的去实现,这样子我们在维护上更加方便,层和层之间的耦合度低,意味着我们可以分工去维护不同层。
其次,我们的问题也是层状的,
* 如何处理发来的数据
* 长距离传输的数据丢失问题
* 如何定位主机的问题
* 怎么保证数据准确到达下一个主机的问题
基于对问题的解决,我们制定协议也是分层的,每层协议解决对应层的问题。
2.协议如何分层?
协议分层,我们通常是采取OSI七层模型
- 物理层:物理层主要是一些网卡的硬件设备
- 数据链路层:主要是解决数据帧的识别和传送问题,主要是面对一些比特为错误或者数据帧丢失的问题
- 网络层:网络层解决的是我们的数据发到哪里的问题
- 传输层:传输层面对的是我们数据传送的可靠性问题,是否有数据丢失的情况。
- 会话层:何时建立连接?何时断开连接?
- 表示层:就比如传过来的数据是图片还是影音还是文字?
- 应用层:针对特定应用制定特定的协议,如http协议
————————————————————————————————
但对于我们日常搭建服务器而言,我们主要关心其中的五层,我们将这五层叫做TCP/IP协议,分别是 物理层 数据链路层 网络层 传输层 应用层。
但物理层由于是网卡这些硬件设备,所以通常我们也叫做TCP/IP四层协议。
五、数据是如何发送的?
首先,假如我们的应用层要发一个 你好 这样的消息给对方
然后 你好 这个消息就会传到下一层传输层,传输层对其进行封装消息,保证数据的可靠性。接着传到下一层
网络层对其再进行封装,来告知我们的 你好 这个消息是谁发来的,来源是谁,要发给谁,目的地是哪里?然后接着传到下一层。
数据链路层就将消息的数据帧处理,然后给物理层,通过网卡进行发送消息给对方网卡。
对于数据链路层而言:它的报文就是这里的报头 + 有效载荷
对于网络层而言:它的报头就是它封装的时候多出来的那部分,原本的东西就是有效载荷。
而当对方的网卡收到收到消息的时候,就会进行解包,将有效载荷传给它的上一层。
所以最后我们的应用层就会收到对方的消息。这种通信方式,对层和层之间进行解耦。
对于同一层而言,它认为它是在和对方同层在进行交流,因为同一层所用的协议相同,那么自然就可以看的懂对方发来的报头的具体含义,而不需要关心其他层的报头消息。这就实现了高内聚,低耦合的思想。
就比如:我们在打电话的时候,我们认为我们是在和对方直接进行交流,但实际上我们是在和电话进行交流,电话将我们的消息封装成一种无线电信号传给对方的电话,对方的电话接收到信号,然后再将信号进行解析成信息,然后再传给对方,对方就能听到我们说话。
在逻辑层面上,我们认为我们是在和对方直接进行交流,电话是在和电话进行交流,这就是层和层之间交流。
标签:协议,主机,网络,问题,快递,例子,Linux,数据,我们 From: https://blog.csdn.net/2403_86785171/article/details/141369998