本节书摘来异步社区《非常网管:网络管理从入门到精通(修订版)》一书中的第1章,第1.3节,作者: 崔北亮 , 陈家迁,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.3 ISO/OSI参考模型
非常网管:网络管理从入门到精通(修订版)
上一节对协议分层和网络体系结构进行了概述。接下来,本节介绍一些具体的网络体系结构,首先介绍一个重要的网络体系结构,即OSI参考模型。
在网络发展初期,许多研究机构、计算机厂商和公司都大力发展计算机网络。从ARPANET出现至今,已经推出了许多商品化的网络系统。这种自行发展的网络,在体系结构上差异很大,以至于它们之间互不相容,难于相互连接以构成更大的网络系统。为此,许多标准化机构积极开展了网络体系结构标准化方面的工作,其中最为著名的就是国际标准化组织ISO提出的开放系统互连OSI参考模型。OSI参考模型是研究如何把开放式系统(即为了与其他系统通信而相互开放的系统)连接起来的标准。
OSI参考模型将计算机网络分为7层,如图1-3-1所示。下面将从最底层开始,依次介绍模型的各层所要完成的功能。
1.物理层
物理层(Physical Layer)的主要功能是完成相邻节点之间原始比特流的传输。物理层协议关心的典型问题是,使用什么样的物理信号来表示数据“1”和“0”,一位持续的时间多长,数据传输是否可同时在两个方向上进行,最初的连接如何建立以及完成通信后连接如何终止,物理接口(插头和插座)有多少针以及各针的用处。物理层的设计主要涉及物理层接口的机械、电气、功能和过程特性,以及物理层接口连接的传输介质等问题。物理层的设计还涉及通信工程领域内的一些问题。物理层常用的网络设备有中继器(Repeater)和集线器(Hub)。
2.数据链路层
数据链路层(Data Link Layer)的主要功能是在不可靠的物理线路上进行数据的可靠传输。数据链路层完成的是网络中相邻节点之间可靠的数据通信。为了保证数据的可靠传输,发送方把用户数据封装成帧(Frame),并按顺序传送各帧。由于物理线路的不可靠,因此发送方发出的数据帧有可能在线路上发生出错或丢失,从而导致接收方不能正确接收到数据帧。为了保证能让接收方对接收到的数据进行正确性判断,发送方为每个数据分块计算出CRC(Cyclic Redundancy Check,循环冗余校验),并把CRC添加到帧中,这样接收方就可以通过重新计算CRC来判断数据接收的正确性。一旦接收方发现接收到的数据有错,则发送方必须重传这一帧数据。然而,相同帧的多次传送也可能使接收方收到重复的帧。例如,接收方给发送方的“确认帧”被破坏后,发送方也会重传上一帧,此时接收方就可能接收到重复帧。数据链路层必需解决由于帧的损坏、丢失和重复所带来的问题。
数据链路层要解决的另一个问题是,防止高速发送方的数据把低速接收方“淹没”。因此需要某种信息流量控制机制使发送方得知接收方当前还有多少缓存空间。为了控制的方便,流量控制常常和差错处理一同实现。
在局域以太网中,数据链路层通过MAC(Media Access Control,介质访问控制)地址负责主机之间数据的可靠传输。数据链路层的设备必须能识别出数据链路层的地址,如局域网交换机能构造MAC地址表,基于MAC地址进行数据转发;网卡本身具有MAC地址,能根据MAC地址判断数据包是否是发往本机的数据包。网桥、交换机和网卡都属于数据链路层的设备。
实验1-2 查看局域网中的某台主机是否在线
如何查看局域网中某台主机是否在线呢?可以选择“开始”→“运行”命令,输入“cmd”后单击“确定”按钮,在打开的DOS窗口中输入“ping 某主机的IP地址”。如果收到“Reply from …”,则说明该主机肯定是在线的;如果收到“Request time out”,是否能说明该主机一定不在线呢?回答是否定的,收到超时信息并不能说明该主机一定不在线,因为如果该主机运行防火墙软件,禁止ping命令回应,收到的信息也是“Request time out”。ping执行完以后,可以通过在DOS窗口中输入“arp -a”,查看本机的ARP(Address Resolution Protocol,地址解析协议)缓存,如果有缓存条目,则说明该主机是在线的,如果没有缓存条目,则说明该主机不在线。
为了更形象地说明这个问题,请参照图1-3-2。第一次执行“ping 192.168.1.220 –n 1”命令,尝试去ping 192.168.1.220这个IP地址,其中的“-n 1”是ping命令的参数,表示只ping一个数据包,ping命令默认发送的是4个包。结果收到了192.168.1.220的应答包,“Reply from 192.168.1.220: bytes=32 time<1ms TTL=128”,其中“byte=32”表示收到的字节数,ping 的应答包默认大小是32字节;“time<1ms”,表示从发出ping包到收到应答,花费的时间小于1ms,这个值可以用来简单地判断网络的健康状况;“TTL=128”,TTL表示生存周期,每经过一台路由器,这个值至少减1。这个值和具体的操作系统以及从ping的源主机到ping的目标主机之间经过的路由器数量也有关,因不同的操作系统默认的初始值不同,可能的初始值是64、128、255。假如操作系统的默认初始值是128,则上面的结果表示,没有经过任何一台路由器就到达目标了,假如操作系统的默认值是255,则经过的路由器可能就是255-128=127,这是不可能的情况,因为Internet上没有任何两台主机之间的路由器会达到这个数值。
确定源和目标之间的路由器数量,可使用“tracert”命令,如图1-3-3所示。使用ping命令测试从www.263.net返回的包的TTL(Time To Live,生存时间)是49,源主机和www.263.net主机之间经过的路由器数量大概是64-49=15,说“大概”是因为每经过一台路由器,TTL至少减1,有时减的不止是1,这和具体的网络有关。接下来使用tracert命令测试。其中“-d”是附加参数,如果不加这个参数,tracert命令执行的速度会比较慢,因为计算机尝试把每台路由器的IP地址解析成域名,这会花很多的时间,而且意义不大。“-d”参数表示计算机不执行IP到域名的反向解析,这会大大加快执行速度。结果显示,经过14台路由器到达目标,第15跳已经是目标地址了。由此可见,ping命令中的TTL可以用来粗略判断源主机和目标主机之间经过的路由器的数量,ping只能测试计算机的连通情况,无法定位到中间出故障的某一台路由器上,而tracert可以更准确地定位到某台出故障的路由器上。
开启计算机“192.168.1.3”的防火墙。在计算机“192.168.1.3”上,右键单击“网上邻居”,在快捷菜单中选择“属性”,打开“网络连接”窗口,右键单击“本地连接”,在快捷菜单中选择“属性”,如图1-3-4所示。
在打开的“本地连接 属性”对话框中,选择“高级”选择卡,选中“通过限制或阻止……”复选框,启用计算机的防火墙,如图1-3-5所示。
在计算机“192.168.1.3”上启用防火墙后,如图1-3-2所示,ping 192.168.1.3时,收到了超时的提示,原因是防火墙阻止了ping包。再ping一个不存在的IP地址“192.168.1.4”,也收到了超时的提示,如何准确判断出哪一个IP地址是在线的呢?图1-3-2中所示的“arp -a”命令用来显示本机保存的ARP缓存,可以看到两个条目“192.168.1.220”和“192.168.1.3”,却没有看到“192.168.1.4”的条目,由此可以判断“192.168.1.220”和“192.168.1.3”主机在线,“192.168.1.4”主机不在线。由此也可以得知,防火墙对ARP是阻止不了的。IPv4中,针对局域网的ARP攻击危害巨大,很难防御,本书第4部分通过分析ARP攻击原理,具体介绍一些防御攻击的切实可行的解决办法。
3.网络层
网络层(Network Layer)的主要功能是完成网络中主机间的报文传输。在广域网中,这包括产生从源端到目的端的路由,根据采用的路由协议,选择最优的路径,本书将在第3部分介绍路由的相关知识。
当报文不得不跨越两个或多个网络时,又会产生很多新问题。例如,第二个网络的寻址方法可能不同于第一个网络,第二个网络也可能因为第一个网络的报文太长而无法接收,两个网络使用的协议也可能不同。网络层必须解决这些问题,使异构网络能够互连。
网络层涉及的协议有IP、IPX等,网络层的设备必须能识别出网络层的地址,如路由器、三层交换机等都可以根据IP地址做路径选择,它们都属于网络层设备。
实验1-3 查看ADSL上网获取到的IP地址
如图1-1-17所示,查看给计算机静态分配的IP地址。如果通过ADSL上网,计算机将会动态获取到一个IP地址,如何查看获取的IP地址呢?
可以在DOS窗口中执行“ipconfig”命令,查看计算机静态分配的IP地址或动态获取的IP地址、使用“ipconfig /all”命令除了可以查看计算机的IP地址外,还可以查看计算机网卡的MAC地址,以及DNS服务器地址。如图1-3-6所示,ADSL显示的结果与图1-3-6所示类似,但IP地址是动态获取的。
4.传输层
传输层(Transport Layer)的主要功能是完成网络中不同主机上的用户进程之间可靠的数据通信。最好的传输连接是一条无差错的、按顺序传送数据的管道,即传输层的连接是真正端到端的连接。换言之,源端主机上的某进程是利用报文头和控制报文与目标主机上的对等进程进行对话。
由于绝大多数主机都支持多任务操作,因而机器上有多个进程,这意味着多条连接将进出主机,因此需要以某种方式区别报文属于哪条连接。识别这些连接的信息可以放入传输层的报文头中。除了将几个报文流多路复用到一条通道上,传输层还必须管理跨网连接的建立和拆除。这就需要某种命名机制,使机器内的进程能够说明它希望交谈的对象。另外,还需要有一种机制来调节信息流,使高速主机不会过快地向低速主机传送数据。
传输层相关的协议有TCP、UDP(User Datagram Protocol,用户数据报协议),它们涉及服务使用的端口号,主机根据端口号识别服务(常用的WWW服务端口号是80,FTP服务端口号是21等)和区分会话(源IP、源端口号、目标IP、目标端口号,四者共同唯一标识一个会话)。对一些常用的服务,在文件“C:WINDOWSsystem32driversetcservices”中记录了服务名、所使用的协议(TCP或UDP)、默认端口号。
实验1-4 查看服务使用的端口号
对一些不常使用或用户自己开发的服务程序,用户可以先建立到服务端的连接,然后在DOS窗口中输入命令“netstat -n”,查看服务所对应的端口号。此方法也适用于一些常用服务。先连接主机“192.168.1.220”的远程桌面(有关远程桌面的使用,本书将在第2部分介绍),然后执行“netstat”命令来查看远程桌面所使用的协议和端口号,如图1-3-7所示。可以看出远程桌面使用的协议是TCP,本地主机的IP地址是192.168.1.200,使用的端口号是1756,该端口号是一个大于1024(包括1024)以上的随机值;外部主机的IP地址是192.168.1.220,端口号是3389,3389是远程桌面默认使用的端口号。
5.会话层
会话层(Session Layer)允许不同机器上的用户之间建立会话关系。会话层允许进行类似传输层的普通数据的传送,在某些场合还提供了一些有用的增强型服务。会话层允许用户利用一次会话在远端的分时系统上登录,或者在两台机器间传递文件。
会话层提供的服务之一是管理对话控制。会话层允许信息同时双向传输,或任一时刻只能单向传输。如果属于后者,则类似于物理信道上的半双工模式,会话层将记录此时该轮到哪一方传输数据。一种与对话控制有关的服务是令牌管理(Token Management)。有些协议保证双方不能同时进行同样的操作,这一点很重要。为了管理这些活动,会话层提供了令牌,令牌可以在会话双方之间移动,只有持有令牌的一方可以执行某种关键性操作。另一种会话层服务是同步。如果在平均每小时出现一次大故障的网络上,两台机器间要进行一次两小时的文件传输,则会出现严重的问题。每一次传输中途失败后,都不得不重新传送这个文件。当网络再次出现大故障时,可能又会半途而废。为了解决这个问题,会话层提供了一种方法,即在数据中插入同步点。每次网络出现故障后,仅仅重传最后一个同步点以后的数据。
6.表示层
表示层(Presentation Layer)完成某些特定的功能,对这些功能,人们常常希望找到普遍的解决办法,而不必由每个用户自己来实现。值得一提的是,表示层以下各层只关心从源主机到目标主机可靠地传送比特,而表示层关心的是所传送信息的语法和语义。表示层服务的一个典型例子是用一种大家一致选定的标准方法对数据进行编码。
网络上计算机可能采用不同的数据表示,所以需要在数据传输时进行数据格式的转换。例如,在不同的机器上常用不同的代码来表示字符串(ASCII和EBCDIC)、整型数(二进制反码或补码)以及机器字的不同字节顺序等。为了让采用不同数据表示法的计算机之间能够相互通信并交换数据,在通信过程中使用抽象的数据结构来表示传送的数据,而在机器内部仍然采用各自的标准编码。管理这些抽象数据结构,并在发送方将机器的内部编码转换为适合网络上传输的传送语法,以及在接收方做相反的转换等,都是由表示层来完成的。
另外,表示层还涉及数据压缩和解压、数据加密和解密等工作。
7.应用层
网络的目的在于支持运行于不同计算机的进程之间的通信,而这些进程则是为用户完成不同任务而设计的。应用层(Application Layer)包含大量人们普遍需要的协议,如HTTP(Hyper Text Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、SMTP(Simple Message Transfer Protocol,简单邮件传输协议)、DNS(Domain Name Service,域名解析服务)等。
对于需要通信的不同应用来说,应用层的协议都是必需的。例如,当某个用户想要获得远程计算机上的一个文件拷贝时,要向本机的文件传输软件发出请求,这个软件与远程计算机上的文件传输进程通过文件传输协议进行通信,这个协议主要处理文件名、用户许可状态和其他请求细节的通信。远程计算机上的文件传输进程使用其他特征来传输文件内容。
由于每个应用有不同的要求,应用层的协议集在ISO/OSI模型中并没有定义,但是有些确定的应用层协议,包括虚拟终端、文件传输和电子邮件等,都可作为标准化的候选。值得注意的是,OSI模型本身不是网络体系结构的全部内容,这是因为它并未确切地描述用于各层的协议和实现方法,而仅仅规定每一层应该完成的功能。不过,ISO已经为各层制定了相应的标准,但这些标准并不是模型的一部分,它们是作为独立的国际标准被发布。
在OSI参考模型中,有3个基本概念:服务、接口和协议。OSI模型的最重要的贡献是将这3个概念区分清楚。
OSI参考模型是在其协议开发之前设计出来的。这意味着OSI模型不是基于某个特定的协议集而设计的,因而它更具有通用性。但另一方面,也意味着OSI模型在协议实现方面存在某些不足。实际上,OSI协议过于复杂,这也是OSI从未真正流行开来的原因所在。
虽然OSI模型和协议并未获得巨大的成功,但是OSI参考模型在计算机网络的发展过程中仍然起到了非常重要的指导作用,作为一种参考模型和完整体系,它仍对今后计算机网络技术标准化、规范化方向发展具有指导意义。接下来介绍目前广泛使用的TCP/IP。