一.OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型被称为开放式系统互联参考模型,它是一个逻辑上的定义和规范;
它把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整.
通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
二.OSI七层模型(TCP/IP协议)
但是, OSI七层网络模型虽然设计非常完善,但它在实际生活中,既复杂又不实用; 所以我们一般都是用TCP/IP四层模型来讲解
将最上面三层合并为一层——应用层,并将最下面的两层合并为另外新的一层——网络接口层
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
物理层:
负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
数据链路层:
负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太
网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层:
负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层:
负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
应用层:
负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层
那总共五层,为什么一般称为TCP/IP四层模型呢?
原因在于物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型
三.系统与网络之间的关系
但是,估计所有人看完上面的分层依旧是一头雾水,什么是分层呢?它又怎么和操作系统OS扯上联系?
首先,为什么会出现网络?
因为两台主机,假如距离很近,比如都在同一个宿舍,其实只要一条数据线,将两部电脑连接在一起,就可以相互通信了
本质的原因就在于距离,距离变长了,而我们又想要或者需要两台主机进行通信(数据传送),提高协同效率,所以网络的诞生是非常自然的
那网络通信会有哪些需求需要解决呢?
1.长距离传输,数据异常的问题(丢失)
2.定义一台主机的问题(为什么我是向你发消息,而不是其他人)
3.怎么进行数据转发,路径选择的问题(中间节点是谁?)
4.010101硬件级别的协议
而这些问题出现的本质也是传输距离变长所导致的
因为出现不同的需求,其实也就是不同性质的问题,所以针对不同相似的问题,我们要给出对应的解决方案
于是才出现了层的概念
每一层解决的都是相似的问题,这就是我们所说的高内聚
并且我们还可以发现,上述问题其实也是互相关联的,更进一步说,应该是有先后上下的结构
比如说我先要完成长距离传输,数据异常的问题,可以将数据安全送达给对面,我们才可以考虑路径转发的问题,不然考虑路径转发毫无意义.
所以层与层之间有上下,不同层解决不同的问题,这就是我们说的低耦合
而这样的分层的操作其实我们早就做过了,在C++中,一切皆基类,继承体系的本质,何尝不是一种软件形式上的分层呢?
分成不同类后,不同类只要提供对应的接口,就可以完成类与类之间的交互
(分层后,只要提供对应的接口,就可以实现层与层之间的交互)
每一个类都只关心自己该类所要实现的功能,并且只使用继承自上层类的接口
(软件分层之后,每一层都只关心自己同层的功能,只使用来自下层的接口)
任何类出现问题,都不会直接影响另一个类,减少后期开发者成本,做到真正的高内聚,低耦合
(任何一层出现问题,都不会直接影响另外一层)
所以分层其实是一种思想,有点像我们老祖宗所说的,分而治之,各个击破
那怎么又扯到OS操作系统呢?
最简单通俗的说,我们所学的TCP/IP协议,它就是在OS内部自己实现的
网络传输是OS一个很重要的功能,我们要学习的网络,本质其实是操作系统的一部分,前者TCP协议对应传输层,后者IP协议对应网络层
网络和操作系统不分家,两者是一一对应的
图来自2021dragon博主
我们上层用户在应用层调用相应下层为我们提供好的系统接口,编写好我们自己的代码,比如各种客户端等等,会向下继续交付
OS操作系统替我们继续完成对数据的封装(应用层)
在传输层有对应的协议,对数据要进行怎样的封装,并采取对应的策略保证数据可靠的传输(传输层)
在网络层有对应的协议,对数据要进行怎样的封装,并采取对应的策略策略选择对应的中间节点路径,去到对面(网络层)
直到数据到达最下面的数据链路层,继续对数据封装,linux下一切皆文件,在Linux操作系统眼里,网卡也是文件,通过文件系统,对网卡进行管理
执行对应的网卡驱动程序,驱动硬件网卡将我们的数据报文发出,并采取对应的策略保证在同一个局域网内,两台主机可以互相进行通信(数据链路层)
唯一有所不同的是,操作系统可能种类有很多,但是网络只能有一种,可能实现的方式不同,但是不同层所实现的功能和目的是相同的!这是一种约定,更规范来说,这是一种协议