1.2_2 OSI参考模型

文章目录

1.2_2 OSI参考模型

一、概述

计算机网络之所以有分层结构,就是因为计算机网络要解决的问题非常大、非常复杂,所以我们就要把这个大的问题分成很多个小问题,然后逐个击破。并且我们把这些小问题做一个非常好的分类,并且把每一类划为一个层次,一个层次就负责一个特定的功能。

因此,我们就把计算机网络这个大问题抽象成一系列的小问题、一系列的层次,分别对应一系列的功能。------于是就诞生了计算机网络的分层结构。

接下来,我们研究这个分层结构有哪几种。其实它主要分为两种:①7层 的OSI参考模型;②4层的TCP/IP参考模型。

这两种模型的区别在于,7层的OSI参考模型是法定标准 ,即法律规定的一种计算机网络分层结构。但在实际应用中,市场感觉4层TCP/IP参考模型使用的更好、用户体验更好,所以这种4层的模型就成为了一种事实标准。也就是说我们现在通用的都是4层的参考模型,但是通过对7层模型的学习,我们也可以从中获得很多经验。

经过对这两种参考模型的学习,我们可以总结出它们各自的优点和缺点,并总结出一个5层的体系结构。(这个5层的体系结构主要是为了让我们在学习计算机网络的过程中,学习更加方便、清晰而产生的)

(一)ISO/OSI参考模型是怎么来的?

首先,为了解决计算机网络复杂的问题 ---> 产生了分层结构(按功能划分)

那么,根据这种分层结构,有的公司肯定就有自己的想法了。世界上提出第一个网络体系结构的,就是IBM公司,它提出的是SNA网络体系结构。

接下来,就有更多公司效仿,都分别创造出了自己公司的网络体系结构。比如DEC公司的DNA,比如美国国防部的TCP/IP......

但是,我们要知道,对于IBM公司提出的SNA网络体系结构而言,我们只有使用IBM公司的产品,才能使用这样一种体系结构。所以,对于不同的公司,只有你使用它们的产品时,才能使用它们的体系结构。------这对于所有人要在网络上进行互联互通是非常困难的。这种模式下,只能进行公司内部网络的通信,而不能实现全球所有网络之间的通信。

因此,为了解决这种情况,即为了支持异构网络系统 的互联互通(也就是支持不同厂家的网络体系结构进行互联,使得所有人都互相联系在一起),所以就产生了OSI参考模型

国际标准化组织(ISO)于1984年提出开放系统互连(OSI)参考模型。

开放,即非垄断的、全球通用的。

但是,OSI参考模型,从理论的角度来说,它是很成功的,对于我们的学习、研发,有非常好的借鉴意义。

但它从市场的角度来说是失败的。主要原因有,OSI的一些专家们只是构想很好,但缺乏一些实操经验,就像一个乌托邦一样的构想;OSI实现起来其实是非常复杂的、运行效率非常低;OSI标准的制定周期太长了,使得OSI模型出来的时候没有办法及时地进入市场(非常好的TCP/IP已经在市场中广泛使用了),OSI生不逢时;OSI的层次划分不是很合理,有些功能会在多个层次当中重复地出现,导致它在实际使用当中有些弊端、并不能很好的顺应市场需求。而TCP/IP比较适合市场的应用,所以OSI模型就被TCP/IP模型打败了,从而成为一个历史,也仅作为一个法定标准。但即便如此,OSI模型依然有很多值得我们借鉴的东西、有非常高的学习价值。

(二)ISO/OSI参考模型

首先,OSI是7层结构,从下到上依次是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

最高层次是第7层------应用层;最低层次是第1层------物理层。

记忆口诀:

从下到上,分别记:物、链、网、输、会、示、用。(物联网淑慧试用)


此外,还要讲的一点(这一点在之前其实也提到过),就是分类的问题。

计算机网络按照功能,可以分为资源子网、通信子网。

通信子网对应的就是OSI参考模型中的下面三层,通信子网主要负责的是数据通信。

OSI参考模型中的上面三层叫做资源子网,资源子网主要负责数据处理。

而传输层是资源子网以及通信子网的接口。

比如我要邮寄一个物品。我把这个物品进行一定的处理、包装,对应的就是资源子网(数据处理);包装好后,我将它交给快递公司,邮寄出去,对应的就是通信子网(数据通信)。

(三)ISO/OSI参考模型解释通信过程

OSI是一种分层结构,我们说,每一层都对应着一种(或者几种)功能,每层完成特定的功能。那么接下来我们就通过一个实例,来研究一下OSI参考模型的每一层都实现了什么功能。

比如,现在有主机A、主机B,它们两个之间要进行通信(比如要进行QQ聊天)。那么,进行这种联网的通信,就一定要借助一些中间系统,比如常见的有路由器,此外还有网桥、交换机。(这些设备在之后都会学到)

那么,主机A向主机B发送消息,比如发送了一个"你好!",那通信的过程不可能是,"你好!"直接从主机A跑到主机B上面去了,没有这么简单。两台主机之间若要进行通信,则需要经过很多的步骤才行。

对于主机A、B这两个端系统,它们都要经过7层处理,并且这7层是它们都必须要经过的。而中间系统只需要经过3层。并且,例如网桥、交换机,只需经过最下面的2层即可。(但无论是什么中间系统,最多只能经过3层,即到达网络层)

首先,物理层处有一个传输介质,可以是光纤、电缆等。

我们想象的"信息传输"是比较抽象的,但尽管如此,我们也可以将其形象化到某一种具体的传输介质上去。

每一层,和它另一端的同层之间都会有一个协议。比如主机A的应用层和主机B的应用层之间(其它层同理)会有一个协议,来规定两台主机的应用层能实现相同的功能。

而例如主机A的"数据链路层"和中间设备的"数据链路层"之间,也有协议,来规定它们的功能都是一样的。

一个宏观的通信过程

主机A发送一条消息,经过应用层、表示层、会话层......数据链路层的层层加工处理,最终在物理层处转化为01比特流,然后向链路上发送。由于要经过中间系统,所以比特流会发送到中间系统处,再由中间系统将收到的01比特流从物理层向上层层还原,主要是为了看看这个信息要发送到哪里,等。还原之后,中间系统会对信息进一步的贴上一些必要信息,然后再向下层依次加工处理,再到达物理层上,以01比特流的形式向链路上进行传输(假设只有这一个中间系统,不再有其他的中间系统了),接下来就到达了主机B。主机B将该01比特流由物理层开始,层层向上还原,最终还原到应用层,就把这个数据还原成了原始的信息。

端到端 & 点到点

根据上图,我们可以发现,上面4层和下面3层有些不太一样。可以观察到,中间系统是不会有上面4层的(实际上,上面4层的功能,中间系统也用不上)。

仅从上面4层的视角来看,我只关心这个信息是最终发送给你的,我并不关心它由哪些中间系统转发。也就好像直接形成了端与端之间的连通。因此,上面4层,实现的是端到端的通信。

而下面3层,就需要介入中间系统了。比如,主机A将数据发送出去,下一步,它要传给中间系统。而如果有多个中间系统的话,中间系统还要把数据传给下一个中间系统......最后才会到达主机B。可见,它每一次的通信,或者说每一次对于数据的一个传播过程,都是专注于下一步,这一小段过程要走到哪里,而并不注重最后的终点、最终的信息接收者到底是谁。因此,下面3层实现的是点到点的通信。

每一层具体的数据处理过程

应用层。首先要对需要发送的消息进行一个包装(或者理解为贴上去了一个标签),贴上去的这个标签其实叫做一个头部/首部,它是一个控制信息。这个控制信息当中可能包括了一些检验差错的东西,也有可能是下一步要传送的地址是哪里,也有可能规定这个数据包的优先级是多少......这些都是控制信息可以加上去的内容。

而在每一层当中,我们都可以对数据加上一个控制信息。由图可见,在应用层处,它给初始信息DATA加了一个头部H7(7表示的就是第7层的意思)。原始信息再加上首部之后,就形成了第7层的PDU。而再往下一层,第7层的PDU再加上第6层的首部,就又形成了第6层的PDU。第6层的PDU继续往下传,在第5层处再加上首部,就又形成了第5层的PDU......(第4层同理)。第3层的PDU继续往下传,传到通信链路层 ,加上首部、尾部,就成了第2层的PDU。

助记:

上面6个层次当中,只有数据链路层对数据的包装是需要加上首部以及尾部的,其他层都只需加上首部。如何记忆------"数据链路层"是5个字,而其他层次都是3个字,因此"数据链路层"要加的东西更多。

物理层 ,它是一个"傻瓜层",它拿到数据以后就不会再进行处理了,它只是将数据形成01序列的比特流,然后放到下面的物理传输介质上进行传输。

(中间系统先不考虑,假设数据已经到达了主机B)

首先,对于物理层所收到的比特流进行一个处理,将它还原成数据链路层的数据;接下来,由于右边的数据链路层与左边的数据链路层使用的是相同的协议 ,所以右边的主机B就能够识别出哪里是首部、尾部 ,并正确的将它们去除掉;在数据链路层将首部、尾部去掉之后,就形成了网络层的数据;同样,在网络层去掉首部后,就形成了传输层的数据;在传输层去掉首部之后,就形成了会话层的数据......最终,还原成应用层的数据。同理,应用层也能正确识别它这层的首部是什么,并将首部去掉,再将其传送给主机B。

以上就是主机A和主机B通信的一个比较具体的过程,也是7层模型对于数据封装、还原的过程。

二、各层功能及协议

(一)应用层(第7层)

应用层:所有能和用户交互产生网络流量的程序。

应用层和主机是最相邻的,是用户与网络的界面。

当你连上网才能使用的程序,就是应用层。对于那些不需联网就能使用的(例如记事本)程序,就不算应用层。

典型应用层服务:(括号中是这种服务所使用的协议)

文件传输(FTP)

电子邮件(SMTP)

万维网(HTTP)

......

(二)表示层(第6层)

表示层:用于处理在两个通信系统中交换信息的表示方式(语法和语义)

通信系统,就是手机、电脑......这些设备。

交换信息,就是进行数据传递的过程。

功能一:数据格式变换

不同主机的编码格式、表达方式等会有差别,因此就需要表示层实现数据变换的功能,也就是充当一个翻译官的角色。

如上图所示,收到的01编码实际上是一个jpg格式的图片,那么这个转换、翻译的过程就要由表示层来实现。

功能二:数据加密解密

例如有这样一种数据:我的微信支付密码是XXXX。这种数据,就要进行加密之后,再放到链路上传输。如果不加密的话,有人从链路上抓包,把这个信息拿下来,就相当于盗走你的支付密码了。所以就需要一个加密的过程。到了接收端,它就会再进行一个解密的过程。

功能三:数据压缩和恢复

比如视频聊天,如果是原图发送,是非常大的,因此要先进行一个压缩,压缩之后放到链路上传输,传输过后再进行解压缩/恢复的过程。

注意:表示层其实不是一个特别独立出来的层次。这一点在之后学TCP/IP协议5层结构的时候会发现,表示层其实会被纳入到应用层或者会话层里面。因此,表示层通常来说也没有什么单独的协议,如果非要说一些跟表示层有关的协议的话,可以说JPEG、ASCII

(三)会话层(第5层)

会话层是位于表示层下的一个层次(也就意味着:表示层要使用会话层提供的服务)。

会话层:向表示层实体/用户进程提供建立连接 并在连接上有序传输 数据。这是会话,也是建立同步(SYN)。

例如:

你给另一个人拨打电话,当电话还没有打通时,你这时说的话,他肯定是听不到的。因为你们还没有打通,此时你说什么,他也接收不到。

会话层的功能类似,就是建立一个连接。把这个连接建立好之后,才能讨论传输数据的事情。

比如我的电脑打开了百度,另外又打开了一个看电影的网页。此时,我的电脑就和这两个网页建立起了同步。此时,我想把电影往后快进一点,所以我就点了快进按钮,我点了之后,这个电影界面就会有一个回应,这个电影的画面就会快进几秒了,而不是会导致百度的界面发生什么变化。这就是因为,我的主机和电影服务器建立的连接(这是一个会话),它是不会影响到我的主机与其他的服务器所建立起来的会话的。会话之间是彼此独立,互不影响的。

功能一:建立、管理、终止会话

功能二:使用校验点可使会话在通信失效时从校验点/同步点继续恢复通信,实现数据同步

假设我们有一个特别长的数据,那么我们就会在数据中间的某些地方切开,并插入一个校验点(或者叫同步点),将其分成几个部分。

它的作用就是,万一我们的网络出现问题了,通信失效了,会话突然被停止了、关闭了,等到恢复会话后,我们就可以恢复到刚才的同步点处,继续通信。这样一来,我们就不用再从头开始通信了。

适用于传输大文件。

会话层的主要协议:ADSP、ASP

(四)传输层(第4层)

传输层首先是自下而上第一个端到端通信的层次。同时也是上面三层(资源子网)和下面三层(通信子网)中间的一个接口。

传输层:负责主机中两个进程 的通信,即端到端的通信。传输单位是报文段或用户数据报。

再次说明一下:上面4层都是端到端的通信,下面3层都是点到点的通信。


问题:为什么叫"端到端"通信

答:因为端到端通信指的是,运行在两个不同主机内的两个进程之间的通信。而每个进程都有一个进程标识符,也就是端口号。所以两个不同主机的两个进程之间的通信,也就叫端到端的通信


功能一:可靠传输、不可靠传输

功能二:差错控制

功能三:流量控制

功能四:复用分用

助记口诀:可差的也留下来用了------输。


问题1:什么是可靠传输 / 不可靠传输?

比如有一个pdf文件,首先我们要把它分成一个一个的传输单位(报文段),之后再进行传输。传输到接收端后,对于每一个收到的报文段,接收端都会返回给发送端一个确认的信息,告诉发送端:"我收到了,你可以发下一个了。"发送端收到了这个确认信息之后,才能继续往下发送。如果发送端发现,怎么没消息了、没信了?那么发送端就无法确认接收端到底接没接收到。此时,发送端就会重新再发一遍刚才的那个数据报/报文段,直到收到对方返回来的确认信息为止,才能再往下继续发送新的报文段。------这就是可靠传输,一个基于确认机制的过程。

不可靠传输------不需要建立连接,也不用管会不会丢,也不用管确认机制,发送端只需把数据报放上去发送即可。通常应用在发送一些比较小的数据的场合:比如我在QQ上发送一句话"在吗?",这就是一个数据报就能解决的问题,发送一个包到链路上面即可。因此,对于这种非常小的包,我们没有必要建立连接、确认机制......这样比较麻烦、耗时。所以这时我们就可以采用不可靠传输的方式。


问题2:什么是差错控制?

顾名思义,就是对于发生的任何差错进行控制。

比如说我们传送的一些报文段失序了、顺序错了,或者是丢了一些报文段。那么我们的传输层就要负责纠正这些错误。


问题3:什么是流量控制?

这里的流量不是说,像手机流量,300M、500M这种的流量。

这里的流量说的是,我能不能跟得上,或者说咱俩的速度匹不匹配的问题。比如说,我是发送端,我正在给你发送一大串的数据,或者说发送很多的文件;但从接收端的角度来看,接收端的接收能力是有一定限度的,不可能一次性发多少、它都能接收多少,一次性塞太多、它也会"吃不下去"。这就是流量控制需要做的事情,需要控制一下发送方的速度。

也就是说,如果接收方发现,我快要来不及接收了、弄不动了,那么接收方就要告诉发送方:"你慢一点发。"那么发送方就会慢一点发。------这个过程就叫做流量控制。


问题4:什么是复用分用?

复用:多个应用层进程可同时使用下面传输层的服务。

分用:传输层把收到的信息分别交付给上面应用层中相应的进程。

如图,两台手机都运行了QQ进程、微信进程。

左边的手机要给右边的手机发消息了。而且是QQ、微信两个进程都要发消息。假设QQ进程的端口号为1、微信进程的端口号为2。发送的消息以报文段的方式放到传输层上面,再进行下一步的传输。

需要注意的是,它们发送的消息在形成报文段的过程中,QQ包含的报文段就会带有一些信息,如QQ程序的端口号是几,微信包含的报文段中就会带有一些信息,如微信的端口号是几。------这就叫做:有多个应用层进程可以同时使用下面传输层的服务。

接下来,这些数据发送到接收端,接收端就开始把这些数据取出,至于怎么取,就需要刚才所说的端口号。可能有多个报文段,我们从中看,各个进程对应的端口号是多少。如果我们看到,这条数据的端口号是1,那么就知道,这条数据是要发给QQ的,于是就把它发给QQ。又看到另外一个报文段所对应的端口号是2,于是就把它发给微信。

这就是复用和分用的过程。同时,也可见 端口号的重要性。有了端口号,才能保证各个数据最终都能走到自己对应的位置。

传输层的主要协议:TCP、UDP

(五)网络层(第3层)

它是7层当中自下而上的第3个层次,同时也是7层当中最重要的一个层次。

网络层:主要任务是把分组 从源端传到目的端,为分组交换网上的不同主机提供通信服务。网络层传输单位是数据报

可见网络层的重要性,网络层专门就是用来实现网际互联,实现不同主机之间的连通、通信。

当数据报过长的时候,就可以把数据报进行切割,切割出来的就是一个又一个小的分组,再放到链路上进行传递。这样会使数据在传输的过程当中更加灵活,而且损失也会更小。


功能一:路由选择

功能二:流量控制

功能三:差错控制

功能四:拥塞控制


问题1:什么是路由选择?

顾名思义,就是选择合适的路由。如图,发送端要给接收端发送一个数据报,那它可以走上面的两个路由器,当然也可以走下面的路由器。但是,具体选择哪种方式,要看当时的具体的网络情况,通过一些路由算法来计算,从而选出一个最佳路径,一个最合适的路由方式,从而使这个分组正确、顺利地从发送端传输到接收端。------这就是路由选择的过程。(最佳路径)


问题2:什么是流量控制?

上文也有讲到。就是根据接收端的接收速度,来控制协调发送端发送速度的问题。比如发送端发送的太快了,导致接收端来不及接收,那么就要调整发送端的发送速度,让它发送的慢一些。------这就是流量控制的过程。


问题3:什么是差错控制?

差错控制,是通信两节点之间约定的一些规则(比如后面会学到的奇偶校验码),那么接收方收到之后就会根据这个规则来检查它收到的分组有没有什么错误。若发现错误了,此时如果能纠错就纠错,如果不能纠错就把这个分组扔掉。这样一来,就能确保它向上层(传输层)提交的数据都是没有问题的。


问题4:什么是拥塞控制?

拥塞控制和流量控制有所区别。流量控制主要是控制发送端的发送速度,而拥塞控制是对全局、宏观上进行整体的速度控制。

若所有结点(包括主机和中间系统)都来不及接收分组,而要丢弃大量分组的话,网络就处于拥塞状态。因此要采取一定措施,缓解这种拥塞。

主要协议:IP、IPX、ICMP、IGMP、ARP、RARP、OSPF

(六)数据链路层(第2层)

数据链路层作为网络层的下一层,自然它就要为网络层提供服务。

主要任务是把网络层传下来的数据报封装成帧

数据链路层(或者叫链路层)的传输单位是


功能一:成帧(定义帧的开始和结束)

我们数据报组装成帧之后会形成一个比较长的比特流序列。我们对于这样一个比特流序列,就要定义一下,在哪开始是这个帧的开始,在哪结束是这个帧的结束。

我们就需要定义几种01组合,来判断哪里是这个帧的开始,哪里是这个帧的结束。

这样定义好之后,我们在接收端收到一个帧的时候,就可以把这个帧当中的数据部分给提取出来,进而上交给网络层。

...1000011101010101...

功能二:差错控制------帧错+位错

对于帧错、位错,这两种错误,数据链路层都会有相应的检错、纠错的方法。如果发现有差错,数据链路层可能就会简单地丢弃差错的帧,以免让它继续在网络当中进行传递、从而浪费资源。也可能会对数据进行改正,即纠错,就会用到一些可靠传输协议来纠正出现的差错。

功能三:流量控制

在之前的输入层、网络层都讲过,是一个意思。是发送方、接收方速度协调的问题。如果接收方的缓存不够用了、接收不过来了,那么再发来的数据也全都要丢弃掉。因此,它就会告诉发送方,你慢点发,等我的缓存有空间了之后,你可以再加快速度。

功能四:访问(接入)控制------控制对信道的访问

比如这里有4个主机,它们都连接在一个传输介质上面。如果在广播式网络中,数据链路层就要处理这种访问(接入)控制的问题了。就要控制一下,哪台主机现在可以占用一下这个信道,因为广播式网络当中,同一时间只能有一个人在发送信息、其他人都是处于监听的状态。

数据链路层可以控制大家对于共享信道的访问。这是由它的一个特殊的子层------介质访问子层来专门处理、控制这个问题的。

主要协议:SDLC、HDLC、PPP、STP

(七)物理层(第1层)

物理层是"傻瓜层",因为物理层的功能实在是太简单了。它只需要把比特流转成电信号的形式,然后放到链路上面进行传输就可以了。不需要对数据有什么改动,也不需要对它有什么切割。

物理层的主要任务是在物理媒体 上实现比特流的透明传输 。物理层传输单位是比特

物理媒体可以是任何一种物理传输介质,比如同轴电缆、双绞线、无线电波......


透明传输

指不管所传数据是什么样的比特组合,都应当能够在链路上传送。

透明传输就能保证,不管我接收到的数据是怎么样的组合,我都应当能无视它,都能够把它直接放到链路上面进行传输。你给我什么,我就往外发什么。这也就是物理层"傻瓜"的地方。


功能一:定义接口特性

这里的说法比较多,此处挑几个举例。比如说,要确定连接电缆的插头应该有多少个引脚;或者说每一条引脚应该如何连接,等等。这都属于接口特性的部分了。

功能二:定义传输模式

传输模式有三种:单工、半双工、双工。

单工指的是数据传输只能在一个方向上传输,无论什么时候。就是发送端、接收端都已经完全确认好了,不会再改变。

半双工,根据字面意思就可以知道,它是介于单工、双工之间的。半双工就是,两个人都可以作为发送方或者接收方,但是同一时间还是只能有一个人发送信息。就好像我们使用对讲机,在同一时间只能有一个人说话,但是另一个时间也可以换别的人来说话。所以,谁都能当发送端,但同一时间还是只能有一个人进行发送。

双工,就是两个人可以双向且同时地说话。就好像我们打电话一样。

功能三:定义传输速率

我们说的百兆网、十兆网,这个百兆、十兆指的就是发送端的传输速率,这都是物理层可以定义的。

功能四:比特同步

比特同步指的是,发送端发出一个1,接收端就可以准确无误地接收到一个1。保证比特同步是需要时钟的,这里不做展开讲解。

功能五:比特编码

比如曼彻斯特编码、差分曼彻斯特编码等等。主要就是把0、1规定一下,用什么样的电压表示1,什么样的电压表示0?

主要协议:Rj45、802.3

相关推荐
njnu@liyong6 小时前
图解HTTP-HTTP报文
网络协议·计算机网络·http
GISer_Jing7 小时前
2025前端面试热门题目——计算机网络篇
前端·计算机网络·面试
ZachOn1y7 小时前
计算机网络:应用层 —— 应用层概述
计算机网络·http·https·应用层·dns
冰镇屎壳郎10 小时前
计算机网络 八股青春版
计算机网络
网络安全King11 小时前
计算机网络基础(2):网络安全/ 网络通信介质
计算机网络·安全·web安全
敲代码娶不了六花17 小时前
对计算机网络中“层”的理解
网络·网络协议·tcp/ip·计算机网络
njnu@liyong1 天前
图解HTTP-HTTP状态码
网络协议·计算机网络·http
斐夷所非1 天前
计算机网络基础图解
计算机网络
ZachOn1y2 天前
计算机网络:运输层 —— TCP 的选择确认(SACK)
网络·tcp/ip·计算机网络·可靠传输·sack·选择确认
kikyo哎哟喂2 天前
计算机网络基础--WebSocket
websocket·网络协议·计算机网络