##OSI 7层模型

OSI 7层模型由来,在当年制定OSI 模型的人员,在酒喝酒时聊到白雪公主的电影时,里面有7个小矮人,有人说谁能把他们的名字写出来,我就给他续杯,结果真的有人写在餐巾上,这是有个酒精上头的兄弟说,这不正好可以当OSI 莫型吗?于是餐巾都舍不得扔,第二天研究人员闻着带有酒精的餐巾进行开会,最后一致同意把网络模型划分为7层,这就是折磨人多年的OSI 的参考模型,注意我这里说的是参考,也就是说在现实中并不使用,我们只是把OSI网络模型进行参考。图

在网络出现问题时,可以从宏观的整体去分析和解决问题,而且搭建网络的时候,也并不一定需要划分7层。

但是当今互联网广泛并使用的TCP/IP网络模型,他原本只有4层,随着人们不断实践发现,其实划分5层更合适。

但为什么还老有面试官喜欢闻OSI模型呢?其实OSI7层模型并不难记,7层里面的知识才是最复杂的,谁能把这里的知识都关联起来,在遇到问题的时候就能快速和解决问题。OSI模型的目的很简单,就是为解决主机之间的通讯问题,它们厂家不同,就无法进行沟通,但是大家都统一用OSI模型来进行沟通,情况就不一样了。

假设现在苹果电脑自己搭建了一个网站,华为电脑想要访问这个网站,就需要通过这个软件应用了,比方说浏览器访问网站两个应用具体需要如何进行交互就是应用层的事情了,应用层并不是说你需要使用什么应用程序,而是应用如何沟通,常见的应用层协议就是http了。开发者就可以根据http协议编写程序,使得应用之间可以实现沟通,应用层就是最接近用户的那一层,但是应用层只不过是逻辑上把两个应用连通。

实际上物理上的连通是需要物理层的,我们要发送出去的数据只不过是无数的0和1,0或是1叫做bit,物理层就是把这些bit用不同的媒介传输出去,可以用电,光或者是其他形式的电磁波来表示和传输信号。图

数据从网络接口出去以后,会经过不同的网络拓扑,并不是一条路走到底。

因此需要中继器和集线器这样的设备,但还是不够,信号要到哪台设备去是要定向的,因此需要高级一点的网络模型,数据链路层,在这里比特会被封装成帧,在封装的时候会加上MAC地址,也就是传说中物理地址。

在网卡出厂的时候就有全球的唯一的MAC地址,为了可以通过MAC地址对不同的设备进行数据传输。

就出现了交换机,这里说的是二层交换机。

比方说这里有一台交换机,连接着多台主机发送端发送数据的的时候,交换机就知道了发送端的MAC地址了,如果交换机此时也知道接收端的MAC地址,就可以把数据直接发送过去了,物理地址就是这样一跳一跳进行传递的。

另外因为在物理层传输0和1时,可能出现1变成0,0变成1的情况,就需要我们进行差错检测以及一定的差错纠正,另外设备之间的传输能力以及接受能力也是个问题,很可能这边喷水式传输,那边夹缝式接收,因此需要流控来避免这种不对称。

我们知道互联网是一张大网,如果用MAC地址作为唯一的寻址方法是不科学的,比如你和我买了同一个厂出的网卡,我和你的网卡就差一个字母,但是我们之间的距离是十万八千里,物理地址就很难快速做出定位,因此需要IP地址来进行寻址和路由器选择。

IP这样的逻辑地址就实现了端到端的基础了,而不是物理地址那样跳着传输,说到路由选择,也就是路由器是网络层的核心。

包就是网络层里数据的名字,

在封装为二层之前就是包,路由器根据包里的IP地址进行路由转发,地址管理和路由选择就是这一层的核心。

虽然有MAC和IP地址可以抵达对方的主机,但主机可能运行着很多个软件进程,

假设我用谷歌和火狐同时登录网站,如何让数据去到指定的软件服务上,就需要端口来及进行定位了,比如客户端这里生成不同的端口号即使同时访问http端口80也是没有问题的,根据不同的源端口号来做出响应就可以了。

所以传输层在网络层端到端的基础上,实现了服务进程到服务进程的传输,段就是传输层里数据的名字,在封装为三层包之前就是段。

传输层管理两个节点之间的传输负责可靠传输和不可靠传输,也就是TCP和UDP,

,其中TCP允许把字节流变成多段,而不是整个字节数据完整的发出去,传输层还有流量控制来确保传输速度,在加上错误控制来进行数据完整的接收。

接下来会话层也好理解,比方说你在登录某个网站,网站服务可以保持你登录状态,不需要每次输入密码,另外会话层还负责同步服务比方说,你上次看到电影看一半,断网了,你有网之后在连接还可以接着看。

不同计算机内部的表达方式可能不太相同,表示层就负责这样的转换的,也就是编码和解码,数据往往还需要进行加密,比方说http的,TLS/SSL就会对数据进行加密,另外我们还需要给文件进行瘦身,就是压缩。

应用层,表示层,会话层的数据统称为应用数据或应用负载,也可以叫上层数据,同时也是教科书上说的报文,数据在各层的名字分别是,报文、段、包、帧、比特,就地址来说有端口号,IP逻辑地址和MAC物理地址,就传输功能来说,有服务进程到服务进程,端到端,还有跳到跳。

在了解各层作用后,现在就可以把全部关联起来,客户端要发送数据,也就是报文来到传输层,加上端口号,封装成段,段来到网络层加上IP地址,封装成包,注意这里的包含有目标IP地址,毕竟你要知道数据发送到什么地方,

但因为目标IP不是同一个网络下的,要发送到其他网络,就需要经过默认网关,现在就出现个文体,客户端主机最初并不知道默认网关的MAC地址,没有办法封装成帧,这个时候就可以用ARP协议进行广播,找到网关IP对应的MAC地址,八包封装成帧,源MAC地址填自己的,目标MAC地址填广播的,假设当前网络有个二层交换机,这个交换机只需要记录不同的接口对应的MAC地址就好了,交换机收到广播后,就帮忙发送出去,人手一份。

所以默认网关收到消息后,查看了帧发现了发送端MAC地址,在解封发现包里面的IP,就会把客户端MAC地址和IP地址关联为一台主机,同时默认网关会把自己的IP放入包里面,在结合自己的MAC地址封装成帧,默认网关就这样做出了响应,原路返回发送就知道默认网关的MAC地址了。

现在就可以封装成帧了,并且发送数据比特流到默认网关的时候

解封为帧发现发送给自己的,在解封包看到目标IP地址是在另一个网络中,就会进行目标转发最终到达目标网络,如果目标网关知道目标IP和MAC地址是哪台主机封装成帧就可以直接发送过去了,不知道就可以用ARP喊下街就好了。

目标主机收到包确认是自己的IP后,解封查看段,可以发现源和目标端口号,用目标端口号给指定的应用程序,应用程序处理好后,就可以按照源的信息做出响应,回去的原理一样的。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐