什么是OSI参考模型?

范柯左


OSI模型概述:

1、OSI模型(Open System Interconnection Reference Model,缩写为OSI),全名"开放式系统互联通信参考模型"

2、OSI模型是国际标准化组织(ISO)①和国际电报电话咨询委员会(CCITT)②联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架,它从高到低分别为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

3、那么OSI究竟是用来干什么的?

OSI模型定义了开放系统的层次结构以及各层之间的相互关系及各层所包含的服务,OSI模型是作为一个框架来协调和组织各层协议的制定,也是对网络内部结构最精练的概括与描述进行整体修改。

OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。同时,各种服务定义还定义了层与层之间的接口和各层的所使用的原语,但是不涉及接口是怎么实现的。

简言之OSI模型就是一套标准,互联网大部分协议都是基于OSI模型进行开发。

当今的互联网有着各式各样的应用,夸张一点可以说是只有你想不到,没有你找不到的,OSI模型就是为了网络的互相通信以及形形色色的网络应用的实现而建立的。

网络设备需要运行许许多多的网络协议以实现当今互联网所需要的各种功能,面对种类繁多的功能,我们可以将各式各样的功能按照不同的功能划分为一个整体模型,有着相似的功能的划分为同一层次。

二、OSI七层

OSI参考模型的各个层次的划分遵循下列原则:

同一层中的各网络节点都有相同的层次结构,具有同样的功能。

同一节点内相邻层之间通过接口(可以是逻辑接口)进行通信。

七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。

不同节点的同等层按照协议实现对等层之间的通信。

1、 物理层

物理层主要是指传输数据所需要的物理硬件链路,如光缆、电缆、双绞线、无线电波(WiFi)等方式。

物理层的作用就是通过物理手段把硬件设备(如电脑、路由器、交换机等)连接起来,它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

在这里说明一下,通过物理手段将设备连接起来组成局域网,物理手段就是光缆、电缆、双绞线、无线电波(WiFi)等,比如中美之间的网络通信是通过海底光缆。

两个不同的局域网(比如电信的网络和移动的网络)通讯,电信手机先连接电信的服务器,移动手机连接到移动服务器,电信和移动之间是通过物理手段链接的,这样电信和移动的网络就能够实现互相通讯了。

下图是全球互联网跨国通信光缆的连接情况:

从上图可以看到国家与国家,大洲与大洲之间都通过各种密密麻麻的线路进行连接,可以说整个互联网就是就无数台硬件设备和无数条线路所组成的一个庞大的局域网,大至运营商的高性能网络,小至家里的无线路由器,这些都是组成互联网的一部分。

2、 数据链路层

二层交换机就是工作在数据链路层

通过上面对物理层的讲解,我们都知道物理只是负责传送0和1的电信号,单单这些0和1的电信号是没有任何意义的,所有必须要规定解读方式:多少个0和1算一组?每个信号有什么意义?——这就是链路层的意义,它在物理层的上方,确定了0和1的分组方式。

2.1、MAC地址

大约在20世界70、80年代的时候,有很多家公司都有自己研发的网络类型,每家公司都有自己的电信号分组方式。例如大名鼎鼎IBM的令牌环网络,但是逐渐地,各式各样的网络都被一种叫做"以太网"(Ethernet)的协议,占据了主导地位。

以太网规定,一组电信号构成一个数据包,再由数据包组成一个数据链路层的数据协议单元,这个单元叫做"帧"(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。把数据包封装成帧的目的是为了数据包的可靠传输。

"标头"包含数据包的一些说明项,比如发送者、接受者、数据类型等等;"数据"则是数据包的具体内容。

"标头"的长度,固定为18字节。"数据"的长度,最短为46字节,最长为1500字节。因此,整个"帧"最短为64字节,最长为1518字节。如果数据很长,就必须分割成多个帧进行发送。

上面提到,以太网数据包的"标头",包含了发送者和接受者的信息。那么,发送者和接受者是如何标识呢?

以太网规定,连入网络的所有设备,都必须具有"网卡"接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址。

每块网卡出厂的时候,都有一个全世界独一无二的MAC地址,长度是48个二进制位,通常用12个十六进制数表示。

前6个十六进制数是厂商编号,后6个是该厂商的网卡流水号。有了MAC地址,就可以定位网卡和数据包的路径了。

2.2、广播

定义地址只是第一步,后面还有更多的步骤。

首先,一块网卡怎么会知道另一块网卡的MAC地址?有一种叫做ARP的协议,可以解决这个问题。这个留到后面介绍,这里只需要知道就可以了,以太网数据包必须知道接收方的MAC地址,然后才能发送帧。

其次,就算有了MAC地址,系统怎样才能把数据包准确送到接收方?以太网采用了一种很"原始"的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己分析自己是不是这个数据包的接收方。

上图中,计算机1向计算机2发送一个数据包,同一个子网络的3、4、5计算机都会收到这个包。它们读取这个包的"标头",找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接收这个包,做进一步处理,若不是就丢弃这个包。这种发送方式就叫做"广播"(broadcasting)。(这就是二层交换机的工作方式,以后的文章会作详细的介绍敬请关注。)

有了数据包的定义、网卡的MAC地址、广播的发送方式,"链接层"就可以在多台计算机之间传送数据了。

3、 网络层

三层交换机和路由器就是工作在网络层。

根据上面的讲解,理论上只需要依靠MAC地址和广播这两项技术,在广州的网卡发出的数据包就可以被在上海的网卡接收了这样就可以互相通信了,但如果全世界的计算机都是在用这种方式进行通讯的话,那么每一台计算机发出的数据包都会以广播的形式被全世界的电脑接收,全世界的电脑再一一进行分析,这种方式是非常低效的,且间接造成了非常大的资源浪费。

因此我们必须找到一种方法,区分哪些MAC地址属于同一个子网,如果是同一个子网就采用广播,如果不是,则采用"路由"的方式发送,但是这个功能不是MAC地址技术所具备的,这也间接地导致了网络层的出现,网络层的作用是引入一套新的地址,使我们能够区分哪些计算机属于同一个子网,这个套机制就叫做"网络地址",也就是我们常说的"IP地址"。 (下面会对路由作出解析)

3.1、IP协议

规定网络地址的协议,叫IP协议。他定义的地址,就叫做"IP地址"。IP协议目前有两根版本,IPv4和IPv6,而目前较为广泛使用的是IP协议版本4,也就是IPv4,IPv4由32位二进制所组成,IPv6目前正普及,IPv6由128位组成,长度是IPv4的4倍之多号称可以为全世界的每一粒沙子编上一个IP地址。

在2011年,IPv4的地址已经完全分配完毕,但IPv6目前仍处于部署的初期,仍然不能大规模使用。

IPv4地址由32个二进制位组成,习惯上,我们分成四段十进制数表示IPV4地址,从0.0.0.0到255.255.255.255。

【拓展一下IPv4地址在家里一直在用啊,192.168.1.1路由器上的这个地址不就是IPv4地址吗?怎么会已经分发完毕了?事实上家里路由器所使用的192.168.1.1 这个网段被称为私有地址,私有地址在互联网上是不能进行通信的,私有地址只能在内部局域网使用,那么问题又来了,如果私有地址不能在互联网进行通信,那么我在和家里是怎样上网的?家里上网普遍的形式都是拨号,通过拨号运营商会分配一个"真正"的IPv4地址给你,然后通过路由器内置的"NAT"协议进行地址、端口转换进行上网。(NAT是什么东西这里就不详细说明了,以后的文章会详细说明的,现在你只需要知道,NAT协议是对于IPv4地址短缺的问题的救星,另一方面也可以理解为IPv6普及的最大的障碍之一。)】

互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。比如,IP地址192.168.1.1,这是一个32位的地址,它的网络部分是前24位(192.168.1),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说192.168.1.1与192.168.1.100是处在同一个子网络。

3.2、子网掩码

但是,问题在于单从IP地址,我们无法判断网络部分。还是以192.168.1.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,单从IP地址上是看不出来的,那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?这就要用到另一个参数"子网掩码"(subnet mask)。

所谓"子网掩码",就是表示子网络特征的一个参数。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址192.168.1.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是

11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

知道"子网掩码",我们就能判断,任意两个IP地址是否处在同一个子网络。较为简单的方法是已知 192.168.1.10和192.168.1.100 两个IP的子网掩码都是255.255.255.0(

11111111.11111111.11111111.00000000),两个IP地址都在同一子网的前提条件是网络位相同,网络位就是255(二进制中的"1"),主机位就是0(二进制中的"0"),这样就能判断出192.168.1.10和192.168.1.100的网络位都是192.168.1这就就能知道两个IP是否同属于一个子网(这个方法对于"可变子网长度掩码"也就是VLSM不适用)。

总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些IP地址在同一个子网络。

3.3、IP数据包

根据IP协议发送的数据,就叫做IP数据包。想必,其中肯定包含有IP地址的信息。

但是前面说过,以太网数据包只包含MAC地址,并没有IP地址的栏位。那么是否需要修改数据定义,再添加一个栏位呢?不需要,我们可以把IP数据包直接放进以太网数据包的"数据"部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构。

具体来说,IP数据包也分为"标头"和"数据"两个部分。

"标头"部分主要包括版本、长度、IP地址等信息,"数据"部分则是IP数据包的具体内容。它放进以太网数据包后,以太网数据包就变成了下面这样。

IP数据包的"标头"部分的长度为20到60字节,整个数据包的总长度最大为65,535字节。因此,理论上,一个IP数据包的"数据"部分,最长为65,515字节。前面说过,以太网数据包的"数据"部分,最长只有1500字节。因此,如果IP数据包超过了1500字节,它就需要分割成几个以太网数据包,分开发送了。

3.4、ARP协议

因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道对方的MAC地址和IP地址。正常情况下,对方的IP地址是已知的,但是我们不知道它的MAC地址。

所以,我们需要一种协议,能够从IP地址得到MAC地址。

这里又可以分成两种情况。第一种情况,如果两台主机不在同一个子网络,那么事实上没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的"网关"(gateway),让网关去处理(网关下面会解析)。

第二种情况,如果两台主机在同一个子网络,那么我们就可以使用ARP协议,得到对方的MAC地址,ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个"广播"地址。它所在子网中的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,并向对方报告自己的MAC地址,若与自身IP不符合就丢弃这个包。

总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。

3.5、网关or路由

路由器:

上面我们提到若两台计算机处于两个不同的子网就需要使用路由来进行通信,那么路由究竟为何物呢?下面我们一一道来。

路由器(Router)是用于连接多个处于不同子网网络的网络,当数据从一个子网传输到另一个子网时,可通过路由器来完成。因此,路由器具有判断网络地址和选择路径的功能,它能在多子网互联环境中为各个子网直接建立连接。

路由器的主要工作就是为经过路由器的每个数据帧寻找一条最佳传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路由表(Routing Table),供路由选择时使用,路由表中保存着子网的信息和下一个路由器的名字等内容。路由表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。(路由表为何物?可以看一下我发表的文章《如何配置静态路由?》)

网关:

网关是路由器中的一种,一般来说网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。在使用不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。

家里所使用的无线路由器的LAN接口的IP地址(一般为192.168.1.1和192.168.0.1)就是你所在局域网中的网关,当你所在的局域网的计算机需要和其它局域网中的计算机,或者需要访问互联网的时候,你所在局域网的计算机会先把数据包传输到网关(路由器的LAN接口),然后再由网关进行转发。

举个简单的例子,一套房子内部有三个房间、一个大门,房子可以比喻成是你的电脑所在的局域网,三个房间可以比喻成你所在局域网中的三台电脑,房子的大门可以比喻成网关。当你在房子内的一个房间进入另一个房间的时候并不需要经过房子的大门,在局域网中也是一样的,处在同一局域网的中计算机进行通信的时候并不需要用到网关。(使用MAC地址和广播技术通信)当你需要到邻居家去玩的时候需要要从你家房子的大门出去(IP协议),相应的,局域网中的计算机需要和其它局域网中的计算机、和互联网上的计算机进行通信的时候,数据包必须要通过网关才可以到达。

这就是为什么我们在有路由器上网的时候,必须要把计算机中的默认网关地址设置成路由器LAN接口的地址的原因,因为路由器的LAN接口就是你所在网络的网关,你的电脑要上网,数据包必须要经过网关转发出去。目前家用路由器一般使用192.168.1.1和192.168.0.1作为LAN接口的地址,这两个地址也是最常见的网关地址。

作为普通的用户,只需要记住,手动配置ip地址的时候,默认网关的地址就是路由器的LAN接口的地址,也就是你路由器的管理页面登陆地址。如果你选择自动获取ip地址,那么就不需要关注默认网关地址了,但路由器的DHCP服务器分配下来的默认网关也一定是路由器的LAN接口的ip地址。

4、 传输层

4.1、端口号

有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。

接下来的问题是,同一台主机上有许多程序都需要用到网络,比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?

也就是说,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。这个参数就叫做"端口"(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

"端口"是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

"传输层"的功能,就是建立"端口到端口"的通信。相比之下,"网络层"的功能是建立"主机到主机"的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做"套接字"(socket)。有了它,就可以进行网络应用程序开发了。(那么Socket是什么这问题就不在这文章所讨论的范围内了,有兴趣的朋友可以百度一下)

0.0.0.0:135其中135就是被占用的端口号,一次类推。

4.2、TCP\\UDP

UDP和TCP协议都是传输层的协议,他们的主要作用就是在应用层的数据包标头加上端口号(或者在IP协议的数据包中插入端口号)。

UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

TCP协议可以近似认为是有确认机制的UDP协议。每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。

TCP协议主要的确认机制是"三次握手,四次挥手\

网络技术栈


“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”

OSI(Open System Interconnect,开放系统互联)是ISO组织研究的网络互联模型,将网络通信过程定义成七层模型。

如题,什么是OSI参考模型?

哟哟认为OSI参考模型就是将网络通信的完整过程采用分层的体系结构进行细分,方便人们理解网络具体的通信过程。

OSI参考模型分为七层,分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,每一层都有对应的功能。

下面哟哟来详细介绍一下:

1、物理层

就是为设备之间的数据通信提供可靠的传输环境;

2、数据链路层

就是为数据传输提供数据通道;

3、网络层

完成数据包的路由转发功能,以及负责处理分片和错误检测;

4、传输层

提供端到端传输的服务;

5、会话层

提供会话的建立和维持服务;

6、表示层

将数据转化为应用层可以读取的内容格式;

7、应用层

实现应用进程之间的信息交换;

每一层会有对应的协议,通过将网络通信过程细分至七层,可以更好的去理解网络通信的过程以及各协议的应用过程。

欢迎大家多多关注我,在下方评论区说出自己的见解。


分享到:


相關文章: