OSI网络模型
0. 写这篇博文的出发点
- 加强自身对OSI模型的理解。
- 针对网上千篇一律的纯技术性博文提出自己不同的看法,更好地理解OSI模型。
- 先声明,这篇博文并不是讲述OSI专业性很强的博文,仅仅是为了更好地了解OSI。
- 有说得不恰当的地方希望大佬们指出,共同学习!
1. 提出几个问题
作为刚接触的OSI的同学们以及我,对这个复杂的网络模型其实是有抵触心理,这都是出于一个心理,并不清OSI模型的功能。为了提起我们对这个模型的兴趣,我们可以去通过提出问题的方式。❓
我们以我们发送消息给女朋友????/男朋友????/自己的小号???? 为例!
-
- 首先必须了解,我们无论是通过有线/无线d的方式发送消息,最终在电信号方面总是只会是0/1的电平状态呈现,但是我们发消息有控制通信线电平的操作吗?
-
- 电平是通过比特流的方式传输,也就是一位一位的传输0/1,但是由于需要校验的关系,消息通常被封装成数据帧的方式传输,但是我们有将消息封装成数据帧的操作吗?
-
- 数据封装好了,那么怎么发出去是个问题,必须明确一点,你和你对象的网线不是单独连接的,那么就会涉及到路由转发的问题,但是我们有实现路由转发的操作吗?
-
- 再者数据的发送需要进行优化,比如压缩、加密以及解密都是必须的,你可不喜欢你和你对象的腻歪被别人随随便便监听到,但是我们有进行压缩、加密以及解密的操作吗?
如上述问题,都是我们发送消息是需要解决的问题,此外还需要进行接口封装以及记录会话信息,为了应对上诉问题,国际标准组织制定了OSI模型。????我们带着上面的问题一起去认识认识是深究的前提OSI模型。
2. OSI模型的各层结构及功能
OSI(Open System InterConnection Reference Model),全称开放式系统互联通信参考模型,旨在使各种不同计算机可以在世界范围互连网络的标准架构,基本功能是提供给开发者一个必须的、通用的概念以便开发完善、可以用来解释连接不同系统的架构抄袭于百度百科。
很多教程都是从上往下也,这其实不符合事物的发展时间线,这种倒推不利于初学者理解事物的发展历程,进而不能较好的理解其中的原因。❌ ,我们接下来将从下往上讲述OSI模型。✔️
2.1 物理层
需求一:两台计算机之间需要传递一串二进制代码,这是我们需要电平控制以及监控,显然这些控制需要直 接控制电路,也就是涉及到物理层面的东西。
我们将这类直接控制硬件操作的归类于物理层,物理层实现了对通信介质的控制,实现了两台设备之间的进行比特流的数据交互。
2.2 数据链路层
需求二:通信的介质有很多,如网线、电磁波,每种介质传输比特流的方式具有一定的差异,我们需要对上 层应用屏蔽这种差异性;同时比特流的数据没有错误检茶以及校正机制,无法保证数据的可靠。
数据链路层实现了数据的格式化,屏蔽了底层物理介质差异,将数据通过帧的大小发送,在帧的数据中加入错误检查以及校正机制。
[1] 图源「计算机网络」第三章:数据链路层
2.3 网络层
需求三:两台计算机设备通信通常不是直连状态,相隔万里的两台设备,中间是一张巨大的通讯网络,两台 设备数据传输路径具有无数种可能,例如广州没有直达到洛杉矶的飞机,我们需要选择转机路线, 在通信领域就是要控制路由转发。
网络层包含IP协议,通过IP协议去选择合适的路由转发以及消息的传递路线。
2.4 传输层
需求四:不知道你有没有发现上面解决的都是设备到设备的通信,但是一个设备里面有多个程序,程序到程 序的通信才是我们最终的目的。
为了解决如上需求,引入了传输层,传输层引入了端口的概念,例如http服务对应的80端口、SSH服务对应的22,那么就有了例如:192.168.10.23:80。程序可以发送数据到端口或者打开端口接收数据实现__程序到程序的端到端通信。__除此之外,传输层加入了差错处理[2]以及流量控制的操作,基于不同的操作策略,发展出来了TCP以及UDP两种不同传输协议。
[2] 这里会有个疑问,为什么数据链路层具有差错处理,传输层还需要引入差错处理呢?可以参考如下数据链路层和传输层可靠传输的超级困惑
2.5 会话层
需求五: 通常来说,设备之间的通信并不是一次性的,甚至一个大的数据包都需要分多次发送,为了提高发 送效率,我们需要将当前通信的固定信息记录起来,下次发送直接使用即可,无需再计算。
会话层解决的就是这样一个需求,在一次通信过程,通常需要多次发送,许多通信的信息只需计算一次就可以持续使用,比如路由路线规划,在会话层中保存该信息,就不需要每次都调用网络层的IP寻址功能,提高通信效率。
2.6 表示层
需求六: 此时我们发送的数据都是实实在在的数据呀,数据是敏感的,隐私可不能随随便便暴露网络世界当 中。
表示层引进了加密操作[3],对于发送方表示层最大的作用就是数据的编码、加密以及压缩,相对而言,对于接收方表示层则是数据的解码、解密以及解压。
[3] 一直搞不懂怎么实现加密操作?后面学习一下,小本本记录起来????
2.7 应用层
需求七: 通常来说模型仅仅是一个架构,基于这个架构可以发展出不同的协议,为了开发人员更好使用这些 协议,应该将底层实现细节封装同时提供使用接口。
应用层属于OSI模型最高的一层,提供用户各种网络服务,诸如HTTP、FTP、DNS、Telnet以及SSH等。有了这些网络服务接口,对于上层开发人员即拿即用,无需关心底层的实现原理,使得网络通信更加方便。在者就是应用层根据不同的需求开发出具有差异化的网络服务接口给上层,例如同样是远程连接协议Telnet和SSH,两种具有如下异同点:
相同点
-
两种协议都是用于远程登录主机。
-
两种协议都是基于TCP/IP。
不同点
-
Telnet属于明文发送;SSH支持加密。
-
Telnet默认端口号是23;SSH默认端口号是22.
-
Telnet不使用公钥;SSH使用公钥对访问的服务器的用户验证身份,安全性更高。
总结就是Telnet连接效率会更高,SSH安全性更高,两者各有优势