1.3 因特网的组成
因特网的拓扑结构虽然非常复杂,并且在地理上覆盖了全球,但从其工作方式上看,可以划分为以下的两大块:
(1)边缘部分 由所有连接在因特网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
(2)核心部分 由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。
图1-5给出了这两部分的示意图。下面分别讨论这两部分的作用和工作方式。
图1-5 因特网的边缘部分与核心部分
1.3.1 因特网的边缘部分
处在因特网边缘的部分就是连接在因特网上的所有主机。这些主机又称为端系统(end system),“端”就是“末端”的意思(即因特网的末端)。端系统在功能上可能有很大的差别,小的端系统可以是一台普通个人电脑甚至是很小的掌上电脑,而大的端系统则可以是一台非常昂贵的大型计算机。端系统的拥有者可以是个人,也可以是单位(如学校、企业、政府机关等),当然也可以是某个ISP(即ISP不仅向端系统提供服务,它也可以拥有一些端系统)。边缘部分利用核心部分所提供的服务,使众多主机之间能够互相通信并交换或共享信息。
我们先要明确下面的概念。我们说:“主机A和主机B进行通信”,实际上是指:“运行在主机A上的某个程序和运行在主机B上的另一个程序进行通信”。由于“进程”就是“运行着的程序”,因此这也就是指:“主机A的某个进程和主机B上的另一个进程进行通信”。这种比较严密的说法通常可以简称为“计算机之间通信”这种一般的说法。
在网络边缘的端系统中运行的程序之间的通信方式通常可划分为两大类:客户-服务器方式(C/S方式)和对等方式(P2P方式)。下面分别对这两种方式进行介绍。
1.客户-服务器方式
这种方式在因特网上是最常用的,也是传统的方式。我们在上网发送电子邮件或在网站上查找资料时,都是使用客户-服务器方式(或客户/服务器方式)。
大家知道,当我们打电话时,电话机的振铃声使被叫用户知道现在有一个电话呼叫。计算机通信的对象是应用层中的应用进程,显然不能用响铃的办法来通知所要找的对方的应用进程。然而采用客户-服务器方式可以使两个应用进程能够进行通信。
客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。客户-服务器方式所描述的是进程之间服务和被服务的关系。在图1-6中,主机A运行客户程序而主机B运行服务器程序。在这种情况下,A是客户而B是服务器,客户A向服务器B发出请求服务,而服务器B向客户A提供服务。这里最主要的特征就是:客户是服务请求方,服务器是服务提供方。
图1-6 客户-服务器工作方式
服务请求方和服务提供方都要使用网络核心部分所提供的服务。
在实际应用中,客户程序和服务器程序通常还具有以下一些主要特点。
客户程序
(1)被用户调用后运行,在通信时主动向远地服务器发起通信(请求服务)。因此,客户程序必须知道服务器程序的地址。
(2)不需要特殊的硬件和很复杂的操作系统。
服务器程序
(1)是一种专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。
(2)系统启动后即自动调用并一直不断地运行着,被动地等待并接受来自各地的客户的通信请求。因此,服务器程序不需要知道客户程序的地址。
(3)一般需要强大的硬件和高级的操作系统支持。
客户与服务器的通信关系建立后,通信可以是双向的,客户和服务器都可发送和接收数据。
顺便要说一下,上面所说的客户和服务器本来都指的是计算机进程(软件)。使用计算机的人是计算机的“用户(user)”而不是“客户(client)”。但在许多国外文献中,经常也把运行客户程序的机器称为client(在这种情况下也可把client译为“客户机”),把运行服务器程序的机器称为server。因此我们应当根据上下文来判断client或server是指软件还是硬件。在本书中,有时为了清楚起见,我们也使用“客户端”(或“客户机”)或“服务器端”来表示“运行客户程序的机器”或“运行服务器程序的机器”。
2.对等连接方式
对等连接(peer-to-peer,简写为P2P)是指两台主机在通信时并不区分哪一个是服务请求方还是服务提供方。只要两台主机都运行了对等连接软件(P2P软件),它们就可以进行平等的、对等连接通信。这时,双方都可以下载对方已经存储在硬盘中的共享文档。因此这种工作方式也称为P2P文件共享。在图1-7中,主机C,D,E和F都运行了P2P软件,因此这几台主机都可进行对等通信(如C和D,E和F,以及C和F)。实际上,对等连接方式从本质上看仍然是使用客户服务器方式,只是对等连接中的每一台主机既是客户同时又是服务器。例如,当主机C请求D的服务时,C是客户,D是服务器。但如果C又同时向F提供服务,那么C又同时起着服务器的作用。
图1-7 对等连接工作方式
对等连接工作方式可支持大量对等用户(如上百万个)同时工作。现在很流行的BT或电驴(emule)都使用了P2P的工作方式。
1.3.2 因特网的核心部分
网络核心部分是因特网中最复杂的部分,因为网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一台主机都能够向其他主机通信(即传送或接收各种形式的数据)。
在网络核心部分起特殊作用的是路由器(router)。目前我们只需要知道,路由器是一种专用计算机(但不是主机)。如果没有路由器,再多的网络也无法构建成因特网。路由器是实现分组交换(packet switching)的关键构件,其任务是转发收到的分组,这是网络核心部分最重要的功能。为了弄清分组交换,下面先介绍电路交换的基本概念,在此基础之上再讨论分组交换的特点。
1.电路交换的主要特点
在电话问世后不久,人们就发现,要让所有的电话机都两两相连接是不现实的。图1-8(a)表示两部电话只需要用一对电线就能够互相连接起来。但若有5部电话要两两相连,则需要10对电线,如图1-8(b)所示。当电话机的数量很大时,这种连接方法需要的电线数量就太大了(与电话机的数量的平方成正比)。于是人们认识到,要使得每一部电话能够很方便地和另一部电话进行通信,就应当使用电话交换机将这些电话连接起来,如图1-8(c)所示。每一部电话都连接到交换机上,而交换机使用交换的方法,让电话用户彼此之间可以很方便地通信。一百多年来,电话交换机虽然经过多次更新换代,但交换的方式一直都是电路交换(circuit switching)。
图1-8 电话机的不同连接方法
当电话机的数量增多时,就要使用很多彼此连接起来的交换机来完成全网的交换任务。用这样的方法,就构成了覆盖全世界的电信网。
从通信资源的分配角度来看,交换(switching)就是按照某种方式动态地分配传输线路的资源。在使用电路交换打电话之前,必须先拨号请求建立连接。当拨号的信令通过许多交换机到达被叫用户所连接的交换机时,该交换机就向被叫用户的电话机振铃。在被叫用户摘机且摘机信令传送回到主叫用户所连接的交换机后,呼叫即完成。这时,从主叫端到被叫端就建立了一条连接,也就是一条专用的物理通路。这条连接占用了双方通话时所需的通信资源,而这些资源在双方通信时不会被其他用户占用,此后主叫和被叫双方才能互相通电话。正是因为有了这个特点,电路交换对端到端的通信质量有可靠的保证,此后主叫和被叫双方才能互相通电话。通话完毕挂机后,挂机信令告诉这些交换机,使交换机释放刚才使用的这条专用的物理通路(即把刚才占用的所有通信资源归还给电信网)。这种必须经过“建立连接(占用通信资源)→通话(一直占用通信资源)→释放连接(归还通信资源)”三个步骤的交换方式称为电路交换。如果用户在拨号呼叫时电信网的资源已不足以支持这次的呼叫,则主叫用户会听到忙音,表示电信网不接受用户的呼叫(呼叫失败)。用户必须挂机,等待一段时间后再重新拨号。
图1-9(a)为电路交换的示意图。图中的用户线是电话用户到所连接的市话交换机的连接线路,是用户专用的线路,而对交换机之间拥有大量话路的中继线则是许多用户共享的,正在通话的用户只占用了中继线中的一个话路。电路交换的一个重要特点是,在通话的全部时间内,通话的两个用户始终占用端到端的通信资源。例如,图中电话机A和B之间的通路共经过了四个交换机(如果A和B相距很远,那么就可能要经过多个交换机)。这就是说,在A和B的通话过程中,它们就始终占用这条已建立的通话电路(A-C-D-E-F-B)。图1-9(b)表示在通话过程中,双方的话音信号沿着所占用的通话电路双向传输的示意图。通话完毕后(挂机),A和B就没有连接了,原来曾占用的电路又可以为其他用户使用。
图1-9 电路交换
当使用电路交换来传送计算机数据时,其线路的传输效率往往很低。这是因为计算机数据是突发式地出现在传输线路上的,因此线路上真正用来传送数据的时间往往不到10%甚至1%。实际上,已被用户占用的通信线路在绝大部分时间里都是空闲的。例如,当用户阅读终端屏幕上的信息或用键盘输入和编辑一份文件时,或计算机正在进行处理而结果尚未返回时,宝贵的通信线路资源并未被利用而是白白被浪费了。
2.分组交换的主要特点
分组交换则采用存储转发技术。图1-10所示的是把一个报文划分为几个分组的概念。通常我们把要发送的整块数据称为一个报文(message)。在发送报文之前,先把较长的报文划分成为一个个更小的等长数据段,例如,每个数据段为1024bit。在每一个数据段前面,加上一些由必要的控制信息组成的首部(header)后,就构成了一个分组(packet)。分组又称为“包”,而分组的首部也可称为“包头”。分组是在因特网中传送的数据单元。分组中的“首部”是非常重要的,正是由于分组的首部包含了诸如目的地址和源地址等重要控制信息,每一个分组才能在因特网中被正确地交付到分组传输的终点。
图1-10 划分分组的概念
图1-11(a)强调因特网的核心部分是由许多网络和把它们互连起来的路由器组成的,而主机处在因特网的边缘部分。在因特网核心部分的路由器之间一般都用高速链路相连接,而在网络边缘的主机接入到核心部分则通常以相对较低速率的链路相连接。
图1-11 分组交换的示意图
主机和路由器都是计算机,但它们的作用很不一样。主机的用途是为用户进行信息处理的,并且可以和其他主机通过网络交换信息。路由器的用途则是用来转发分组的,即进行分组交换的。路由器收到一个分组,先暂时存储下来,再检查其首部,查找路由表,按照首部中的目的地址,找到合适的接口转发出去,把分组交给下一个路由器。这样一步一步地(有时会经过几十个不同的路由器)以存储转发的方式,把分组交付到最终的目的主机。各路由器之间必须经常交换彼此掌握的路由信息,以便创建和维持在路由器中的路由表(这一概念将在4.6节讨论),使转发分组时能够查找出应当从哪一个接口把分组转发出去。
当我们讨论因特网的核心部分中的路由器转发分组的过程时,往往把单个的网络简化成一条链路,而路由器成为核心部分的结点,如图1-11(b)所示。这种简化图看起来可以更加突出重点,因为在转发分组时最重要的就是要知道路由器之间是怎样连接起来的。
现在假定图1-11(b)中的主机H1向主机H5发送数据。主机H1先将分组逐个地发往与它直接相连的路由器R1。此时,除链路H1-R1外,其他通信链路并不被目前通信的双方所占用。需要注意的是,即使是链路H1-R1,也只是当分组正在此链路上传送时才被占用。在各分组传送之间的空闲时间,链路H1-R1仍可为其他主机发送的分组使用。
路由器R1把主机H1发来的分组放入缓存。假定从路由器R1的路由表中查出应把该分组转发到链路R1-R3。于是分组就传送到路由器R3。当分组正在链路R1-R3上传送时,该分组并不占用网络其他部分的资源。
路由器R3继续按上述方式查找路由表,假定查出应转发到路由器R5。当分组到达R5后, R5就最后把分组直接交给主机H5。
图1-12(a)~(d)表示分组在从H1向H5传输的过程中,并非像电路交换那样,自始至终占用整个端到端的电路资源,而是逐段地占用—在哪段链路传输,就占用该链路的资源。这对整个网络资源的利用是有好处的。图1-12(e)表明分组在从主机H1传送到H5的过程中,就像接力赛跑那样,先传送到一个路由器,然后暂存一下,查找路由表,再转发到下一个路由器。这就是分组交换的“存储转发”过程。从这里可以看出,分组交换和电路交换有着很大的区别。
图1-12 分组交换
假定在某一个分组的传送过程中,链路R1-R3的通信量太大,那么路由器R1可以把分组沿另一个路由转发到路由器R2,再转发到路由器R5,最后把分组送到主机H5。在网络中可同时有多台主机进行通信,如主机H2也可以经过路由器R2和R5与主机H6通信。
这里要注意,路由器暂时存储的是一个个短分组,而不是整个的长报文。短分组暂存在路由器的存储器(即内存)中而不是存储在磁盘中,这就保证了较高的交换速率。
在图中只画了一对主机H1和H5在进行通信。实际上,因特网可以容许非常多的主机同时进行通信,而一台主机中的多个进程(即正在运行中的多道程序)也可以各自和不同主机中的不同进程进行通信。
总之,分组交换在传送数据之前不必先占用一条端到端的通信资源。分组在哪段链路上传送才占用这段链路的通信资源。分组在传输时就这样一段接着一段地断续占用通信资源,而且还省去了建立连接和释放连接的开销,因而数据的传输效率更高。
因特网采取了专门的措施,保证了数据的传送具有非常高的可靠性(在第5章讨论运输层协议时要着重讨论这个问题)。当网络中的某些结点或链路突然出故障时,在各路由器中运行的路由选择协议(protocol)能够自动找到其他路径转发分组。这些将在第4章中详细讨论。
从以上所述可知,采用存储转发的分组交换,实质上是采用了在数据通信的过程中断续(或动态)分配传输带宽的策略(关于带宽的进一步讨论见后面的1.6.1节),这对传送突发式的计算机数据非常合适,使得通信线路的利用率大大提高了。
为了提高分组交换网的可靠性,因特网的核心部分常采用网状拓扑结构,使得当发生网络拥塞或少数结点、链路出现故障时,路由器可灵活地改变转发路由而不致引起通信的中断或全网的瘫痪。此外,通信网络的主干线路往往由一些高速链路构成,这样就可以较高的数据率迅速地传送计算机数据。
综上所述,分组交换网的主要优点可归纳如表1-2所示。
表1-2 分组交换的优点
分组交换也带来一些新的问题。例如,路由器在转发分组时需要花费一定的时间,这就会造成了时延。因此必须尽量设法减少这种时延。此外,由于分组交换不像电路交换那样通过建立连接来保证通信时所需的各种资源,因而无法确保通信时端到端所需的带宽。
分组交换网带来的另一个问题是,各分组必须携带的控制信息也造成了一定的开销(overhead)。整个分组交换网还需要专门的管理和控制机制。
应当指出,从本质上讲,这种断续分配传输带宽的存储转发原理并非完全新的概念。自古代就有的邮政通信,就其本质来说也是属于存储转发方式。而在20世纪40年代,电报通信也采用了基于存储转发原理的报文交换(message switching)。在报文交换中心,一份份电报被接收下来,并穿成纸带。操作员以每份报文为单位,撕下纸带,根据报文的目的站地址,拿到相应的发报机转发出去。这种报文交换的时延较长,从几分钟到几小时不等。现在报文交换已经很少有人使用了。分组交换虽然也采用存储转发原理,但由于使用了计算机进行处理,这就使分组的转发非常迅速。例如ARPANET建网初期的经验表明,在正常的网络负荷下,当时横跨美国东西海岸的端到端平均时延小于0.1秒。这样,分组交换虽然采用了某些古老的交换原理,但实际上已变成了一种崭新的交换技术。