【Linux网络】协议

一、为什么要有协议?

协议的产生是为了解决问题,那么解决什么问题?

  • 如何处理发来的数据
  • 长距离传输的数据丢失问题
  • 如何定位主机的问题
  • 怎么保证数据准确到达下一个主机的问题
    那么为什么会产生这些问题?
    归根结底,还是因为距离变长的原因。
    因为距离的边长,导致我们的需要进行跨主机通信,跨主机的通信又导致着我们通信之后,
**如何将数据发送的问题。数据发送过去之后,
  如何处理数据,处理完的数据在传输的过程中,
  如果发生数据包的丢失,比特位翻转,乱序的这些长距离传输的问题怎么解决,将数据传到另一台主机之后,
  如何将这些数据处理获取到我们想要的信息。

诸如上面的这些问题的产生,为了能够解决这些问题,我们的协议因此诞生。每一层问题通过设定对应的协议来解决相应的问题,前一个问题的目的是下一个问题的开始,我们的协议也意味着要分层设定来解决对应层的问题。

二、什么是协议?

协议就是一种约定,就比如我们生活中我们要发快递,将一个物品交给另一个人,我们在发快递的时候,不仅仅只是将物品给快递员,这样子快递员不知道要将快递发给谁,怎么联系收件人,快递拿到哪里才能交给收件人。而是我们在发快递的时候,会将物品放在快递盒子里打包,然后在快递盒子上添上快递信息,这样就能让我们知道快递是谁发来的,发到哪里,怎么联系对方。
而协议,就是一种类似与快递信息的产物,它是一种约定,一种我们双方都能看的懂,并从中获取到传输的信息的约定,在语言层面上,我们可以抽象的将其理解为协议就是一种结构体,这个结构体的组成双方都知道,而结构体,不就是由二进制码组成的吗,所以,协议是一种我们双方都可以看的懂,并且是在我们要发送的内容的基础上额外多出来的那部分二进制码。 类似于摩斯密码的东西,它需要双方都清楚的知道如何解码,也就是约定。所以我们的主机在看到协议的那部分二进制码的时候,我们不仅仅只是看到了那部分二进制码,更能理解它背后真正的含义。

三、思考:只要通信的两台主机,约定好协议就可以了吗?

首先,计算机的厂商很多,操作系统也很多,网络硬件也很多,那么假如,只是通信的两台主机约定协议,那么是不是不同的操作系统之间就不能通信了?
是不是新的主机想通信就得和另外一台主机制定新的协议?就好比:中国人要和外国人说话,就要用一种新的语言来说话吗?那显然是不可能的。
所以,这时候就需要制定一个统一的标准,让我们所有的主机都遵守这个约定,制定出来一个标准,让大家都来遵守,这就是网络协议。这样任意两台主机都能有一个共同的标准,就都能看的懂对方发来数据背后所蕴含的信息。

四、协议分层

1.协议为什么要分层?
协议分层的原因有两个方面:
首先,要制定协议,规模太大了,所以我们要分层去实现,以高内聚,低耦合的目的去实现,这样子我们在维护上更加方便,层和层之间的耦合度低,意味着我们可以分工去维护不同层。
其次,我们的问题也是层状的,
* 如何处理发来的数据
* 长距离传输的数据丢失问题
* 如何定位主机的问题
* 怎么保证数据准确到达下一个主机的问题
基于对问题的解决,我们制定协议也是分层的,每层协议解决对应层的问题。
2.协议如何分层?
协议分层,我们通常是采取OSI七层模型
在这里插入图片描述

  • 物理层:物理层主要是一些网卡的硬件设备
  • 数据链路层:主要是解决数据帧的识别和传送问题,主要是面对一些比特为错误或者数据帧丢失的问题
  • 网络层:网络层解决的是我们的数据发到哪里的问题
  • 传输层:传输层面对的是我们数据传送的可靠性问题,是否有数据丢失的情况。
  • 会话层:何时建立连接?何时断开连接?
  • 表示层:就比如传过来的数据是图片还是影音还是文字?
  • 应用层:针对特定应用制定特定的协议,如http协议

————————————————————————————————
但对于我们日常搭建服务器而言,我们主要关心其中的五层,我们将这五层叫做TCP/IP协议,分别是 物理层 数据链路层 网络层 传输层 应用层
但物理层由于是网卡这些硬件设备,所以通常我们也叫做TCP/IP四层协议

五、数据是如何发送的?

首先,假如我们的应用层要发一个 你好 这样的消息给对方
在这里插入图片描述
然后 你好 这个消息就会传到下一层传输层,传输层对其进行封装消息,保证数据的可靠性。接着传到下一层
网络层对其再进行封装,来告知我们的 你好 这个消息是谁发来的,来源是谁,要发给谁,目的地是哪里?然后接着传到下一层。
数据链路层就将消息的数据帧处理,然后给物理层,通过网卡进行发送消息给对方网卡。
在这里插入图片描述
报文就是这里的报头 + 有效载荷
对于数据链路层而言:它的报文就是这里的报头 + 有效载荷
在这里插入图片描述

对于网络层而言:它的报头就是它封装的时候多出来的那部分,原本的东西就是有效载荷。

而当对方的网卡收到收到消息的时候,就会进行解包,将有效载荷传给它的上一层。
在这里插入图片描述
所以最后我们的应用层就会收到对方的消息。这种通信方式,对层和层之间进行解耦。
对于同一层而言,它认为它是在和对方同层在进行交流,因为同一层所用的协议相同,那么自然就可以看的懂对方发来的报头的具体含义,而不需要关心其他层的报头消息。这就实现了高内聚,低耦合的思想。

就比如:我们在打电话的时候,我们认为我们是在和对方直接进行交流,但实际上我们是在和电话进行交流,电话将我们的消息封装成一种无线电信号传给对方的电话,对方的电话接收到信号,然后再将信号进行解析成信息,然后再传给对方,对方就能听到我们说话。

在逻辑层面上,我们认为我们是在和对方直接进行交流,电话是在和电话进行交流,这就是层和层之间交流。

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ck837

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值