OSI参考模型
在OSI参考模型之前人类对计算机结构的研究就已经进行了太多的讨论,最终通过了作为通信协议设计指标的OSI参考模型。这个协议将通信协议中必要的功能分成了七个部分。通过这些分层使得那些比较复杂的网络协议变得简单了。
在这个模型中每一层都接收由他下一层所提供的特定服务。并且为自己的上一层提供特定的服务。上下层之间进行交互式所遵循的约定叫做“接口”,同一层之间的交互所遵循的约定叫做“协议”。
协议的分层就如同计算机软件中的模块化开发,OSI模型希望实现从第一层到第七层之间的所有模块,通过将他们组合起来来实现网络通信。由于模块化的分层,所以每一层都是独立的,即使系统中某个模块层发生了变化,也不会影响到其他的模块层。同时我们只需要关注与实现每个分层的协议,并很好的界定好每层的责任与义务,这样就可以构建一个可扩展性,灵活性很轻的系统。然而分层使的过分的模块化,使得处理变得更加沉重,而且每个模块不得不实现好多相似的处理逻辑等等。为了能够清楚的说明这些复杂的协议,我们通常还是会依照OSI模型来讲解与处理。
OSI参考模型讲这些复杂的协议整理为了易于理解的七层,如下:
OSI参考模型对通信协议中必要的功能做了很好的归纳,但他终究还是一个模型,只是对各层做了一系列粗略的定义,并没有对协议和接口做详细的描述。他的作用只是一个引导作用。所以要想了解更多的协议的细节,你就有必要去参考每个协议的具体规范了。
平常我们所见的那些通信协议大都对应OSI参考模型中七个分层中的的一层,通过这一点我们就可以大致的了解到这个协议在整个通信过程中的位置与作用了。
下图就说明了OSI参考模型中各层的作用:
应用层:
为应用程序提供服务,并规定应用程序中通信的相关细节。包括电子邮件,文件传输,远程登录,HTTP等协议
表示层:
将应用程序处理的信息转化为适合网络传输的格式,或将来自下一层的数据转化为上层应用程序能够处理的数据。因此这一层主要是用来负责数据格式的转换。具体来说就是把设备固有的数据格式转化为能在网络中进行传输的格式。由于不同设备有可能对同一比特流解释的结果可能不太相同。因此使这些不同比特流保持一致就是这层的主要作用了。
会话层:
负责建立与断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。
传输层:
起到了可靠传输的作用。只在通信双方的节点上进行传输,而无需在路由器上进行处理。
网络层:
将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某一个地址。因此这一层主要负责寻址和路由选择。
数据链路层:
负责物理层面上互连的,节点之间的通信传输。例如与一个以太网互连的两个节点之间的通信,将0,1序列转化成具有意义的数据帧传送给对端(数据帧的生成与接收)。
物理层:
负责0,1的比特流(0,1序列)与电压的高低,光的闪灭之间的转化。
OSI参考模型的通信举例
接下来我们来举一个简单的例子,来说明这七层之间的联系。我们以发送电子邮件来讲解。
在例子中发送方从第1层,到第7层从上至下的传输数据,接收方则是从第7层到第1层来传输数据。发送方的每个分层上,在处理有上一层传过来的数据时需要附上当前层的协议的“首部”信息。然后接收端对收到的数据进行“首部”与“内容”的分离,然后再转发给他的上一层。并最终将发送端发来的数据恢复原样。如图:
首先从发送端最上层的应用层开始说起:
发送邮件这款软从功能上来说分为两部分:一部分是与通信有关的,一部分是与通信无关的。例如发送端从键盘上输入“你好”,这些是与通信无关的,而将“你好”发送给接收端却与通信有关了。也就是说从用户输入完内容,然后点击“发送”的之后,就进入了应用层协议的处理了。该协议会在想要传输数据的前端增加一个首部信息。接收端在接收到数据信息时会解析首部信息,然后恢复数据内容。如图:
表示层:
表示层更关注与数据的表现形式。在日常我们所使用的软件中有的好多具有自己的数据格式或者是数据的编码格式,所以计算机需要把某些计算机或者是软件中的特定格式转换为网络通用的标准数据格式,然后再进行传输。而接收端在收到传输过来的网络通用的标准数据格式之后,转化为本地计算机或者是软件能够识别的特定的数据格式。这样就能够在传输数据时保持传输数据格式的一致性。在表示层与表示层之间为了识别编码格式也会附加首部信息,然后将数据交给下一层去处理。
会话层:
假如用户A有5封邮件需要发给用户B。这封电子邮件的发送顺序可以有很多种,例如我们可以每发一次邮件的时候都建立一个连接,结束了断开连接。也可以再一次连接的基础上一次性发送这5封邮件。决定何种连接方法是会话层的主要任务。会话层只是一个对于连接的管理工作。在会话层接到数据后也会加上本层协议的首部,然后转交给下一层。如图:
到此为止我们说明了,在应用层写入数据之后会经由表示层格式化数据,然后由会话层标记完发送顺序后,把数据转移给下一层。
传输层:
在两个主机上建立连接与断开连接的处理,在两个主机之间建立逻辑上的通信连接,这是传输层的主要任务。此外传输层为了确保所传输的数据到达目标地址,会在通信两端的计算机之间进行确认。如果数据没有到达他会负责重发。
建立连接,断开连接,在接收端数据损坏后重发,从而保证了数据的完整性,传输的可靠性。为了确保可靠性,这一层也会为数据加上一个首部,然后把数据传给下一层。然而数据传输到接收端,是靠网络层来进行的。
网络层:
网络层是在网络与网络连通的情况下,从数据发送端的主机发送到接受端的主机。虽然两端的主机之间有很多的线路,但是选择哪条线路把数据从一段传输到另一端也是网络层的功劳。
在实际的发送数据时,目的地址至关重要。这个地址是在进行通信的网络中唯一指定的序号。就好像我们生活中常用的电话号码。只要是这个目的地址是确定的,是唯一的我们就可以在众多的计算机中选出该目标地址所对应的计算机,然后进行发送数据。我们基于这个地址就可以在网路层进行数据包的发送处理。有了这个地址与网络层的包发送的处理。就可以将数据发送的世界上任何一台计算机上了。同样网络层也会将他从上一层得到的数据与地址信息转交给下一层(数据链路层)。
数据链路层与物理层:
通信的传输实际上是通过物理的传输介质实现的。数据链路层的作用就是在这些通过传输介质互联的设备之间进行数据的处理。
物理层只要是将数据0,1的序列转化为电压或者是脉冲光传输给物理的传输介质,在相互直连的设备之间,通过MAC地址来进行传输。这里的MAC地址可以成为物理地址或者是硬件地址。采用MAC地址进行传输是为了识别在同一传输介质上的设备。因此在这一层中将包含MAC地址的首部附加到从网路层转发过来的数据上,发送到网络中。
网络层和数据链路层都是基于目标地址把数据发送给接收端的。但是网络层负责把整个数据发送给接收端,而数据链路层则只负责发送一个分段内的数据(关于这个的详细信息,可以参考相关资料)。
接收端主机上的处理流程刚好与发送端的处理流程相反。他送物理层接收数据然后将数据逐层发送给上一层进行处理。最终接收端就会看到发送端发送的数据信息了。
虽然OSI参考模型分层清晰,但是由于没有尽早的指定可行性较强的协议,未能提出应对新的技术变革的协议以及没有及时做到后期的改良,所以OSI参考模型未能普及开来,普及开来的确实我们常说的TCP/IP协议。但OSI参考模型对于我们了解、理解计算机的数据传输,网络通信等还是有很多好处的。。。