震惊,原来这就是协议!!!

一:什么是协议???

协议就是一种约定,
通信双方,对于通信规则的约定,一定是通信双方都认可的.
进行网络通信的时候,一定是需要通信协议的,主要是因为:两个用来进行通信的主机设备,可能是不同的硬件,不同的操作系统,不同的应用程序…
即使上述内容不同,通信也可以正确的进行.

二:协议分层

2.1:概念

协议分层,就是把很多的协议,按照功能分成不同的层级,每个层级都有对应的主线任务(目标/要解决的事情).
上层协议会调用下层协议,下层协议会给上层协议提供服务(“不能越级调用”).

2.2:协议分层的好处

2.2.1:封装

某一层协议不必知道其他层协议的细节,降低学习的成本,
举个栗子:
当我们打电话的时候,就分成了两层,一是语言层,二是通信设备层.
在这里插入图片描述
站在语言层的角度:只要会说话即可,不需要理解电话的工作原理,就能打电话.
站在通信设备层:设计电话的人,可能是外国人,不必懂汉语,也不妨碍设计开发电话

2.2.2:解耦合

任意层级的协议,都是可以灵活替换的,达到解耦合的效果.
在这里插入图片描述这样就给整个网络体系,升级迭代,带来了很大的便利.

2.3:TCP/IP五层(四层)模型

电脑上网,大部分都是TCP/IP模型的,
而手机流量上网,是有一套专门的模型协议.
(1)物理层:主要是硬件上的相关约定.
(2)传输层:关注的是通信双方的"起点"和"终点",“端到端的传输”
举个栗子:在淘宝上买衣服.
在下单的时候,就需要填写收件人信息:地址+电话,商家也会写他的发件人地址和电话,我和商家,我们两个,只关注收件人信息和发件人信息即可,也就是起点和终点,就相当于传输层.
(3)网络层:关注的是通信中,通信路径的规划,规划出的路径,就决定了,数据要经过哪些节点,“点到点的传输”
比如发货地是上海,收件地是西安,上海到西安就有很多种不同的运输路线.
上海---->南京---->西安
上海---->无锡---->西安
上海---->徐州---->西安
网络层就是对上述路径进行选择,相当于对通信路径的规划
(4)数据链路层:关注的是通信过程中两个相邻节点之间的通信.
比如当前路线:
上海---->苏州---->南京---->西安
上海---->苏州:大卡车运过去,有一个开着大卡车的快递小哥;
苏州---->南京:轮船,沿着长江,有一个开着船的快递小哥
南京---->西安:铁路,装上火车
西安---->家门口:电三轮
数据链路层,关注的就是两个相邻节点是如何进行通信的.
(5)应用层:和具体的应用程序直接相关,传输的数据是干啥用的,如果使用,有何意义等.
比如,我买个床刷子,怎么用,是我自己决定的,就相当于应用层.

2.5:协议的层和层之间是如何配合工作的??

上层协议调用下层协议,下层协议给上层提供服务.
1:比如:A通过QQ发送hello给B
A在聊天窗口里,输入hello,点击发送,QQ应用程序就要实现上述逻辑,
上述信息都是通过网络来传输的,QQ应用程序,就会把上述要传输的信息,组织成"应用层数据包"(QQ里就会有一个应用层网络协议,协议约定了按照什么样的格式来 阻止数据)
假设,QQ的应用层协议是这样的:把发送人,接收人,消息时间,消息内容组成字符串,通过 , 来分割各个部分,使用\n作为结束标志.
即:发送人的QQ号,接收人的QQ号,发送时间,消息正文\n
在这里插入图片描述
本质上,在网络传输时,传输的都是二进制字符串.

2:应用层数据包,已经有了.QQ应用程序,就要调用系统的API(操作系统提供的API),来进行传输,把数据从应用层交给传输层.
传输层拿到应用层数据包之后,就会把这个应用层数据包进一步的封装,构造成传输层数据包,在传输层有两个典型协议:TCP,UDP
假设这里使用UDP,来作为传输层协议.

在这里插入图片描述
传输层构造好UDP数据包之后,就会把数据包交给网络层(传输层会调用网络层提供的API)
3:网络层:典型的协议:IP协议

在这里插入图片描述
又进一步的调用数据链路层的API,把上述IP数据包,交给数据链路层的协议(系统内核完成的,这里的API往往是网卡的驱动程序提供的).
4:数据链路层:
典型的协议:以太网
以太网,也有自己的数据包格式,就会把上述的IP数据包,进一步的封装

电脑,通过有线网,传输数据,走的就是"以太网"协议.
在这里插入图片描述5:物理层
上述的以太网数据帧,本质上还是0101 二进制数据
硬件设备,就要把上述的二进制数据,转成光信号/电信号/电磁波才能真正的把数据发送出去.
上述层层包装数据,不停的加数据报头的过程就称为"封装".
上述数据,并非直接到达B,而是要先到和A连接的交换机/路由器一系列转发之后,最终会到达B.
当数据到达B之后,就要进行上述过程的"逆过程"
B这边:
1:物理层
收到一系列的光电信号,把这些信号转成0101二进制数据,交给数据链路层
2:数据链路层:
按照以太网协议,对数据进行解析,(解析报头中的关键信息,为后续的传输/转发打下基础,还需要拿到载荷数据)
在这里插入图片描述解析出来的载荷数据,是要交给网络层
3:网络层
IP协议
在这里插入图片描述
4:传输层:
拿着UDP数据包,按照UDP格式进一步解析,解析出关键信息(要交给哪个端口号对应的进程),解析出载荷数据.
在这里插入图片描述5:应用层:
QQ程序拿到了应用数据包.
QQ按照自己的协议格式,进行解析,拿到这里的结构化数据,显示到界面上(反序列化).

在这里插入图片描述中间的路由器,交换机,也要进行封装分用,也是上述过程,只不过,交换机,封装分用到数据链路层,即可知道下一步如何转发(工作在数据链路层),路由器,封装分用到网络层,即可知道下一步如何转发(工作在网络层).

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 05:32:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 05:32:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 05:32:04       87 阅读
  4. Python语言-面向对象

    2024-04-23 05:32:04       96 阅读

热门阅读

  1. 如何理解大数据开发中的map join 知识点

    2024-04-23 05:32:04       36 阅读
  2. PCL:求点云在指定平面上的法向量

    2024-04-23 05:32:04       34 阅读
  3. FFmpeg 音视频处理

    2024-04-23 05:32:04       37 阅读
  4. sqlmap靶机注入详细教程

    2024-04-23 05:32:04       33 阅读