OSI参考模型是由7层或7个步骤构成系统模型,具体是指开放系统互连参考模型(Open System Interconnection,OSI),用于各种网络中的信息交互和通信。
国际标准化组织(International Organization for Standardization,ISO)开发了OSI参考模型,用于在一组给定的平台上可在全球范围内遵循的通信框架和协议。
在此模型下工作的每一个软件应用,都会基于模型中的一个层进行通信和工作,因此深入理解OSI模型对于一名软件开发/测试人员或系统开发/测试人员而言是非常重要的,可以从横向维度理解业务的关联性,同时也能在纵向维度深入理解应用层之下的通信机理。
基于OSI模型架构,让我们可以从宏观层面理解网络的通信机制。通过每一层的网络协议和不同层之间的通信接口,可以从细节层面深入理解软件和硬件之间是如何协同工作的。正因为OSI架构由7层独立网络模型构成,同时,每一层都有自己的功能定义,这对于问题的定位变得相对更容易,对问题诊断所花费的时间也更少。对OSI模型理解和学习,可以更容易、更快的的理解和掌握新的技术迭代。在复杂的网络结构中,能够通过层次化的逻辑模型架构,更清晰的看清功能之间的关系。
最为广泛应用和人们所熟知的场景,莫过于20世纪80年代由美国提出OBD(On-Board Diagnostics)系统,其目的是用于监测排放控制状态,一旦车辆发生故障,通过故障指示灯点亮来提醒驾驶员,当前车辆需要进行检修,OBD系统相较于传统的汽车故障诊断方式有了极大的进步,但是因为当时各大汽车制造企业采用自行设计的诊断座和自定义的故障码,导致OBD系统诊断的实施存在极大的阻碍。OBD的发展主要包括OBD-I,OBD-II以及尚处于研究的OBD-III三个阶段。
20世纪90年代中期,OBD-I诊断效率相对低下,更为先进的OBD-II系统在OBD-I的基础上产生,美国汽车工程师协会(SAE)针对诊断接口、通讯方式等技术细节专门制定了一套标准,要求各汽车制造企业按照OBD-II的标准设计统一的诊断模式,即使不同的车辆也可以做到统一的诊断服务,同时,OBD-II的通讯协议也越来越全面和统一,包括了ISO15765-4协议、ISO9141协议、ISO14230协议和SAEJ1850协议。
应用层(application layer)是OSI参考模型的第七层,也是OSI模型的最顶层。该层将为终端用户和用户程序提供通信支撑。
这一层为有网络的用户提供直接接口和访问。用户可以直接访问该层网络。该层提供的服务示例包括电子邮件、即时通讯软件等,如Foxmail、微信、导航地图APP等。这一层存在模糊性,因为不是所有基于用户信息的软件都可以植入到这一层。
举例:
任何设计软件都不能直接放在这一层,而另一方面,当我们通过web浏览器访问任何应用程序时,它可以植入到这一层,因为web浏览器使用的是HTTP(超文本传输协议),这是一种应用层协议。因此,无论使用什么软件,在这一层考虑的都是软件使用的协议。
软件测试程序将在这一层上工作,因为应用层向其最终用户提供了一个接口,以测试服务及其使用。HTTP协议主要用于该层的测试,根据运行的系统和网络的需要,也可以使用FTP、DNS、TELNET。
表达层(presentation layer)是OSI参考模型的第六层。正如名称所示,表达层将以更容易被理解的形式将数据表示给终端用户。因为发送方和接收方使用的通信模式可能存在不同,所以,这一层负责解析所递的通信内容。表达层扮演着翻译的角色,因此两套系统在同一个平台进行通信,更容易理解双方所要传达的信息。以字符和数字形式存在的数据在经过层传输之前被分割成位。它将网络所需的数据转换为网络所需的数据,并将手机、PC等设备所需的数据转换为网络所需的数据。该层还扮演着在发送端对数据进行加密,并在接收端对数据解密的角色。它还对多媒体数据在传输前进行数据压缩,由于多媒体数据的长度非常大,通过媒体传输需要很大的带宽,因此这些数据被压缩成小数据包,在接收端将其解压,以获得原始长度的数据本身的格式。
会话层(session layer)是OSI参考模型的第五层,是应用层(application layer)和网络层(network layer)之间的接口,在不同实体间通过表达层进行连接成为会话。该层主要作用是向两个实体的表达层提供建立和使用连接的方法。通俗点讲,会话层(就像我们项目经理)的任务是组织和协调两个会话进程(团队或人员)之间的通信(开会讨论),并对数据交换(项目维度的输入输出)进行管理,并将信息进行同步(会议纪要、项目计划跟踪管理),而信息同步是一种必要的行为,以保证任何乙方对接收的信息或数据,不发生丢失(项目计划和里程碑识别保证输出是有保证的)。
举例:
假设发送方正在发送一份超过2000页的数据文件。会话层将在发送数据文件时添加一些检查点(check point)。当发送完40页之后,会话层将对数据的序列和成功与否进行确认。如果验证结果OK,则会话层将继续发送直到结束,否则它将重新传输和确认。这种机制有助于保证数据的安全性,即使发生崩溃,整个数据主机也不会完全丢失数据。此外,令牌管理将不会允许两个具有相同类型的数据同时进行网络传输。
传输层(transport layer)是OSI参考模型的第四层,处于OSI模型的中间层,在传输层以下的三层主要负责数据通信,在传输层以上的三层主要负责数据处理。
1)传输层保证了两个不同的主机或网络设备之间的端到端无错误连接。这是第一个从上层即应用层获取数据,然后将其分成更小的称为段的数据包,并分配给网络层,以便进一步发送到目标主机的数据包。它确保在主机端接收到的数据将按照与传输数据相同的顺序进行。它提供了一个端到端提供的数据段之间的子网络和内部子网络。为了在网络上进行端到端通信,所有设备都配备了一个传输服务接入点(TSAP),并被标记为端口号。一端主机将通过它的端口号在远程网络上识别它的对应端主机。
2)两个传输层协议包括:
- 传输控制协议(TCP,Transmission Control Protocol)
- 用户数据包协议(UDP,User Datagram Protocol)
TCP是一种面向连接的可靠协议。在该协议中,首先在对端两台主机之间建立连接,然后才通过网络发送数据进行通信。一旦发送了第一个数据包,接收方总是发送发送方收到或未收到数据的确认。在收到接收方的确认后,第二个数据包通过介质发送。它还检查接收数据的顺序,否则将重新传输数据。该层提供错误纠正机制和流控制。它还支持客户机/服务器模型进行通信。
UDP是一种无连接且不可靠的协议。一旦数据在两个主机之间传输,接收主机就不会发送任何接收数据包的确认。因此,发送方将继续发送数据而无需等待确认。这使得处理任何网络需求非常容易,因为在等待确认时不会浪费时间。终端主机可以是任何机器,比如电脑、手机或平板电脑。
这种类型的协议广泛应用于视频流媒体、在线游戏、视频通话、IP语音等领域,当视频的一些数据包丢失时,它就没有太大的意义,可以忽略,因为它对所携带的信息没有太大的影响,也没有太大的相关性。
错误检测与控制:传输层提供错误检查,主要有以下两个原因。
即使当一个段在链路上移动时没有引入错误,当一个段存储在路由器的内存中(用于排队)时也可能引入错误。在这种情况下,数据链路层无法检测到错误。不能保证源和目标之间的所有链接都将提供错误检查。其中一个链接可能使用的链接层协议不能提供预期的结果。
用于错误检查和控制的方法是循环冗余校验(Cyclic Redundancy Check,CRC)和校验和(Checksum)。
循环冗余校验:这个概念基于数据组件的二进制除法,因为其余数(CRC)被附加到数据组件并发送给接收方。接收方将数据组件除以一个相同的除数。如果余数为零,则允许数据组件通过以转发协议,否则,就假定数据单元在传输过程中被扭曲,包被丢弃。
校验和生成器和检查器:在这种方法中,发送方使用校验和生成器机制,在这种机制中,最初数据组件被分割成n位的相等段。然后,利用1的补数将所有的段相加。之后,它再次进行补充,现在它变成校验和,然后与数据组件一起发送。
示例:
向接收端发送16位为10000010 00101011的信息,则发送给接收端的校验和为10000010 00101011 01010000。
在接收到数据单元后,接收器将其分成n个大小相等的段。所有的段都用1的补数相加。结果再次补全,如果结果为零,则接受数据,否则丢弃。
这种错误检测和控制方法允许接收方在传输过程中发现数据损坏时重建原始数据。
网络层(network layer)是OSI参考模型的第三层,负责在运行相同或不同协议的内部网络和内部网络之间完成数据包从源主机到目标主机之间的最佳路线的选择,网络层数据传输单位是数据包。概况的讲,网络层就是要通过路由协议、交换、错误检测和寻址技术在发送方和接收方之间找到简单、最短和最高时效比的方式来交换数据。
它通过使用网络的逻辑网络寻址和子网设计来执行上述任务。无论两个不同的网络在相同或不同的协议或不同的拓扑上工作,该层的功能是通过使用逻辑IP地址和路由器进行通信,将数据包从源路由到目的。
数据链路层(data-link layer)是OSI参考模型底部的第二层,数据链路层主要功能是进行错误检测,并将数据位合并成帧。它将原始数据组合成字节和字节帧,并将数据包传输到目标主机的网络层。在目标主机端,数据链路层接收信号,将其解码成帧并发送到硬件。
MAC地址:数据链路层监督称为网络MAC地址的物理寻址系统,并处理各种网络组件对物理介质的访问。媒体访问控制地址是一个唯一的设备地址,网络中的每个设备或组件都有一个MAC地址,并且媒体访问控制地址是唯一的,据此我们可以在网络中对设备进行唯一性鉴别,地址为12位。
MAC地址的结构是由IEEE组织定义的,同时也被全球所有公司所接受。在任何一块网卡中烧录的48位(6字节)MAC地址,也称物理地址,如:3C-95-09-9C-21-G1,由两部分组成,前24位(3字节)为OUI(Organizationally unique identifier,组织唯一标识符),表明网卡的制造组织代码,且该标识符代码是唯一的,后24位(3字节)为NIC(Network Interface Card,以太网卡),代表由网卡制造商分配的代码。
错误检测:此层只进行错误检测,不进行错误纠正。错误校正在传输层完成。
有时数据信号会遇到一些不需要的信号,称为错误位。为了克服错误,该层执行错误检测。循环冗余校验(CRC)和校验和是几种有效的错误检查方法。我们将在传输层功能中讨论这些。
流量控制和多路访问:在该层中,数据通过传输媒介以帧的形式在发送方和接收方之间进行传输,数据应以相同的速度进行发送和接收。当帧在介质上以高于接收器工作的速度发送时,接收节点将会因为速度不匹配而造成数据丢帧。为了克服此类问题的发生,数据链路层则执行流量控制机制。
流量控制分两种类型
1)停止和等待流控制:在此机制中,它推动发送端在数据传输后停止并等待接收端对接收端接收到的帧的确认。只有在接收到第一个确认之后,第二个数据帧才通过媒介发送,然后这个过程将继续。
2)滑动窗口:在这个过程中,发送和接收双方都将决定在确认之后应该交换的帧数。由于在流量控制过程中使用的资源更少,所以这个过程节省时间。
同步:进行数据共享的两台设备两端必须同步,以保证数据传输的顺利进行。
二层交换机:二层交换机是根据本机的物理地址(MAC地址)将数据转发到下一层的设备。它首先收集接收帧所在端口设备的MAC地址,然后从地址表中学习到MAC地址的目标地址,将帧转发给下一层的目标地址。如果没有指定目标主机地址,那么它只是将数据帧广播到包括学到原地址端口之外的所有端口。
Bridges:Bridges是工作在数据链路层的双端口设备,用于连接两个局域网。除此之外,它的行为就像一个中继器,有一个附加的功能,通过学习MAC地址过滤不需要的数据,并将其进一步转发到目标节点。它用于使用相同协议的网络的连通性。
物理层(physical layer)是OSI参考模型底部的第一层,其主要是在相邻主机节点之间以比特流数据的形式进行数据透明化传送。物理层也定义用于信息通信的媒介类型,连接器类型和信号类型。
举例:
基于ISO国际标准化组织针对检测排放相关的OBD标准,基于CAN总线ISO15765协议与应用层协议ISO15031-5,其中ISO15765-4协议设置了CAN总线的使用规则,ISO15031-5规定了诊断服务的具体应用。ISO11898-1和ISO11898-2规定了数据链路层与物理层的规格标准。物理层通过使用CAN-H与CAN-L的差分电压(即电压差)来表示CAN总线的显性和隐性位,当CAN_H和CAN_L处于均衡态,均为静态2.5V左右时,状态表示1,为隐性电平,当CAN_H比CAN_L高时,状态表示0,为显性电平,一般CAN_H=3.5V,CAN_L=1.5V,其电平标准见下图。数据链路层通过将网络层的诊断报文打包,可在CAN总线上进行传输。
本文对开放系统信息模型在不同层之间的交互功能、角色、内部链路以及关系进行了基本介绍。
底部的4个层(物理层、数据链路层、网络层和传输层),负责通信,主要用于网络之间的数据流传输,顶部的3个层(会话层、表达层和应用层),负责应用,主要用于主机之间的数据传输属于应用层。