OSI七层网络参考模型(图文版)

本文以通俗的语言和生动举例来带领大家理解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地址以后,解封查看段,可以发现源和目标端口号,用目标端口号给到指定的应用程序,应用程序处理好后就可以按照源的信息作出响应,回去的原理也是一样的。

相关推荐
江安下小雨2 小时前
muduo网络库(十六):新增连接池模块
网络·c++
aiot189189352182 小时前
机场候机大厅高空场景技术红线!蓝牙AOA不能做手机导航??!!
大数据·网络·人工智能·蓝牙aoa
从入门到退休3 小时前
企业远程控制选型:向日葵SDK vs RustDesk自建,谁是更务实的选择?
运维·服务器·网络·远程工作·远程控制
fb_123453 小时前
网络技术基础
网络
黑臂麒麟4 小时前
HarmonyOS 网络连接诊断实战:检测网络状态、WiFi 切换、弱网监测一网打尽
网络·华为·arkts·鸿蒙
CPETW5 小时前
USB TO I2C_(Excel)_Scan ---- 1000KHz总线速率测试_A
c语言·开发语言·网络·科技·单片机
杨云龙UP6 小时前
Oracle 19c RMAN历史备份清理失败:CONTROL_FILE_RECORD_KEEP_TIME 问题排查与整改实战
linux·运维·网络·数据库·oracle·rac
pt10436 小时前
网络自动化Python课程:Netconf与Restconf及Cisco自动化配置实验
网络·python·自动化
神仙别闹6 小时前
基于C++ WinPcap 的网络抓包软件
网络·c++·php
LabVIEW开发7 小时前
使用 LabVIEW 获取文件的创建日期:从内置函数到 Windows API 封装
网络·windows·labview·labview知识·labview功能·labview程序