本文以通俗的语言和生动举例来带领大家理解OSI七层模型中各层的作用,以及每层之间的联系,并且文章配有图文能更好的帮助我们了解语句中词汇的含义。
学习笔记整理自 B 站视频:【视频标题】(链接:https://www.bilibili.com/video/BV1EU4y1v7ju/?spm_id_from=333.337.search-card.all.click&vd_source=d57ed8f83e9c00c01ca7916b0e6917ce),仅用于个人技术交流学习。
看完视频再来看文章整理的笔记,学习效果事半功倍哦
一、OSI七层网络参考模型
哎你们知道OSI七层模型的设计灵感来自哪里吗?
当年指定OSI模型的研究人员,在酒吧喝酒的时候聊起了白雪公主这部电影。有人就发问:"谁要是知道七个小矮人的名字?老子就给谁续杯!"这时还真有人把七个名字写在了餐巾上,这个时候有个兄弟酒精上头,说这七个小矮人不正好可以拿来作为网络模型吗?于是餐巾都不舍得扔掉,第二天研究人员就闻着这还带有酒味的餐巾开会,一致同意把网络模型划分为7层。

于是折磨人的多年的OSI网络参考模型诞生了。注意,这里说的是参考,也就是说OSI网络实际中并不使用,我们只是把OSI网络模型作为参考,在网络出问题的时候,可以从一个宏观的整体去分析和解决问题,而且搭建网络的时候也并不一定需要划分为7层。
二、TCP/IP网络模型与实际网络模型

当今互联网广泛使用的是TCP/IP网络模型 ,它原本只有4层 ,随着人们的不断实践后发现,其实划分为5层更加符合实际。但为什么面试官老喜欢问OSI模型呢?其实OSI模型7层的名字并不难记,7层里面的知识才是最复杂的,谁能把这里头的知识都关联起来,遇到问题的时候就能快速处理和解决问题。
三、 OSI模型的目的以及各层的作用
OSI模型的目的其实很简单,就是为了解决主机之间的网络通讯。比如说华为电脑和苹果电脑互联,但他们说不同的公司,就有点像普通话和英语进行沟通一样,没法正常沟通。但是如果大家都统一用OSI网络模型来沟通,情况就不一样了,假设现在苹果电脑自己用应用软件搭建了个网站,华为电脑想要访问这个网站就需要通过软件应用了。
比方说用浏览器访问网站,两个应用具体需要如何进行交互就是应用层 的事情,应用层并不是说你需要使用什么应用程序,而是应用如何沟通,常见的应用层协议就是HTTP协议,开发者就可以根据HTTP协议编写应用程序,使得应用之间可以实现沟通。应用层就是最接近用户的那一层,但是应用层只不过是逻辑上把两个应用连通,实际物理上的连通还是需要物理层。

我们要发送出去的数据在计算机里只不过是无数的和1,0或者1就叫做比特 ,物理层就要把这些比特用不同的媒介传输出去。可以用电、光或者其他形式的电磁波来表示和传输信号。


数据从网络接口出去以后,会经过不同的网络拓扑 ,并不是一条线走到底,因此需要中继器 和集线器这样的设备,但还是不够,信号要去到哪台设备是需要定向的,因此需要高级一点的网络模型。

在数据链路层 这里,比特会被封装成帧。帧就是这一层表示数据的特殊名字而已,在封装的时候会加上MAC地址,也就是传说中的物理地址。


网卡出厂的时候就有着全球唯一的MAC地址,为了可以通过MAC地址对不同设备进行数据的传输,就出现了交换机,这里说的是二层交换机。
比方说这里有一台交换机,连接多台主机,发送端发送数据的时候,交换机就知道了发送端的MAC地址,如果此时交换机也知道接收端的MAC地址,就可以把数据直接发送过去了,物理地址就是这样一跳一跳的进行传递,另外因为物理层在传输0和1的时候,可能会有0变成1、1变成0的情况,会进行差错检测 以及一定的差错纠正。
另外设备之间的传输能力以及接收能力也是个问题,很可能这边"喷水"式传输,另一边"夹缝"式接受,因此需要流控制来避免这种不对称。

我们知道互联网是一张大网,如果用MAC物理地址来作为唯一的寻址方法是不科学的,比如我和你买了同一个厂出的网卡,我和你的网卡如果差别就只有一个字母,但是我和你距离十万八千里,物理地址此时就很难做出快速定位,相当于我有你的名字,但是我不知道你住在哪里,找不到你,因此需要IP地址 来进行寻址和路由选择,IP这样的逻辑地址就是实现端到端 的基础了,而不是物理地址那样的跳到跳传输。


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

虽然有MAC地址和IP地址可以抵达对方主机,但是对方主机可能运行着无数多个软件进程,假设我用谷歌和火狐浏览器同时登录网站,如何让数据去指定的软件服务上呢?这时候就需要用到端口号 作为地址来定位了,比如客户端这里生成不同的端口号,即使同时访问HTTP端口80也是没问题的,根据不同的源端口号来作出响应就可以了,所以**传输层(运输层)**在网络层的端到端基础上实现了服务进程到服务进程的传输。


段就是传输层里数据的名字,在封装为三层包之前就是段,等会名字会总结,不用害怕,传输层管理两个节点之间数据的传输,负责可靠传输(TCP协议)和不可靠传输(UDP协议),另外还有一个叫QUIC。

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

接下来会话层也比较好理解,比方说你现在登录了某个网站,网站服务可以保持你的登录状态,不用每次都输入账号和密码,当然网站服务会管理和控制登录状态。另外会话层还负责同步服务,比方说你上次看到电影精彩的时刻突然停电了,再次登录账号的时候,就可以自动同步上次看到的时间段。

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

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

客户端要发送数据,也就是报文,报文来到传输层,加上端口号封装成段。段来到了网络层,加上IP地址,封装成包,注意这里的包是含有目标IP地址的,毕竟你要知道数据要发送到什么地方,但因为目标IP地址不是同一个网络下的,要发送要其他的网络,就需要经过默认网关,现在就出现了个问题,客户端主机最初并不知道默认网关的MAC地址,没有办法封装成帧。

这个时候就可以用ARP协议进行广播,找到网关IP对应的MAC地址把包封装成帧,源MAC地址填自己的,目标MAC地址填广播地址,假设当前网络有个二层交换机,这个交换机只需要记录下不同的接口对应的MAC地址就好了,交换机收到广播后就帮忙发送出去"人手一份" ,所以默认网关收到消息后,查看了帧,发现了发送端的MAC地址,再解封发现包里面的IP地址,就会把客户端MAC地址和IP地址关联为一台主机,同时默认网关会把自己的IP地址放入包里,再结合自己的MAC地址封装成帧,默认网关就这样作出响应并且原路返回,发送端就知道默认网关的MAC地址了。

现在就可以封装成帧,并且发送数据。比特流到了默认网关的时候,解封为帧发现是发送给自己的,再解封为包查看到目标IP地址是在另一网络中的

就会进行路由转发,最终到达了目的网络,如果目标的网关知道目标IP地址和MAC地址是哪台主机,封装成为帧就可以直接发送过去了,如果还是不知道也还是可以用ARP喊一下街。


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