TCP/IP协议族(第4版) 第4章 试读

 

  第二部分
网 络 层
4 章 网络层简介
5 章  IPv4 地址
6 章  IP 分组的交付和转发
7 章 网际协议版本 4 IPv4
8 章 地址解析协议( ARP
9 章 网际控制报文协议( ICMP
10 章 移动 IP
11 章 单播路由选择协议( RIP OSPF BGP
12 章 多播和多播路由选择协议
 

 
第4章 网络层简介
 
 
 
 
了解决经由多条链路的交付问题,人们设计了网络层(有时也称为互联网层)。网络层负责主机到主机的交付,并且在分组经过路由器时负责为其选择路由。在本章中,我们将对网络层做简单扼要的介绍,为读者在此之后从第5章到第12章更全面细致地了解网络层做好准备。本章我们将从原理上解释网络层存在的必要性以及因此而带来的种种问题。不过,如果想要深入透彻地解答这些问题,我们还需要此后八章的内容,甚至我们可能需要在读完全书后才能得到令人满意的答案。
目标
本章有以下几个目标:
q简单介绍交换技术,特别是作为网络层数据交付机制的分组交换技术。
q讨论分组交换网提供的两种完全不同类型的服务:无连接服务和面向连接的服务。
q讨论在无连接的分组交换网中,路由器是如何利用分组中的目的地址以及一张路由表来转发分组的。
q讨论在面向连接的分组交换网中,路由器是如何利用分组中的标号以及一张路由表来转发分组的。
q讨论由网络层直接提供的服务,如逻辑地址、源点的交付、各路由器的交付和终点的交付。
q讨论网络层协议没有直接提供,但可以通过某些辅助协议或因特网后追加的协议来提供的某些内容或服务。
从概念上看,我们可以认为全球因特网是一个将全世界数以亿计的计算机连接起来的暗箱网络,此时人们关注的仅仅是有一个报文从一台计算机的应用层到达了另一台计算机的应用层。从这个层面上看可以认为计算机A和B之间的通信如图4.1所示。
但实际上因特网不是一个单一的网络,而是由许许多多网络(或链路)通过连接设备互相连接在一起的。换言之,因特网就是一个互联网,是许多局域网和广域网的组合。为了更好地理解网络层(或者说互联网层)的地位和作用,我们需要考虑的不是概念上的那个因特网,而是由这些局域网和广域网组成的因特网。在这里我们不可能显示出所有这些局域网和广域网,因此我们虚构了一个小型互联网,它只有很少几个网络和连接设备,如图 4.2 所示。
图4.1 视因特网为一个暗箱
图4.2 视因特网为多个局域网和广域网互相连接的组合
在这个模型中,像路由器这样的连接设备担当着交换机的作用。当一个分组从某个端口(接口)到达该路由器后,会通过另一个端口转发到下一部交换机(或终点设备)。换言之,我们称之为交换(switching)的处理过程发生在连接设备上。
根据我们前面的讨论,可以很明显地看出报文在从源点到终点的旅途中要做出许多判决。当一个报文抵达某个连接设备时,必须做出一个判决以选择该分组应当从哪个输出端口发送出去。换言之,连接设备就像交换机那样将一个端口与另一个端口连接起来。
4.2.1 电路交换
有一种交换方式称为电路交换(circuit switching),也就是说在报文传递之前,该报文的源点和终点之间先要建立了一条物理电路(或信道)。在电路已经建立的前提下,报文完整地从源点传送到终点,然后源点就可以通知网络传输已完成,此时网络才能开放所有交换机,并向另一条连接提供链路以及连接设备。电路交换从未在网络层上应用过,它主要用于物理层。
在电路交换中,完整的、没有被分割成分组的报文从源点发送到终点。
例4.1
电路交换网的一个最典型的例子就是早期的电话系统,当呼叫方拨打了被叫方的电话号码后,在呼叫方和被叫方之间就建立了一条通路。当被叫方接听电话后电路建立。此后话音报文就可以在双方之间双向传递,同时所有的连接设备都在维护着这条电路。当呼叫方或者被叫方挂起电话,电路则终止。时至今日,电话网已经不完全是电路交换网了。
4.2.2 分组交换
第二种交换方式称为 分组交换 packet switching )。目前因特网的网络层就是一个分组交换网。在这种类型的网络中,来自上层的报文被分割成便于管理的一个个分组,再通过网络发送这些分组。报文的源点逐个发送分组,而其终点也逐个接收这些分组。等到属于该报文的所有分组都到齐之后,终点才能将报文交付给上层。在分组交换网中,连接设备仍然需要判决如何为这些分组选择路由使之顺利到达终点。目前,分组交换网为分组选择路由的方式有两种:数据报方式和虚电路方式。我们将在下一小节讨论这两种方式。
在分组交换网中,源点在传送之前先要将报文分割成便于管理的分组。这些分组在到达终点后被重新组装。
网络层被设计为一个分组交换网。这就是说,报文要在源点被分割成便于管理的分组,通常称之为数据报(datagram),然后逐个地将这些数据报从源点传送到终点。终点接收到的数据报经过组装后重新生成原始的报文。因特网的分组交换的网络层在最初设计时只提供无连接服务,不过最近的趋势是向面向连接的服务转变。我们首先要讨论一下占主导地位的前者,然后再简单地介绍一下新面孔。
4.3.1 无连接服务
在因特网诞生之初,网络层被设计为提供无连接服务(connectionless service),此时网络层的协议独立地对待每一个分组,每个分组与其他分组之间没有任何关联。一个报文的所有分组可能会,也可能不会沿着相同的路径抵达终点。在因特网创建时之所以会决定让网络层提供无连接服务就是为了简单。主要是想让网络层只负责从源点到终点的分组交付。图4.3描绘了其基本思想。
网络层提供无连接服务时,在因特网中穿梭的每个分组都是一个独立的个体,属于同一个报文的两个分组之间没有任何关联。此类网络中的交换机被称为路由器。属于某个报文的分组之后紧跟着的可能是同一个报文的分组,也可能是另一个报文的分组。一个分组后面跟着的可能是来自相同源点的分组,也可能是来自另一个不同源点的分组。
图4.3 无连接的分组交换网
每个分组在选择路由时都要依据包含在其首部中的信息:源地址和目的地址。目的地址指明了它要到哪去,而源地址则指明了它来自哪里。在这种情况下,路由器仅仅根据其目的地址来为它选择路由。源地址则可用于该报文被丢弃的时候向源点发送差错消息。图4.4描绘了在这种情况下路由器采用的转发过程。在此我们使用了符号地址如A和B。
图4.4 无连接网络中路由器的转发过程
在无连接分组交换网中,转发判决的依据是该分组的目的地址。
无连接网络中的时延
如果我们忽略分组可能会丢失并重传的事实,同时也不计较到了终点可能还需要等待所有分组都被接收的事实,无连接网络中的时延模型如图4.5所示。
图4.5 无连接网络中的时延
4.3.2  面向连接的服务
在面向连接的服务(connection-oriented service)中,属于同一个报文的所有分组之间是有关联的。在一个报文的数据报被发送之前,应当首先建立一条虚连接以指定这些数据报通过的路径。在这种类型的服务中,分组不仅要包含源地址和目的地址,同时还要包含一个流标号(flow label),也就是一个虚电路标识符(virtual circuit identifier),用来指定这些分组应当采取的虚路径。稍后我们将会介绍流标号是如何判定的,不过现在我们假设分组中都携带了这个标号。虽然看起来好像有了流标号,源地址和目的地址就没用了,但是 由于某些原因使得采用了无连接服务的部分因特网网络层仍然需要保留这两个地址。其中一个原因就是该部分的分组路径可能仍然使用无连接的服务。另一个原因是网络层的协议在设计之时就涉及到了这两个地址,并且要改变这一现状可能还需要一段时间。图 4.6 所示为面向连接服务的概念。
图4.6 面向连接的分组交换网
各分组的转发依据是包含在分组中的标号。为了更好地理解面向连接的设计理念,先假设分组在到达路由器时都已携带了一个标号,如图4.7所示。
图4.7 面向连接的网络中路由器的转发过程
在这种情况下,转发判决要依据这个标号(有时也称为虚电路标识符)的值。
要建立面向连接的服务必须经过以下三个阶段的处理过程:建链、数据传送和拆链。在建链阶段,发送方的源地址和接收方的目的地址被用来生成面向连接服务路由表中的一个表项。在拆链阶段,源点和终点通知路由器删除相应的表项。数据传送则发生在这两个阶段之间。
在面向连接的分组交换网络中,转发判决的依据是该分组的标号。
建链阶段
在建链阶段(setup phase),路由器要为一条虚电路创建一个表项。例如,假设源点A需要创建一条到达终点B的虚电路。在发送方和接收方之间需要交换两个辅助分组:请求分组和确认分组。
请求分组 请求分组从源点发往终点。这个辅助分组携带源地址和目的地址。图4.8描绘了这一过程。
图4.8 在虚电路网络中发送请求分组
1.源点A向路由器R1发送一个请求分组。
2.路由器R1接收到这个请求分组。它知道从A来到B去的分组应当通过端口3发送出去。至于路由器是如何得到这个信息的,将在后面的章节中再讨论。在这里假设路由器已经知道了正确的输出端口。路由器在自己的路由表中为这条虚电路创建一个表项,但是在这个表项的四列里,它还只能填写三列。路由器为其设置了入端口(1),并选择一个有效的入标号(14),以及出端口(3)。在现阶段它还不知道出标号是多少,这要等到确认阶段才能知道。接着路由器通过端口3将该分组转发给路由器R3。
3.路由器R3接收到这个建链请求分组。之后发生的情况与在路由器R1中完全一样,R3的路由表中新建了一个表项并填写其中的三列:入端口(1)、入标号(66)和出端口(3)。
4. 路由器 R4 接收到这个建链请求分组。同样,它的路由表中也填写了三列:入端口( 1 )、入标号(22)和出端口(4)。
5.终点B接收到这个建链请求分组,如果它已经准备好接收来自A的分组,那么它就为从A发送来的入分组分配一个标号,在这里是77。这个标号可以让终点分辨出这些分组是来自源点A,而不是来自其他源点。
确认分组   一个称为确认分组的特殊分组用于完成刚才建立的那些表项。图 4.9 描绘了这一过程。
图4.9 在虚电路网络中的建链确认过程
1. 终点向路由器 R4 发送一个确认分组。这个确认分组携带着全局的源地址和目的地址, 有了它们路由器才能知道应当去填写并完成路由表中的哪一个表项。这个分组还携带着标号 77 ,这是终点为来自 A 的分组所选择的入标号。路由器 R4 就用这个标号来填写路由表相应表项的出标号那一列。请注意, 77 在终点 B 上是入标号,而在路由器 R4 上则是出标号。
2.路由器R4向路由器R3发送一个确认分组,其中包含了在它的路由表中相对应的入标号,这个入标号是在建链阶段选定的。路由器R3就用这个标号作为自己路由表中对应的出标号。
3.路由器R3向路由器R1发送一个确认分组,其中包含了在它的路由表中相对应的入标号,这个入标号是在建链阶段选定的。路由器R1就用这个标号作为自己路由表中对应的出标号。
4.最后路由器R1向源点A发送一个确认分组,其中包含了它的路由表中相对应的入标号,这个入标号也是在建链阶段选定的。
5.源点利用确认分组中R1的入标号作为其发往终点B的数据分组的出标号。
数据传送阶段
第二个阶段称为数据传送阶段(data transfer phase)。当所有路由器都为特定的虚电路创建了各自的路由表项之后,属于同一个报文的所有网络层分组就可以一个接一个地发送出去。在图4.10中,我们只描绘了一个分组的流转过程,不过这个过程都是相同的,不管是一个、两个、还是一百个分组。源点计算机利用了标号14,这个标号就是在建链阶段从路由器R1处得到的。路由器R1将这个分组转发到路由器R3,不过它会将这个标号改为66。路由器R3将分组转发到路由器R4,但是这个标号将被改为22。最后,路由器R4将分组交付到它的终点,此时的标号是77。该报文的所有分组都遵照相同的标号序列抵达它们的终点。在终点处,分组是按序到达的。
图4.10 一个分组在已建立的虚电路中的流动过程
拆链阶段
在拆链阶段(teardown phase),源点A在向终点B发送了所有的分组之后就会发送一个称为拆链分组的特殊分组。终点B用一个证实分组来响应。所有的路由器从各自的路由表中将对应的表项删除。
面向连接网络中的时延
如果我们忽略分组可能会丢失并被重传的事实,面向连接网络中的时延模型如图 4.11 所示。
图4.11 面向连接网络中的时延
在本节我们将简单地讨论一下由网络层提供的服务。我们的讨论绝大部分都是围绕目前在因特网上占主导地位的基于无连接的服务。
4.4.1 一个例子
为了更好地理解网络层的服务,我们先来举一个例子。在图 4.12 中,假设在Wonderful Publishing出版公司工作的爱丽丝需要向Just Flowers花店的经理鲍勃发送一条消息,通知他花店的广告册已经印好了,随时可以发货。爱丽丝使用电子邮件来发送这条消息。让我们一起跟随想象中该消息从爱丽丝到鲍勃所经过的路线。Wonderful Publishing出版公司有一个局域网,它通过一个有线广域网连接到称为BestNet的本地ISP。Just Flowers公司也使用了一个局域网,并通过DSL广域网连接到另一个称为ServeNet的本地ISP。这两个本地ISP通过高速SONET广域网连接到一个全国性的ISP。爱丽丝发送给鲍勃的消息可能会被分割为多个网络层的分组。稍后我们就会知道这些分组可能是,也可能不是沿着相同的路径前进。为了便于讨论,我们只跟随一个分组从爱丽丝的计算机来到鲍勃的计算机。同时我们还要假设该分组在到达终点之前途经了路由器R1、R3、R5、R6和R8。两台计算机要涉及到TCP/IP协议族的五层,而路由器只涉及三层。
图4.12 一个想象中的部分因特网
4.4.2 逻辑编址
因为网络层提供了端到端的通信,所以两台想要进行通信的计算机就必须具有全球标识系统,称为网络层地址或逻辑地址。此类标识是通过全球统一的编址机制为网络层提供的。因特网有一个地址空间,每一个要使用因特网的实体都必须从这个地址空间中分配一个唯一的地址。在第5章中将会讨论因特网版本4的这个地址空间。在第26章,将讨论版本6(版本5从未实现过)中新的编址体系。在图4.12中,爱丽丝和鲍勃需要有两个网络层的地址才能互相通信。
4.4.3 源计算机提供的服务
源计算机上的网络层提供四种服务:分组化处理、查找下一跳的逻辑地址、查找下一跳的物理(MAC)地址以及对数据报进行必要的分片处理。图4.13描绘了这些服务。
图4.13 源计算机提供的服务
网络层接收到来自上层的几个信息:数据、数据长度、逻辑目的地址、协议 ID (网络层使用协议的标识号)以及服务类型(稍后再讨论)。网络层对这些信息进行处理后生成了一组数据报片以及下一跳的 MAC 地址,并将它们一起交付给数据链路层。在这里我们只对每种服务进行简单讨论,而本书这一部分的后面几个章节将会更详细地加以解释。
分组化处理
网络层的第一个任务就是要将来自上层的数据封装到一个数据报中。这件事的做法是为数据添加一个首部,其中包含了该分组的逻辑源地址和逻辑目的地址、分片相关的一些信息、请求了此服务的协议的ID、数据长度,再加上其他一些可能的选项。网络层还要包含一个只计算该数据报首部的检验和。我们将在第7章中给出这个数据报的格式以及检验和的计算方法。请注意,上层协议仅提供了逻辑目的地址,而逻辑源地址则来自网络层本身(任何一个主机都要知道它自己的逻辑地址)。
查找下一跳的逻辑地址
准备好的数据报包含了该分组的源地址和目的地址。如前所述,这个数据报可能需要途经多个网络才能到达它的终点。如果目的计算机与源计算机没有连接在同一个网络上,那么数据报就应当交付给下一个路由器。数据报的源地址和目的地址中没有关于下一跳逻辑地址的任何线索。源计算机上的网络层需要咨询路由表并找出下一跳的逻辑地址。
查找下一跳的MAC地址
网络层并不是真的将数据报交付给下一跳,而是应该由数据链路层来负责真正的交付。数据链路层需要下一跳的MAC地址才能向其交付。为了查找下一跳的MAC地址,网络层可以使用另一张表以便将下一跳的逻辑地址映射为MAC地址。不过,根据我们在第8章中讨论的某些理由,这个任务被分配给了另一个称为地址解析协议(ARP)的辅助协议,它可根据给出的逻辑地址找到相应的MAC地址。
分片
到了这一步,数据报可能还是没有准备好交付给数据链路层。在第3章中我们已经知道,大多数局域网和广域网都会对一个帧所携带的数据的最大长度(MTU)加以限制,而网络层所准备的数据有可能会超过这个限制。在被传递到数据链路层之前,数据报需要被分割为更小的单元。分片操作必须要保留数据报首部中的信息。换言之,虽然数据被分片了,首部却需要重复多次。另外在这个首部中还需要增加额外的信息,以指明该数据片在整个数据报中的位置。我们将在第7章中更详细地讨论分片问题。
4.4.4 各路由器提供的服务
如我们前面曾提到的,一个数据报要涉及到路由器上的两个接口:一个入接口和一个出接口。因此路由器上的网络层需要与两个数据链路层打交道:入接口的数据链路层和出接口的数据链路层。网络层负责接收来自入接口数据链路层的数据报,如有必要需对其进行分片处理,然后将这个数据报片交付给出接口的数据链路层。通常路由器不涉及上层(有一些例外情况将在后面的章节讨论)。图 4.14 描绘了一个路由器的网络层提供的服务。
在这里,三个处理过程(查找下一跳的逻辑地址、查找下一跳的MAC地址以及分片)与在源点时提到的后三个处理过程是一样的。不过,在应用这些处理过程之前,路由器首先要通过检验和来检查数据报的有效性(参见第7章)。这里的有效性指的是数据报的首部有没有损坏,且数据报是否被交付给正确的路由器。
图4.14 在各路由器上的处理过程
4.4.5 目的计算机提供的服务
目的计算机上的网络层要简单一些,因为不再需要转发了。但是,目的计算机在向终点交付这些数据之前需要重组数据报片。在检查过数据报片的有效性之后,要从中将数据提取 出来并加以保存。当所有的数据报片都到齐之后,数据重组并交付给上层。与此同时,网络
图4.15 目的计算机上的处理
层还要设置一个重组定时器。如果这个定时器超时,所有的数据报片都会被销毁,并发送一个差错报文,此时所有的数据报片都需要被重新发送。图4.15 描绘了这一过程。请注意,分片处理对上层来说是完全透明的,因为在所有的数据报片都到达并且被重组之前,网络层不会向上层交付任何不完整的数据。一个数据报可能在源计算机上已经分片过了,但还是可以在任一台路由器上再次(多级)分片,所以重组过程是非常精细和复杂的。我们将在第7 章中详细讨论这一过程。
4.5 其他与网络层相关的问题
在本节,我们将简单介绍一些与网络层相关的问题。这是一些通常应当在网络层讨论的服务,但实际上它们在网络层只是部分实现,或者根本没有实现。有些服务是由一些辅助协议来提供的,或者是通过因特网上后来附加的协议实现的。其中的大多数内容在后面的章节中还会看到。
4.5.1 差错控制
差错控制(error control)包括对损坏、丢失以及重复的数据报进行检测的机制。差错控制还包括在检测到错误之后的纠错机制。因特网的网络层不提供真正意义上的差错控制机制。从表面上看网络层好像是不需要差错控制的,因为每个数据报在到达终点之前都要穿过多个网络,而控制这些网络(局域网或广域网)行为的数据链路层已经使用了差错控制机制。换言之,既然在数据链路层已经实施了逐跳的差错控制,为什么网络层还需要差错控制呢?虽然逐跳的差错控制在一定程度上能够起到保护数据报的作用,但是它的保护还不够彻底。图4.16描绘了在数据报途经的某些地方出现的一些差错没有能够检测出来。在路由器处理数据报时出现的差错,数据链路层是无法检测出来的。
图4.16 数据链路层上的差错检测
网络层的设计者们希望让这一层的操作既简单又迅速。他们认为如果确实需要更为严格的差错检测,也可以交给调用了网络层服务的上层协议来完成。网络层之所以忽略差错检测的另一个理由与分片有关。由于数据很可能在某些路由器上被分片,因而使部分网络层的数据可能会被改变。如果我们要使用差错控制,就必须在每个路由器上检测是否有分片。这会使得网络层上的差错检测变得非常低效。
不过,网络层的设计者还是在数据报上增加了一个检验和字段(参见第 7 章),它可以控制在首部中出现的任何损坏,而不是针对整个数据报的。这个检验和可以在两跳之间或从一端到另一端之间防止出现在数据报首部中的任何变动或损坏。例如,它可以防止因目的地址被损坏而将数据报交付到了一个错误的终点。但是,因为在每个路由器上这个首部都可能会有一些变化,所以在源点时需要计算这个检验和,而到了每个路由器上还需要重新计算一遍。
我们还要提到的是,虽然因特网的网络层没有直接提供差错控制,但是因特网使用了另一个协议,ICMP。如果数据报被丢弃或者是首部中含有一些不可知的信息,那么ICMP就会提供某种程度的差错控制。我们将在第9章中详细讨论ICMP。
4.5.2 流量控制
流量控制(flow control)用于调整源点发送的数据量以免接收方超载。如果源计算机的上层应用产生数据的速度比目的计算机上层应用吸收数据的速度快,则接收方就会被这些数据淹没。为了控制数据的流量,接收方需要向发送方发送某些反馈,以通知发送方自己被数据淹没了。
但是因特网的网络层并不直接提供任何流量控制。只要数据报准备好了,发送方就会将它们发送出去,而不会去管接收方是否准备好。
在目前版本的因特网中,网络层不提供任何流量控制。
有以下几个理由可以被用来解释为什么在设计网络层时会缺少流量控制。首先,因为在这一层没有差错控制,接收方网络层的工作非常简单,以致很少会出现超载现象。其次,使用网络层服务的上层协议也可以部署一些缓存,只要网络层的数据准备好了就把它们接收下来,这样处理数据的速度就不一定要和接收数据的速度一样快了。第三,绝大多数使用网络层服务的上层协议都会提供流量控制,因此,如果再加一层流量控制会使网络层变得太复杂,并且会降低整个系统的效率。
4.5.3 拥塞控制
网络层协议的另一个话题是拥塞控制(congestion control)。网络层的拥塞指的是这样一种状态,有过多的数据报出现在了因特网的某一个区域内。如果网络中的源计算机发送数据报的数量超过了网络或者路由器的容量,则有可能发生拥塞现象。在这种情况下,某些路由器可能会丢弃一些数据报。但是,数据报丢弃得越多,情况就可能变得越糟糕,原因在于上层的差错控制机制,发送方可能会重新发送这些被丢弃的分组的副本。如果拥塞持续下去,在某一时刻这种状况将会达到极点,此时系统崩溃,没有任何数据报能被交付。
无连接网络中的拥塞控制
在无连接网络中有多种方法可以控制拥塞的形成。其中一种方案称为信令。反向信令就是在运动方向与拥塞方向相反的数据报中设置一个比特,以通知发送方拥塞正在形成,发送方应当放慢发送分组的速度。在这种情况下,这个比特可以被设置在对一个分组的响应或者确认分组中。如果网络层没有使用反馈(确认),但是上层使用了反馈,那么就可以使用前向信令方式。它是在运动方向与拥塞方向一致的分组中设置一个比特,用于向该分组的接收方发出拥塞警告。然后,接收方就可以通知上层协议,再由上层协议来想办法通知源点。在因特网的网络层中既没有使用前向信令,也没有使用反向信令。
无连接网络的拥塞控制还可以通过一个扼流分组(choke packet)来实现,它是在遇到拥塞时由路由器向发送方发送的一个特殊的分组。事实上这正是因特网的网络层所实施的拥塞控制机制。因特网的网络层使用了一个辅助协议,称为ICMP,我们将在第9章中讨论。当一个路由器拥塞了,它就会向源点发送一个ICMP分组使其放慢速度。
另一种改善拥塞的方法是将分组按其在整个报文中的重要程度划分等级。例如,可以利用分组首部中的一个字段来定义这个数据报的地位是比较重要的,还是不重要的。当一个路由器拥塞并且需要丢弃一些分组时,标记为不重要的分组将被丢弃。例如,如果有一个报文的内容是一张图片,它可能会被分割为多个分组,那么表示图片边边角角的那些分组的重要性就比不过图片中心位置的分组。如果路由器拥塞了,就会丢弃不重要的分组, 同时也不会严重影响整个图片的质量。我们将在第 25 章讨论多媒体通信时再来研究这个问题。
面向连接网络中的拥塞控制
有时候面向连接网络中的拥塞控制要比无连接网络中的拥塞控制更简单。一个最简单的方法就是当某区域发生拥塞后就建立一条额外的虚电路。然而,这样做可能会给某些路由器带来更多的问题。一种更好的解决方法是在建链阶段就进行提前协商。发送方和接收方可以在建立虚电路之时对通信量的级别达成一致意见。这个通信量级别可以由允许建立该虚电路的路由器来指定。换言之,路由器先要检查现有的通信量,并与自己的最大通信相比较,然后才允许建立新的虚电路。
服务质量
随着因特网允许像多媒体通信(特别是音频和视频的实时通信)这样的新应用程序加入进来,通信的服务质量(quality of service,QoS)也变得越来越重要。因特网正全力以赴地提供更好的服务质量以支持此类应用。但是,为了使网络层保持原封不动,对此类应用的支持大多是在上层实现的。由于在使用多媒体通信时会更显得QoS很重要,所以我们将在第25章讨论多媒体时再来研究这个问题。
路由选择
网络层的一个非常重要的话题就是路由选择(routing),也就是路由器如何建立自己的路由表,以便在无连接网络中帮助数据报的转发,或者在面向连接网络的建链阶段,帮助建立一条虚电路。这个任务是由路由选择协议完成的,它帮助主机和路由器建立自己的路由表,并维护和更新这些路由表。这是一些独立的协议,它们有时会使用网络层的服务,而有时则使用某些运输层协议的服务,以助网络层一臂之力。路由选择协议可以划分为两大类:单播的和多播的。我们将用第11章专门讨论单播路由选择,并用第12章来专门讨论多播路由选择。在进入第11章和第12章对这些协议进行讨论之前,我们一直会假设路由器已经建好了它们的路由选择协议。
安全性
另一个与网络层的通信有关的话题是安全性。在最初设计因特网时并没有考虑到安全性问题,因为它只是被高等院校中的少数用户用来进行研究活动的,其他人根本无法访问因特网。网络层在设计时不提供对安全性的支持。但是时至今日,安全性已经成了人们重点关注的问题。为了在无连接的网络层提供安全性,需要用另外一些虚拟层来把无连接的服务转变为面向连接的服务。这个虚拟层称为IPSec,在我们讨论了加密的基本原理和安全性问题(第29章)之后,会在第30章来讨论IPSec。
要更详细地了解本章所讨论的内容,我们推荐以下一些书籍:[Ste 94],[Tan 03],[Com 06],[Gar & Vid 04]以及[Kur & Ros 08]。用方括号括起来的书目可以在本书末尾的参考书目清单中找到。


扼流分组
电路交换
拥塞控制
无连接服务
面向连接服务
数据传送阶段
差错控制
流量控制
分组交换
服务质量(QoS)
路由选择
建链阶段
交换
拆链阶段


q从概念上看,我们可以认为全球因特网是一个暗箱网络。但是因特网并不是单一的网络,它是由许多网络(或者说链路)通过连接设备互相连接在一起形成的。
q在因特网中,像路由器这样的连接设备起到了交换机的作用。人们在组网时通常会使用两种类型的交换方式:电路交换和分组交换。
q网络层被设计为一个分组交换网。分组交换网可以提供无连接的服务或者是面向连接的服务。当网络层提供无连接服务时,每个穿行在因特网中的分组都是一个独立的实体,属于同一个报文的分组之间没有任何联系。在面向连接的服务中,属于同一个报文的所有分组之间存在一条虚连接。
q无连接服务根据分组的目的地址将其转发到下一跳。面向连接的服务根据分组中的标号将其转发到下一跳。
q在面向连接的网络中,通信过程分为三个阶段:建链、数据传送和拆链。在连接建立后,发送方和接收方之间就建立了一条虚电路,属于同一个报文的所有分组都要通过这条虚电路发送。
q我们讨论了在因特网的网络层中已经存在的服务,包括寻址、由源计算机提供的服务、由目的计算机提供的服务以及由各路由器提供的服务。
q我们也讨论了一些与网络层相关的问题,它们是一些通常在讨论网络层时会被讨论的服务,但它们或者只是在网络层部分地实现了,或者就根本没有实现。其中有一些服务,如路由选择和安全性,在因特网上是通过其他协议提供的。
4.9.1 习题
1.试给出无连接服务的优点和缺点。
2.试给出面向连接服务的优点和缺点。
3. 在面向连接的服务中,如果一个标号的长度是 n 位,那么同时可以建立几条虚连接?
4. 假设一台终点计算机正在接收来自多台源计算机的报文。它是如何保证来自某个源的分片不会与来自其他源的分片相混淆?
5. 假设一台终点计算机接收来自一个源点的多个分组。它是如何保证属于某个数据报的分片不会与属于另一个数据报的分片相混淆?
6.你认为为什么图4.7中的分组既要有地址又要有标号?
7.试比较在无连接和面向连接服务中的时延。如果报文比较大,那么哪一种服务产生的时延更小?如果报文比较小,又是哪一种服务产生的时延更小?
8.在图4.13中,为什么分片是最后一项服务?
9.讨论为什么在每个路由器上都需要有分片服务?
10.讨论为什么我们要在最后的终点进行重装,而不是在每个路由器重装?
11.在图4.15中,为什么我们需要设置一个定时器,并在定时器超时后就销毁所有分片?你会用什么样的标准来选择这种定时器的时长?
 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值