1.2 网络模型
1.2.1 分层模型
为了使所有网络都能互相连通,国际标准化组织(Internationa1 Organization for Standardization,ISO)提出了开放系统互连参考模型(Open Systems Interconnection Reference Mode1,OSI/RM),简称为OSI,其标准编号为ISO—7498。ISO一贯的风格是大而全,OSI自然也不例外。OSI分为7层,包括物理层、数据链路层、网络层、传输层、应用层、表示层、会话层,其系统庞大复杂、事无巨细,企图解决所有能想到的问题,但实际上其中大部分功能极少使用。
当ISO在全世界推行其OSI,试图让全世界的计算机网络都遵守这一标准时,因特网已经覆盖了世界上很多地区。因特网的体系结构采用TCP/IP体系结构,它与OSI截然不同。TCP/IP体系结构注重实用、非常简单,它是一个4层结构,包括网络接口层、网际层、应用层、传输层,其中网际层相当于网络层,网络接口层相当于数据链路层和物理层。TCP/IP体系结构在与OSI的竞争中胜出了,这是简单的4层体系结构战胜复杂结构的典范。
现在常用的网络体系结构是5层(即物理层、数据链路层、网络层、传输层和应用层)体系结构或4层TCP/IP体系结构。OSI体系结构、5层体系结构与TCP/IP体系结构的对比如图1.4所示。
图1.4(b)所示为实用的5层体系结构。各层自下向上编号,最下面的物理层称为第1层,数据链路层称为第2层,直至第5层的应用层。每一层的最主要内容是协议(如第一层的机械特性和电气特性协议、数据链路层的帧结构协议等)。因为这些层堆叠在一起好像一个堆放货物的堆栈,所以也称为协议栈(protoco1stack)。下面简单介绍各层的功能。
图1.4 几种网络系统结构对比
1.物理层
计算机世界采用二进制数表示,只用0与1这两个二进制数就能表达所有内容,无论是文本、程序,还是音乐、电影,因此计算机网络能传输大量的0与1代码即可。但如何传输却是个复杂的问题,早期使用同轴电缆,现在普遍使用双绞线与光纤。这些传输媒体中传输的是电信号和光信号,电信号和光信号如何表示0与1呢?另外,计算机和网络设备如何与传输媒体连接?这些都是物理层要解决的问题。概括地说,物理层的任务就是传输码流。
2.数据链路层
数据链路层简称为链路层。当两个节点(节点可能是计算机,也可能是网络设备)使用一根导线相连时,两者间的通信非常简单。可在无线情况下,若两个节点同时发送数据,数据会因为冲突而遭破坏;或在有线方式下,采用广播式的通信方式,也会有冲突发生。这些问题由数据链路层负责解决。概括地说,数据链路层的任务是负责相邻节点间的通信。
3.网络层
当数据从一台计算机发往另一台计算机时,转发数据的网络设备如何知道数据是发往哪台计算机的?如果去往目的计算机存在着不同的路径,传输数据时应该选择哪条路径?选择的依据是什么?这些都是网络层要解决的问题。概括地说,网络层的任务是在网络中选择一条合适的路由传输数据。
4.传输层
一台计算机中能够同时运行多个程序,这种运行着的程序称为进程,如一个浏览器、一个QQ聊天窗口。想象一位用户打开了十多个浏览器窗口,同时还在QQ聊天,BT也在下载最新的电影,如此多的进程都使用同一网卡收发数据,数据是如何由网卡正确分配到不同进程的?浏览器、QQ、BT都工作正常,没有出现数据混乱现象。另外,网络不是万无一失的,传输过程中数据出错或丢失怎么办?这些都是传输层要解决的问题。概括地说,传输层的任务是负责不同计算机中两个进程间的通信。
5.应用层
计算机网络存在的目的是使用。应用层就是为了让用户能够使用网络,如浏览网页、QQ聊天、收发电子邮件、下载电影、玩网络游戏等,这些提供实用功能的程序称为应用。如此众多的应用如何合理地设计,如何高效地为用户提供良好的服务就是应用层的任务。
1.2.2 分层结构中的术语
下面简单说明计算机网络中的重要概念。
1.实体
计算机网络中有网卡、软件进程等参与者。实体(entity)指计算机网络中参与发送或接收数据的硬件或软件进程。网卡、浏览器窗口都是实体。不同的层有不同的实体,位于不同计算机中同一层的实体称为对等实体。例如,发送端网络层的实体与接收端网络层的实体为对等实体。
2.服务
在计算机网络中,除物理层外,每层的实体需要下一层实体的帮助才能完成数据的传输。这种下层实体提供给上层实体使用的功能称为服务(service)。
服务通常通过函数调用来实现。例如,传输层实体提供了C语言的发送函数send()与接收函数recv(),应用层实体需收发数据时直接调用这两个函数就可以了。至于这两个函数如何实现,那是传输层实体的事情,应用层实体不需要知道。实际上传输层为了实现这两个函数还需要调用网络层实体提供的服务,而网络层实体再调用数据链路层实体提供的服务,最后数据链路层实体再调用物理层实体提供的服务。这样经过层层调用才最终完成数据的收发。
3.协议
在计算机网络中,位于不同计算机内的同层对等实体需要很多规则才能正常通信。协议(protoco1)规定了两个对等实体通信时的数据格式,以及在收发数据时和其他事件发生时应进行的操作。既然协议是控制对等实体的,那么一个协议必然位于某一层内,不同的层有不同的协议。因特网有两个最重要的协议,位于传输层的TCP协议和位于网络层的IP协议,这两个协议构成了因特网的核心,因此因特网的体系结构称为TCP/IP体系结构。
特别应该注意的是,协议规定的是两个对等实体,也就是位于两台不同计算机的两个同层实体间的关系,至于同一计算机内相邻层实体间的关系则是提供服务与使用服务的关系。
有的协议非常简单,有的非常复杂。很多协议之所以复杂,是因为要对很多非正常情况进行处理,此时的工作量远远超过了处理正常情况的工作量。这种情况在计算机世界经常见到。例如,一个除法程序,处理正常情况只需要类似a=x/y的一条指令,而为了处理除数不能为0这种非正常情况,需要判断、错误报告等多条指令。因此,在设计协议时要非常小心谨慎,尽可能考虑到各种非正常情况,协议才能持续不断地正常工作,否则遇到非正常情况就会出问题。这叫协议的健壮性。
协议是计算机网络中最重要的概念,也是计算机网络中最主要的内容。
4.协议数据单元
计算机网络中的每层实体都有自己处理数据的单位。这种某层实体处理数据的单位称为该层的协议数据单元(Protoco1 Data Unit,PDU)。物理层的PDU称为比特,数据链路层的PDU称为帧(frame),网络层的PDU称为数据报(datagram),传输层的PDU称为报文段(segment),应用层的PDU称为报文(message)。另外,无论哪一层的PDU,都可以笼统地称为分组(packet)。
5.封装与拆封
计算机网络中,应用层在数据中加上控制信息形成自己的PDU,把PDU交给传输层实体。传输层实体在应用层PDU的外面加上自己的控制信息形成传输层的PDU,再交给网络层。网络层、数据链路层的实体同样处理,直至物理层,数据才真正传输出去。
在上层实体交付的PDU外面加上控制信息形成本层PDU的过程称为封装(encapsu1ation)。计算机网络中每层实体都重复同样的工作:收到来自发送计算机中对等实体给本层的PDU后,首先查看其中的控制信息,再去掉控制信息得到上层PDU,交付给上层实体,直至应用层。查看控制信息的目的有很多,如检查数据在传输过程中是否出错。
去掉本层PDU控制信息从而得到上层PDU的过程称为拆封(decapsu1ation)。因为控制信息通常置于上层PDU的前面,所以也形象地称为首部(header)。协议中最重要的内容就是规定首部的格式,以及查看首部后要进行的操作。PDU中除首部以外的部分称为数据,本层数据显然就是来自上层的PDU。封装与拆封的过程如图1.5所示。
关于封装与拆封的过程还有如下两点需要说明:
(1)有些数据链路层协议除增加首部外,还在网络层PDU的后面增加尾部,如数据链路层帧结构中的帧校验序列(Frame Check Sequence,FCS)字段;
(2)有些物理层协议直接将数据链路层PDU转换为电信号或光信号传输,不再增加首部,但也有一些物理层协议需要增加首部。
特别需要注意的是,某层的接收实体只查看本层PDU的首部,这个首部则是发送方的同层对等实体加上的。
图1.5 封装与拆封的过程
图1.4所示网络模型结构图中,各层的功能通过硬件或软件实现。“某设备工作在某层”确切的意思是指该设备会查看该层及其下面其他层PDU的首部。例如,路由器中的网络层实体会查看网络层PDU的首部并据此进行一些操作,这些操作由网络层协议规定。要想查看网络层PDU的首部,就要先查看数据链路层PDU的首部并将其去掉,才能得网络层PDU。因此路由器内一定要有数据链路层实体。同理,也一定要有物理层实体。至于传输层与应用层,路由器并不查看其PDU的首部,自然也不需要其实体了。所以,路由器内只有物理层、数据链路层与网络层的实体,而传输层和应用层的实体并不存在,其分层结构如图1.6所示。
图1.6 工作在网络层的路由器分层结构
从图中可以看出路由器工作的过程如下:电信号或光信号从接口1进入后,物理层实体把信号转换成0与1组成的二进制数字序列,得到数据链路层PDU,数据链路层实体查看其首部并完成数据链路层协议规定的操作后,拆封得到网络层PDU,网络层实体查看其首部并完成网络层协议规定的操作。网络层PDU被转发到接口2,接口2的数据链路层实体把网络层PDU封装为数据链路层PDU,物理层实体把0与1数字序列转换为电信号或光信号,通过传输媒体发送出去。封装与拆封体现了计算机网络分层结构的基本原理,是计算机网络的精髓所在;协议则是各层的核心内容。