网络层通过网络层/传输层接口向传输层提供服务。应先明确网络层向传输层提供什么类型的服务。设计网络层服务时,一定要牢记以下目标:
图4-1 网络层协议的环境示意
(2)应该向传输层屏蔽路由器的数量、类型和拓扑关系。
(3)传输层可用的网络地址应该有一个统一编址方案,甚至可以跨越LAN和WAN。
给定这些目标后,网络层设计者有很大的自由度来编写提供给传输层的详细服务规范。这种自由度通常演变为两个竞争派别之间的激烈争斗。最终讨论的焦点集中在网络层应该提供面向连接的服务还是提供无连接的服务。
一个阵营(以Internet社团为代表)认为,路由器的任务仅是传送数据包,不用再做别的事情。按照他们的观点(基于40年来从一个实际计算机网络获得的经验),不管如何设计网络,从本质上讲它总是不可靠的。因此,主机应该接受这样的事实,自己来完成错误控制(即错误检测和纠正)和流量控制任务。
这种观点很快地导致了这样的结论:网络服务应该是无连接的,只需要原语SEND PACKET和RECEIVE PACKET以及少量的其他原语。特别是,数据包的排序和流量控制不应该在这里完成,因为主机的任务就是完成这些工作。这就是端-端论点的例子,这种设计理念对Internet形成产生了很大的影响。每个数据包必须携带完整的目标地址,因为每个数据包的运送独立于它前面的那些数据包(如果此前有数据包的话)。
另一大阵营(以电话公司为代表)认为,网络应该提供可靠的、面向连接的服务。其声称,具有100多年成功经验的全球电话系统就是一个极好的范例。按照其观点,服务质量是最主要的因素,并且如果在网络中没有连接,要实现服务质量非常困难,特别是对于诸如语音和视频这样的实时流量。
即使几十年以后,这场争论仍然十分活跃。早期被广泛使用的数据网络都是面向连接的,如20世纪70年代的X25和20世纪80年代的帧中继(Frame Relay)。自从有了ARPA⁃NET和早期Internet,无连接网络层得到了普及。现在,IP协议俨然是一个无处不在的成功象征。虽然在20世纪80年代,它受到一种名为ATM的面向连接技术的威胁,该技术就是为了推翻IP而开发的;结果刚好相反,现在ATM终于找到了自己的用武之地,而IP正在接管电话网络。在幕后,Internet正朝着面向连接的特性进化,因为服务质量变得越来越重要了。
1.无连接服务的实现
考查了网络层所提供的两类服务之后,现在来看网络层内部是如何工作的。根据提供的服务类型,可能存在两种不同的组织方式。如果提供的是无连接的服务,那么,所有的数据包都被独立地注入网络中,并且每个数据包独立路由,不需要提前建立任何设置。在这样的上下文中,数据包通常被称为数据报(Datagram),类似于电报(Telegram),对应的网络称为数据报网络(Datagram Network)。如果使用了面向连接的服务,那么在发送数据包之前,必须首先建立起一条从源路由器到目标路由器之间的路径。这个连接被称为虚电路(Virtual Circuit,VC),它类似电话系统中建立的物理电路,其对应的网络称为虚电路网络(Virtualcircuit Network)。本节讨论数据报网络;下节再讨论虚电路网络。
数据报网络的工作方式:假设图4-2中的进程P1有一个很长的消息要发送给P2。P1将消息递交给传输层,并指示传输层将消息传送给主机H2上的进程P2。传输层代码运行在H1上,通常在操作系统内部。它先在消息的前面加上一个传输头,然后将结果传递给网络层(这里所指的网络层可能是操作系统内部的另一个过程)。
图4-2 数据报网络中的路由过程示意
图4-2所示为数据包网络中的路由过程。在这个例子中,假设消息的长度是最大数据包长度的4倍,所以,网络层必须将消息拆分成4个数据包(1、2、3和4),用某种点到点协议(如PPP)将这些数据包依次发送给路由器A,然后,ISP将消息的传输任务接管过来。每台路由器都有一个内部表,它指明了针对每一个可能的目标地址应该将数据包送到哪里。每个表项由两部分数据组成:目标地址和通往目标地址所使用的出境线路。当然,只能使用直接连接的线路。例如,在图4-2中,A只有两条出境线路分别通向B和C,所以,每个入境数据包必须被转发给这两台路由器中的一个,即使它最终的目标地址是其他路由器。A的初始路由表如图4-2中标示的“初始化”。
在路由器A,数据包1、2和3分别到达入境线路并且经过验证校验和之后,被路由器暂时保存起来,然后,根据A上的表,每个数据包被放在一个新帧中,并且被转发到通往C的出境链路;之后数据包1被转发给E,进一步又被转发给F。当到达F时,它被封装在一个帧内通过连有H的LAN被发送出去。数据包2和3遵循同样的路径。
然而,数据包4的情形有所不同。当它到达A之后,尽管它的目标地址也是指向F,但它被A转发给了路由器B。出于某种原因,A决定采用不同于前3个数据包的路径来发送数据包4。或许它了解到在ACE路径上发生了流量拥塞,因此更新了路由表,如图4-2中标示的“稍后”(Later)。管理这些路由表并做出路由选择的算法称为路由算法(Routing Algo⁃rithm)。路由算法是本章学习的一个主要议题,有几种不同类型的路由算法。(www.xing528.com)
IP是整个互联网的基础,是无连接网络服务的重要范例。每个数据包携带一个目标IP地址,路由器使用该地址来单独转发每一个数据包。IPv4数据包的地址是32位的,IPv6数据包的地址是128位的。本章后面部分将详细描述IP。
2.面向连接服务的实现
对于面向连接的服务需要一个虚电路网络,其路由过程如图4-3所示。其工作过程如下:隐藏在虚电路背后的意图是避免为每个要发送的数据包选择一条新路径(图4-2)。相反,当建立一个连接时,从源机器到目标机器之间的一条路径就被视为这个连接的一部分确定了下来,并且保存在这些中间路由器的表中。所有需要在这个连接上通过的流量都使用这条路径,这与电话系统的工作方式完全一致。当连接被释放之后,虚电路也随之消失。在面向连接的服务中,每个数据包包含一个标识符,指明了它属于哪一条虚电路。
图4-3 虚电路网络的路由过程示意
图4-3中的主机H1已经建立了一条与主机H2之间的连接1。这条连接被记录在每个路由表中的第一项中。A路由表的第一行说明,如果标示了连接标识符1的数据包来自H1,那么它将被发送到路由器C,并且被赋予连接标识符1。类似地,C路由表中的第一项将该数据包路由到E,也赋予连接标识符1。
如果H3也希望与H2建立连接,那么情形如下:H3选择连接标识符1(因为是它发起连接,而且这是它唯一的连接),并且告诉网络要建立虚电路。因此路由表增加了第二行。请注意,这里有一个冲突,因为尽管A很容易区分出标识连接1的数据包是来自H1还是来自H3,但是C无法区分它们。基于这个原因,A给第二个连接的出境流量分配一个不同的连接标识符。这种避免冲突的做法说明了为什么路由器需要具备替换出境数据包中连接标识符的能力。
在有些上下文中,这个过程称为标签交换(Label Switching)。一种面向连接的网络服务例子是多协议标签交换(Multi Protocol Label Switching,MPLS),它主要被用在Internet的ISP网络,IP数据包被一个有20位连接标识或标签的MPLS头包裹着。MPLS往往对客户端是隐藏的,客户看不到这些标签,ISP用它来为超大流量建立长期的连接;但是,当服务质量变得很重要而且还需要协助其他ISP完成流量管理任务时,MPLS的作用越来越突出。本章后面将更多地介绍有关MPLS的细节。
3.虚电路与数据报网络的比较
虚电路和数据报都有各自的支持者和反对者。现在从多个角度出发,对两组论点进行总结。表4-1所示为数据报网络和虚电路网络的比较。
表4-1 数据报网络和虚电路网络的比较
在网络内部,数据报和虚电路网络之间存在着个方面的权衡。一个权衡在于建立时间和地址解析时间。使用虚电路需要一个建立阶段,这个阶段既花费时间也消耗资源。一旦付出了这个代价,处理一个数据包的方法就非常简单:路由器只要使用电路号作为索引,在表中找到该数据包的去向即可。在数据报网络中,不需要建立电路,但路由器需要执行一个更为复杂的查找过程以便找到目标表项。
与此相关的问题是数据报网络所用的目标地址比虚电路网络所用的电路号要长,因为数据报网络的目标地址具备全局意义。如果数据包相当短,在每个数据包中都包括完整的目标地址可能意味着大量的协议开销,因此会造成带宽资源的浪费。
另一个问题是路由器内存所要求的表空间的数量。在数据报子网中,针对每个可能的目标地址都要求有一个表项,而在虚电路网络中,只要为每条虚电路提供一个表项即可。然而,这种优势有点虚幻并非绝对,因为虚电路网络在建立连接阶段所用的数据包也需要被路由,并且它们也使用目标地址,如同数据报网络的做法一样。
从保证服务质量以及避免网络拥塞的角度来看,虚电路有一定的优势,因为在建立连接时,资源可以提前预留(比如缓冲区空间、带宽和CPU周期)。一旦数据包到来,所需要的带宽和路由器容量都已经准备就绪。而对于数据报网络,避免拥塞更困难些。
对于事务处理系统(如在商场购物时通过电话验证信用卡的有效性),用于建立和清除虚电路所需要的开销有可能削弱虚电路的优势。如果系统中大部分流量都是这种类型,那么在网络内部使用虚电路就毫无意义。另外,公司的两个办公楼之间长期运行诸如VPN流量,这种情况下永久性的虚电路或许更加有用(可手工建立虚电路,并且持续使用几个月或者几年)。
虚电路也存在脆弱性问题。如果某台路由器崩溃并且内存中的数据全部丢失,那么即使它1 s后又重新启动,所有从它这里经过的虚电路都将不得不中断。相反,如果一台数据报路由器宕机,只有那些当时尚留在路由器队列中的数据包用户会受到影响(甚至这些用户也不会全部受到影响,因为发送方可能很快重传这些数据包)。另外,数据报还允许路由器平衡网络流量,因为一个长序列数据包的传输路径可以在序列传输的中途改变。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。