OSI七层网络模型
一、OSI七层网络模型简介
1、OSI的前世今生
OSI(Open System Interconnect),即开放式系统互联。是OSI组织为了互联网各层之间协作而制定的标准模型。再具体点来说是为了使互联网各个基础组件厂商统一标准而制定的标准,这样就能实现互联了。
2、OSI七层模型的划分
OSI划分为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
3、OSI的分层设计思想
OSI严格遵守了“高内聚、低耦合”的互联网设计思想,在OSI七层模型中每层只关注本层的实现,向上只提供标准接口,它不需要其它层的实现,各司其职。
二、各司其职
一张图先了解各层间的基本功能
物理层
OSI模型的第一层,最终数据的传输通道。物理层顾名思义就是最靠近物理传输设备的一层。物理媒介包括光纤,网线,等。改成的主要作用是实现相邻计算机间的比特流传输,尽可能屏蔽掉具体传输介质和物理设备的差异。尽量对上层也就是数据链路层屏蔽掉其不需要考虑的物理介质差异,对其提供统一的比特流传输调用方式。
物理层的主要功能:屏蔽物理媒介差异,为数据链路层提供统一的物理比特流传输能力。
数据单元:比特
实例:光纤、网线、集线器、中继器、调制解调器等。
举个例子,早前的电话机,你在北京,你女朋友在上海,你俩打个电话就能通话了。为什么?因为中间有根电话线。物理层你就可以这么简单的理解和记忆。
数据链路
该层主要负责建立和管理不同计算机节点间的数据链路,并提供差错检测、封装成帧、透明传输的能力。数据链路层又分为两个层:媒体访问控制子层(MAC)和逻辑链路控制子层(LLC)
媒体访问控制子层(MAC)
MAC地址你一定不会陌生。每台计算机都有自己的全网唯一的MAC地址,如下图你也可以看看自己的MAC地址。MAC子层的主要任务是解决共享型网络中多用户对信道竞争的问题,完成网络介质的访问控制。实现这个功能的是集线器。用集线器组网,检查计算机与计算机之间有没有冲突,避免冲突的协议叫CSMA/CD协议。
逻辑链路控制子层(LLC)
主要任务是建立和维护网络连接和链路控制。
数据链路层的主要功能:将不可靠的物理信道变成无差错的、能可靠传输数据帧的数据链路,即:数据的差错检验、封装成帧、透明传输。
数据单元:帧
实例:网卡、MAC地址、以太网、交换机
MAC地址:(英语:Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),
它是一个用来确认网络设备位置的位址。在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会
有一个唯一的MAC地址 。(摘自百度百科)解释的很详细了。 大白话解释一遍。网卡厂商将MAC地址烧录在计算机BISO中,MAC地址能保证一台计算机是世界范围内的唯一性,就像你的身份证。嗯?不是一个IP代表一台计算机吗?有这个疑问接着往下看 MAC地址的作用: 如今比较流行的组网方式是一个逻辑整体(公司,学校等)或者一个区域组一个局域网,再通过交换机接入Internet。因为在局域网中IP只是逻辑上的划分,不信你可以在你所在的公司或者学校修改一下自己的IP
(最好是最后一段),依然能够连上网络。这样的话,每个人都可以随意修改IP,IP != 用户。所以MAC地址这个时候就有用了,只有MAC地址才能表示用户。交换机中保存了 MAC <-> IP 的映射关系。局域网访问互联网的唯一通道就是交换机。 记住上面一段。关于网络寻址这这是很基础的一步。
网络层
顾名思义就是实现网络互联的关键所在。该层通过IP将大大小小的局域网形成一个互联互通的互联网。在计算机网络中进行通信的两个计算机之间会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是为两台通信的计算机之间选择合适的路由和交换节点,确保数据及时传送。网络层将数据链路层提供的数据帧组成数据包,包中有网络层包头,也就是IP相关信息,以便路由。
网络层的主要功能:通过IP地址,实现网络寻址,即IP寻址,通过路由算法进行最优的网络路由。
数据单元:数据包
网络路由听起来有些抽象,个人认为该层最重要的能力是IP寻址,也就是在互联网中,通信的两台机器要互相找到对方。网络路由也就是路由算法,其作用就是在上面的寻址过程中,选择一条最优路线。
传输层
如第一章节:建立主机端到端的连接。重点在哪?“端”,怎么理解呢?如果你是一个程序员相信你一定知道端口这个东西,没错上述三层实现了互联网,也就是实现了两台机器间的互联互通。但是一台计算机上往往有好多应用程序,端口是用来区分不同应用程序的方式,每个应用程序都有各自的端口。很简单的一个道理,QQ用户能给微信用户发送即时消息吗?不能,为什么?这就是传输层的作用。传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务。包括处理差错控制和流量控制等。该层向上层应用屏蔽了底层通信细节。上层应用只需要按照传输层的规范,向传输层提交数据传输任务,其余的事情不需要上层应用关系。我们常见的TCP/IP协议中的TCP就作用在这一层。
传输层的主要功能:传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,并提供差错控制和流量控制等功能。
以下几层不是很重要因为你应该知道TCP/IP协议。后续会详细介绍。
数据单元:称作数据包(packets)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为“数据报(datagrams)”。
实例:TCP、UDP
会话层
会话层就是负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
会话层是什么?给你一个通俗易懂的答案:假如你了解session+cookie机制,相信你就明白了,这种session+cookie的机制就是会话层的实现。
表示层
如上所述,该层主要作用是数据格式的编码和转换。有点抽象?HTTP请求头/响应头 Content-Type:application/json; charset=utf-8 。这就是规定双方协商的数据格式: application/json; 和编码格式: charset=utf-8;
应用层
OSI应用层是最靠近上层开发者的一层,这一层就是将通信模型定制化成一个协议,比如适合于超文本传输的协议HTTP,具备安全性传输的HTTPS,还有一些比如FTP,POP3,SMTP等。
这一层可以这样理解,将下面几层根据场景具象,形成的一个提供给上层开发者应用的协议层。
三、数据封装与解封装
先看一下数据的传输过程
数据的流向是 发送端A–>接收端B,然后途径两个过程
A:应用层 –> 物理层:数据封装过程
B:物理层 –> 应用层:数据解封装过程
接下来看数据的封装和解封装过程
3.1、数据封装过程
数据从应用层开始向下层流动,经过层层封装,最终在物理层转为字节流发送到接收方。
> 注意以下 源 == 发送方,目标 == 接收方
经过传输层:加上TCP头,组成数据段,所谓的TCP头主要就是加上对源端口和目标端口的描述。
经过网络层:加上IP头,组成数据包,IP头其实就是源IP和目标IP。
经过数据链路层:加上MAC头,组成数据帧,MAC头其实就是源MAC和目标MAC。另外还有一个LLC头和一个FCS帧尾标识(用于差错检测)
经过物理层:将数据帧转为bit流,发送到接收方。
PS:以上过程你需要注意的是IP头,MAC头不是用于两台主机的,而是用于网络寻址的。下章节会介绍这个。真正需要计算机解析的是TCP头,
因为TCP头上是端口信息,简单的理解端口对应的是进程或者应用程序,接收端主机收到这些数据只需要将数据导向对应的应用程序即可。
而IP和MAC是网络寻址才会用到的部分。这也是OSI的设计思想,高内聚、低耦合,各层只需要专注各自的实现细节。
3.2、数据解封装过程
对应数据封装过程,解封装过程数据从物理层向上层流动,最终经过层层解封,到达对应的应用程序。
四、TCP/IP协议
首先给你解决一个疑问,OSI参考模型不是标准也不是协议,而是一个指定标准时所使用的概念框架。TCP/IP是OSI参考模型的实现。也就是说TCP/IP才是真正的实现。所以TCP/IP才是协议,而OSI只是参考模型。
PS:当然也有一个组织根据OSI参考模型指定了OSI七层网络模型,但是OSI模型的专家缺乏实战经验,导致很难适用于实际使用场景。
TCP/IP协议是四层模型:应用层、传输层、网络层、网络接口层
如上图所示,OSI与TCP/IP协议在分层上稍有区别,OSI注重于各个层的功能划分,TCP/IP协议注重各层功能实现需要开发哪种程序。由此不难看出,OSI只是理论参考模型,而TCP/IP才是实战产物。
TCP/IP协议是单纯的TCP+IP的协议吗?不是的,TCP/IP协议是一个协议簇,如上图所示、其中包括常见的http、https、ftp、udp等等。
重点:我们需要知道的是OSI模型偏重于理论,TCP/IP偏重于实战。