计算机网络 --- 初识协议
序言
上一篇文章中 (👉点击查看),我们简单的了解了怎么寻找目标计算机,需要通过交换机,路由器等设备跨越多个网络来不断的转发我们需要传输的数据,直至到达目标计算机。
那我们设备之间数据是如何传输的呢?让我们一起来了解一下吧。
1. 初识协议
1.1 协议的意义
在我们的生活中,我们两个人达成了一个协议,换句话说也就是我们两个人制定了一个相应的约定,并且我们两个人都必须要遵守。
计算机生产厂商是很多的,假如 A 厂制定我们在通信时的 0 代表低电平,1 代表高电平
,而 B 厂制定 1 代表低电平,0 代表高电平
。这就会造成不是一个厂生产的计算机不能正常通信地情况!这显然不是我们所需要达到的效果,我们想要的是不同型号的计算机之间,甚至于不同的操作系统之间的计算机都能够进行通信!
为了达成这一目的,所以大家就要 约定一个共同的标准, 大家都来遵守, 这就是网络协议。
1.2 协议分层
想要进行网络通信是一件非常复杂庞大的事情,需要软硬件的紧密结合。对于一个复杂庞大的任务我们常用的方式就是将该任务进行分解和模块化。
这么说大家可能没有立刻理解到,但是想想我们初学 C语言 的时候,不管是什么我们都是一股脑地塞到 main 函数 里,这样写出来的代码很挫,也不好维护(很多时候都是牵一发而动全身😭)。但是随着我们学习的深入,我们懂得了将一个任务分成多个模块,实现多个函数,然后在我们的 main 函数 去调用该函数。当我们需要修改时只需要修改特定的部分接口不变,这样我们就实现了很好的 模块化,解耦合
。
1.3 七层网络模型
OSI(Open System Interconnection,开放系统互连)
七层网络模型称为开放
式系统互联参考模型:
OSI七层模型
为网络通信提供了一个清晰、分层的结构框架,每一层都承担不同的功能和任务。这种分层结构使得网络通信变得更加有序和高效,同时也方便了网络设备的开发和维护。
他考虑了太全面了,全面得无法落地。肯定有人会想,计划细致不是一件好事吗?怎么不执行呢。就像你制定了一个明天的计划,细致到了每一分钟都要干什么,你觉得严格执行简单吗?肯定是不简单的,所以我们一般使用更加实用的 五层模型
。
1.4 五层模型
我们看看两者的区别:
将复杂的 应用层,表示层,会话层
统一交给 应用层
进行管理。各个层次的功能如下:
物理层
: 负责光/电信号的传递方式。(这个我们不关心,我们主要关心软件层面上的内容)数据链路层
: 负责设备之间的数据帧的传送和识别
. 例如网卡设备的驱动、帧同
步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN
等标准.交换机工作在数据链路层.
网络层
: 负责地址管理和路由选择
. 例如在IP
协议中, 通过IP
地址来标识一台
主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器
工作在网路层.传输层
: 负责两台主机之间的数据传输. 如传输控制协议 (TCP
), 能够确保数据
可靠的从源主机发送到目标主机.应用层
: 负责应用程序间沟通,如简单电子邮件传输)、文件传输协议、网络远程访问协议等. 我们的网络编程主要就是针对应用层.
我们将在实际传输例子上介绍是如何使用协议的。
2. 数据包封装和分用
大家都寄过快递吗?寄快递时,首先我们需要填写相应的表格寄快递的地址,联系人,联系电话等等信息。快递站将你的快递寄出,也不是直接让快递小哥将快递直线送到目的地址,也需要经过一个或多个快递中转站才能到达目的地。经过了如此多的转发,能保证快递顺利寄到的关键就是快递单!
当我们需要网络通信时也是如此,我们的数据 每经过一个协议就会封包一次
,封装的信息称为 报头
:
每一层封包都有自己的目的:
- 应用层封包的主要目的是确保数据能够按照应用层协议的规定进行
正确的解析和处理
。 - 传输层封包的主要目的是在源主机和目的主机之间提供
端到端的数据传输服务
,确保数据能够可靠、有序地到达接收方。 - 网络层封包的主要目的是在多个网络之间传输数据,确保数据包能够
按照正确的路径从源主机到达目的主机
。 - 数据链路层封包的主要目的是在相邻的网络节点之间提供可靠的数据传输服务,
确保帧能够准确无误地到达下一个节点
。
封包理解了分用就更简单了。每一个网络层都有一个或多个协议,比如在传输层就包含 TCP, UDP等协议
,可以取决于使用场景。所以,我们可以根据报头中的信息来判断上一层使用的是什么协议,交给正确的协议进行处理:
3. 局域网传输
在上一篇文章中我们得知,在同一个局域网下传输数据只需要经过交换机即可.
现在有了协议和数据包的概念我们再来理解一下过程:
假设现在已经知道了需要发送对象的 MAC 地址。
- 将进行封装后的数据包通过物理层发送到交换机上
- 交换机接收到数据包后,拆包查看发送的目的
MAC地址
- 交换机锁定和
MAC地址
绑定的端口,并将数据重新封包 - 数据顺利转发到目的主机上,目的主机通过分用获取数据
我们的网络协议还有一个名称是 网络协议栈,现在大家知道为什么叫做 栈 了吧 — 封装数据包的过程就是压栈,获取数据的过程就是出栈。
4. 跨网络传输
跨网络传输就需要路由器了,并且交换机只是工作于数据链路层,而路由器工作于网络层:
在这里为了简便,省去了交换机,并且只知道目的地址的 IP 地址,不知道 MAC 地址
- 现在使用
ARP协议
没有查询到目的主机的MAC地址
- 于是将自己的数据包通过交换机转发到网关处(路由器)
- 路由器通过数据包进行解析后获取了目的主机的
IP地址
,通过使用ARP协议
成功获取目的主机的MAC地址
- 通过对数据包进行封包后发送,成功转发到目的主机上
- 目的主机通过分用获取数据
跨网络传输也是不断拆包,封包,发送的过程:
并且大家想一下,不同的局域网有可能使用的网络协议也是不一样的,但是通过拆包(去除原来网络协议的封装层),封包(基于现在的网络协议封包)的过程,是不是也是达到了 入乡随俗
的效果呀!
5. 总结
在这一篇文章中我们认识了协议,并且再次学习了数据在局域网下或者是跨局域网下的传播,希望大家有所收获!
原文地址:https://blog.csdn.net/weixin_73757824/article/details/142314281
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!