赞
踩
与运输层和应用层不同的是,在网络中的每一台主机和路由器中都有一个网络层部分。正因如此,网络层协议是协议栈中最具挑战性的部分。
网络层也是协议栈中最复杂的层次之一,因此我们将在这里涉及大量的知识。我们的学习从网络层的概述和它能够提供的服务开始。我们将仔细考察两种用于构造网络层分组交付的方法,即数据报模式和虚电路模式,并且理解编址在传递分组到目的主机所起的重要作用。
将对网络层的转发( forwarding)功能和路由选择( routing)功能做重要区分。转发涉及分组在单一的路由器中从一条入链路到一条出链路的传送。路由选择涉及一个网络的所有路由器,它们经路由选择协议共同交互,以决定分组从源到目的地结点所采用的路径。
为了加深对分组转发的理解,我们将“进入”路由器内部来观察它的硬件体系结构和组织。接下来我们将观察在因特网中的分组转发,以及令人称颂的网际协议(IP)。研究网络层编址和Pv4的数据报格式。然后探讨网络地址转换(NAT)、数据报分段、因特网控制报文协议(ICMP)和IPv6。
路由选择算法的任务是决定从发送方到接收方的好的路径(等价地为路由)。首先学习路由选择算法的理论,关注两种最为流行的算法类型:链路状态和距离矢量算法。因为路由选择算法的复杂性随着网络路由器数量的增加会有相当大的增长,因此会关注等级制路由选择方法。当
我们涉及因特网的自治系统内部的路由选择协议(RIP、OSPF和IS-IS)和因特网的自治系统之间的路由选择协议(BCP)时,将看到理论是如何付诸实践的。最后讨论播和多播路由选择。
路由器的主要作用是将数据报从入链路转发到出链路
网络层的作用从表面上看极为简单,即将分组从一台发送主机移动到一台接收主机。为此,需要两种重要的网络层功能:
转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。路由选择是指网络范围的过程,以决定分组从源到目的地所采取的端到端路径。
每台路由器具有一张转发表( forwarding table)。路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在该路由器的转发表中索引查询。存储在转发表项中的该首部的值指出了该分组将被转发的路由器的输出链路接口。分组首部中的该值可能是该分组的目的地址或该分组所属连接的指示,这取决于网络层协议。
路由选择算法决定了插入路由器的转发表中的值。路由选择算法可能是集中式的,或是分布式的。在任何一种情况下,都是路由器接收路由选择协议报文,该信息被用于配置其转发表。通过考虑网络中的一种假想情况(不真实的,但技术上是可行的),其中所有的转发表是由人类网络操作员直接配置而在路由器中物理地存在,转发和路由选择功能的区别和不同能被进一步说明。在这种情况下,不需要任何路由选择协议!
当然,该人类操作员将需要彼此交互,以确保该转发表配置得能使分组到达它们想要到达的目的地。也很可能出现下列现象:人工配置更容易出错,并且对于网络拓扑的变化,响应起来比路由选择协议慢。约定术语分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。某些分组交换机称为链路层交换机(link- layer switches),基于链路层字段中的值做转发决定。其他分组交换机称为路由器( router),基于网络层字段中的值做转发决定。因为在本章中关注的是网络层,所以我们使用术语路由器代替分组交换机。当我们谈论虚电路网络中的分组交换机时,我们甚至将使用词汇路由器。
####连接建立
刚才说过网络层有两个重要的功能,转发和路由选择。但我们很快将看到在某些计算机网络中,实际上有第三种重要的网络功能,即连接建立( connection setup)。回想我们学习TCP时,当数据能从发送方流向接收方之前,需要三次握手。这允许发送方和接收方建立所需的状态信息(例如,序号和初始流控制窗口长度)。以类似的方式,某些网络层体系结构如ATM、帧中继、MPLS,要求从源到目的地沿着所选择的路径彼此握手,以便在给定源到目的地连接中的网络层数据分组能够开始流动之前建立起状态。在网络层,该过程被称为连接建立。
网络服务模型( network service model)定义了分组在发送与接收端系统之间的端到端运输特性。
在发送主机中,当运输层向网络层传递一个分组时,能由网络层提供的特定服务包括:
此外,能够为给定的源和目的地之间的分组流提供下列服务:
因特网的网络层提供了单一的服务,称为尽力而为服务(best- effort service)。从下表看,尽力而为服务看起来是根本无服务的一种委婉说法。使用尽力而为服务,分组间的定时是不能确保被保证的,分组接收的顺序也不能保证与发送的顺序一致,传送的分组也不能保证最终交付。给出这样的定义,一个没有向目的地交付分组的网络也符合尽力而为交
付服务的定义。
网络体系结构 | 服务模型 | 带宽保证 | 无丢包保证 | 有序 | 定时 | 拥塞指示 |
---|---|---|---|---|---|---|
因特网 | 尽力而为 | 无 | 无 | 任何可能的顺序 | 不维护 | 无 |
ATM | CBR | 保证恒定速率 | 是 | 有序 | 维护 | 不出现拥塞 |
ATM | ABR | 保证最小速率 | 无 | 有序 | 不维护 | 提供拥塞指示 |
其他的网络体系结构已定义和实现了许多超过因特网的尽力而为服务的服务模型。例如,ATM网络体系结构提供了多重服务模型,意味着可以在相同的网络中为不同的连接提供不同类别的服务。两个最重要的ATM服务模型是恒定比特率和可用比特率服务:
因特网的运输层为每个应用程序在两种服务间提供了选择:UDP,一种无连接服务;或TCP,一种面向连接服务。以类似的方式,网络层也能够在两台主机之间提供无连接服务或连接服务。网络层的连接和无连接服务在许多方面与运输层的面向连接和无连接服务类似。例如,网络层连接服务以源和目的主机间的握手开始;网络层无连接服务则没有任何握手预备步骤。
尽管网络层连接和无连接服务与运输层面向连接和无连接服务有类似之处,但也存在重大差异:
虚电路网络和数据报网络是计算机网络的两种基本类型。在作出转发决定时,它们使用了非常不同的信息。
虽然因特网是一个数据报网络,但许多其他网络体系结构(包括ATM、帧中继的体系结构)却是虚电路网络,因此在网络层使用连接。这些网络层连接被称为虚电路。我们现在考虑在计算机网络中是如何实现虚电路服务的。
一条虚电路的组成如下:
无论何时跨越一台路由器创建一条新的虚电路,转发表就增加了一个新表项。类似地,无论何时终止一条虚电路,沿着该路径每个表中的相应项将被删除。
一个分组沿着其路由在每条链路上不简单地保持相同的VC号的原因:
第一,逐链路代替该号码减少了在分组首部中VC字段的长度。
第二方面更为重要,通过允许沿着该虚电路路径每条链路有一个不同的VC号,大大简化了虚电路的建立。特别是,在具有多个VC号的路径,其上的每条链路能够独立于沿着该路径的其他链路所选的号码选择一个VC号。如果沿着某路径的所有链路要求一个共同的VC号的话,路由器将不得不交换并处理相当大量的报文,以约定一个共同的VC号(例如,个并未由这些路由器的任何其他现有虚电路使用的号码)用于一次连接。
在虛电路网络中,该网络的路由器必须为进行中的连接维持连接状态信息( connection state information)。特别是,每当跨越一台路由器创建一个新连接,必须在该路由器的转发表中增加一个新的连接项;每当释放一个连接,必须从该表中删除该项。值得注意的是,即使没有VC号转换,仍有必要维持连接状态信息,该信息将VC号与输出接口号联系起来。
在虚电路中有3个明显不同的阶段:
在网络层的虚电路建立与运输层的连接建立之间有一个细微但很重要的区别。运输层的连接建立仅涉及两个端系统。在运输层的连接建立期间,两个端系统独自决定运输层连接的参数(如初始序号与流量控制窗口长度)。虽然这两个端系统已经知道该运输层连接,但网络中的路由器则对这些完全不知情。在另一方面,对于一个虚电路网络层,沿两个端系统之间路径上的路由器都要参与虚电路的建立,且每台路由器都完全知道经过它的所有虚电路。
端系统向网络发送指示虚电路启动与终止的报文,以及路由器之间传递的用于建立虚电路(即修改路由器表中的连接状态)的报文,它们被称为信令报文( signaling message),用来交换这些报文的协议常称为信令协议( signaling protocol)。
在数据报网络中,每当一个端系统要发送分组,它就为该分组加上目的端系统的地址,然后将分组推进网络中。如图4-5中所示,无需建立任何虚电路,路由器不维护任何虚电路的状态信息(因为没有虚电路!)。
当分组从源到目的地传输,它通过一系列路由器传递。这些路由器中的每台都使用分组的目的地址来转发该分组。特别是,每台路由器有一个将目的地址映射到链路接口的转发表;当分组到达路由器时,路由器使用该分组的目的地址在转发表中查找适当的输出链路接口。然后路由器有意将分组向该输出链路接口转发。为了进一步深入理解查找操作,我们看一个特定的例子。假定所有的目的地地址均是32比特(这恰好就是在P数据报中目的地址的长度)。转发表的蛮力实现将对每个可能的目的地址有一个表项。因为有超过40亿个可能的地址,这种选择完全是不可能的。
现在假设路由器有4条链路,编号0~3,分组以如下方式转发到链路接口:
目的地址范 | 链路接口 |
---|---|
11001000 00010111 00010000 00000000 | |
到 | 0 |
11001000 00010111 00010111 11111111 | |
11001000 00010111 00011000 00000000 | |
到 | 1 |
11001000 00010111 00011000 11111111 | |
11001000 00010111 00011001 00000000 | |
到 | 2 |
11001000 00010111 00011111 11111111 | |
其他 | 3 |
仅包括4个表项的下列转发表:
前缀匹配 | 链路接口 |
---|---|
11001000 00010111 00010 | 0 |
11001000 00010111 00011000 | 1 |
11001000 00010111 00011 | 2 |
其他 | 3 |
使用这种风格的转发表,路由器用分组的目的地址的前缀( prefix)与该表中的表项进行匹配;如果存在一个匹配项,则路由器向与该匹配项相联系的链路转发分组。例如,
假设分组的目的地址是11001000 00010111 00010110 10100001;因为该地址的21比特前缀匹配该表的第一项,所以路由器向链路接口0转发该分组。如果一个前缀不匹配前3项中的任何一项,则路由器向链路接口3转发该分组。尽管听起来足够简单,但这里还是有重要的微妙之处。注意到一个目的地址可能与不止一个表项相匹配。例如,地址11001000 00010100 01000010 10101010的前24比特与表中的第二项匹配,而该地址的前21比特与表中的第三项匹配。当有多个匹配时,该路由器使用最长前缀匹配规则( longest prefix matching rule);即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。
虽然在数据报网络中的路由器不维持连接状态信息,但它们无论如何在其转发表中维持了转发状态信息。然而,转发状态信息表变化的时间尺度相对要慢。实际上,在数据报网络中的转发表是通过路由选择算法进行修改的,这通常每1~5分钟左右更新一次转发表。在虚电路网络中,无论何时通过路由器建立一条新的连接,或无论何时通过路由器拆除一条现有的连接,路由器中的转发表就被更新。对一台第一层主干路由器而言,这很容易以微秒的时间尺度进行更新。
因为在数据报网络中的转发表能够在任何时刻修改,从一个端系统到另一个端系统发送一系列分组可能在通过网络时走不同的路径,并可能无序到达。
数据报与虚电路网络的演化反映了它们的由来。作为一条重要的组织原则,虚电路的概念来源于电话界,它采用了真正的电路。由于呼叫建立及每呼叫的状态要在网络中的路由器上维持,一个面向虚电路的网络显然比数据报网络要复杂得多。这也与它的电话传统一致。电话网络在网络中必然有其复杂性,因为它们要连接哑端系统设备。
另一方面,因特网作为一种数据报网络,是由将计算机连接在一起的需求发展而来的。由于端系统设备复杂得多,因特网架构师们选择使网络层服务模型尽可能简单。
网络层的转发功能( forwarding function),即实际将分组从一台路由器的入链路传送到适当的出链路。
对路由器的转发功能和路由选择功能加以区分。一台路由器的输入端口、输出端口和交换结构共同实现了这种转发功能,并且总是用硬件实现。这些转发功能有时总称为路由器转发平面( router forwarding plane)。为了理解为何需要硬件实现,考虑具有10Gbps带宽的输入链路和64字节的P数据报,其输人端口在另一个数据报到达前仅有51.2ns来处理数据报。如果N个端口结合在一块线路卡上(因为实践中常常这样做),数据报处理流水线必须以N倍速率运行,这远快过软件实现的速率。转发平面硬件既能够使用厂商自己的硬件设计来实现,也能够使用购买的商用硅芯片来实现。
当转发平面以纳秒时间尺度运行时,路由器的控制功能(即执行路由选择协议、对上线或下线的连接链路进行响应,以及执行管理功能),在毫秒或秒时间尺度上运行。这些路由器控制平面( router control plane)通常用软件实现并在路由选择处理器上执行(通常是一种传统的CPU)。
输入端口的线路端接功能与链路层处理实现了用于各个输入链路的物理层和链路层。在输入端口中执行的查找对于路由器的运行是至关重要的。正是在这个地方,路由器使用转发表来查找输出端口,使得到达的分组将能经过交换结构转发到该输出端口。转发表是由路由选择处理器计算和更新的,但转发表的一份影子副本通常会被存放在每个输入端口。转发表从路由选择处理器经过独立总线(例如一个PCI总线)复制到线路卡。有了影子副本,转发决策能在每个输人端口本地做出,无须调用中央路由选择处理器,因此避免了集中式处理的瓶颈。
假定转发表已经存在,从概念上讲表查找是简单的,即我们只是搜索转发表查找最长前缀匹配,。但在吉比特速率下,这种查找必须在纳秒级执行)。因此,不仅必须要用硬件执行查找,而且需要对大型转发表使用超出简单线性搜索的技术。同时必须对内存访问时间给予特别关注,这导致用嵌入式片上DRAM和更快的SRAM(用作一种DRAM缓存)内存来设计。三态内容可寻址存储器( Tenary Content Address Memory,TCAM)也经常被用于查找。使用一个TCAM,一个32比特IP地址被放入内存,TCAM在基本常数时间内返回对该地址的转发表项的内容。 Cisco8500对每个输入端口有一个64K的CAM。
一旦通过查找确定了某分组的输出端口,则该分组就能够发送进入交换结构。在某些设计中,如果来自其他输入端口的分组当前正在使用该交换结构,一个分组可能会在进入交换结构时被暂时阻塞。因此,一个被阻塞的分组必须要在输入端口处排队,并等待稍后被及时调度以通过交换结构。尽管“査找”在输入端口处理中可以说是最为重要的动作,但必须采取许多其他动作:①必须出现物理层和链路层处理;②必须检查分组的版本号、检验和以及寿命字段,并且重写后两个字段;③必须更新用于网络管理的计数器(如接收到的IP数据报的数目)。
注意到输入端口查找IP地址然后发送该分组进入交换结构(“动作”)的步骤是一种更为一般的“匹配加动作”抽象的特定情况,这种抽象执行在许多网络设备中,而不仅在路由器中。在链路层交换机中,除了发送帧进入交换结构去往输出端口外,还要查找链路层目的地址,并采取几个动作。在防火墙中,首部匹配给定准则(例如源/目的P地址和运输层端口号的某种组合)的入分组可能被阻止转发,而防火墙是一种过滤所选择的入分组的设备。在网络地址转换(NAT)中,一个运输层端口号匹配某给定值的入分组,在转发(动作)前其端口号将被重写。因此,“匹配加动作”抽象不仅作用大,而且在网络设备中无所不在。
交换结构位于一台路由器的核心部位。正是通过这种交换结构,分组才能实际地从
个输入端口交换(即转发)到一个输出端口中。
更为复杂的互联网络使用多级交换元素,以使来自不同输入端口的分组通过交换结构同时朝着相同的输出端口前行。
输出端口处理取出存放在输出端口内存中的分组并将其发送到输出链路上。这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能。
在输入端口和输出端口处都能够形成分组队列。排队的位置和程度(或者在输入端口排队,或者
在输出端口排队)将取决于流量负载、交换结构的相对速率和线路速率。随着这些队列的增长,路由器的缓存空间将最终会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包( packet loss)。在一台路由器的这些队列中,这些分组被实际丢弃或丢失。
假定输入线路速度与输出线路速度是相同的,均为每秒Rline个分组,有N个输入端口和N个输出端口。为进一步简化讨论,假设所有分组具有相同的固定长度,分组以同步的方式到达输入端口。这就是说,在任何链路发送分组的时间等于在任何链路接收分组的时间,在这样的时间间隔内,在一个输入链路上能够到达0个或1个分组。定义交换结构传送速率Rswitch为从输入端口到输出端口能够移动分组的速率。如果Rswitch比Rline快N倍,则在输入端口处仅会出现微不足道的排队。这是因为即使在最坏情况下,所有N条输入线路都在接收分组,并且所有的分组将被转发到相同的输出端口,每批N个分组(每个输入端口一个分组)能够在下一批到达前通过交换结构处理完毕。
在输出端口处,仍然假设Rswitch比Rline快N倍。同样,到达N个输入端口的每个端口的分组都发向相同的输出端口。在这种情况下,在向输出链路发送一个分组的时间内,将有N个分组到达该输出端口。因为输出端口在一个单位时间(分组传输时间)内只能发送一个分组,这N个到达的分组必须排队(等待)传输到输出链路上。于是,又有N个分组可能在它只能发送已排队的N个分组中的一个的时间内到达。这种情况会不断持续下去。最终,排队的分组数量会增长得很快,足以耗尽输出端口的可用内存,在这样的情况下分组被丢弃。
假定需要路由器缓存来吸收流量负载的波动,一个自然而然的问题就是需要多少缓存。对缓存长度的经验方法是RFC 3439,缓存数量(B)应当等于平均往返时延(RTT,比如说250ms)乘以链路的容量©。这个结果是基于相对少量的TCP流的排队动态性分析得到的。因此,一条具有250 ms RTT的10Cbps链路将需要的缓存量等于B=RT・C=2.5Gb。当有大量的TCP流(N)流过一条链路时,缓存所需要的数量是B=RTTC/√N。对于通常有大量流经过的大型主干路由器链路,N的值可能非常大,这使得所需的缓存长度的减小相当明显。
输出端口排队的后果就是,在输出端口上的一个分组调度程序( packet scheduler)必须在这些排队的分组中选出一个来发送。这种选择可能是根据简单的原则来定,如先来先服务(FCFS)调度,或者更复杂的调度规则,如加权公平排队(WFQ)。WFQ规则是在具有排队等待传输的分组的不同端到端连接之间公平地共享输出链路。分组调度程序在提供服务质量保证( quality-of- service guarantee)方面起着关键作用。
如果没有足够的内存来缓存一个入分组,那么必须作出决定:要么丢弃到达的分组(一种称为弃尾(drop-tail) 的策略),要么删除一个或多个已排序的分组来为新到的分组腾出空间。在某些情况下,在缓存填满前便丢弃(或在首部加标记)一个分组以便向发送方提供一个拥塞信号的做法是有利的。已经提出和分析了许多分组丢弃与标记策略,这些策略统称为主动队列管理( Active Queue Management,AQM)算法。随机早期检測( Random Early Detection,RED)算法是一种得到最广泛研究和实现的AQM算法。在RED算法中,为输出队列长度维护着一个加权平均值。如果平均队列长度小于最小阈值minth,则当一个分组到达时,该分组被接纳进队列。相反,如果队列满或平均队列长度大于最大阙值maxth,则当一个分组到达时,该分组被标记或丢弃。最后,如果一个分组到达,发现平均队列长度在[minth,maxth]之间时,则该分组以某种概率被标记或丢弃,该概率一般是平均队列长度、minth和maxth的某种函数。
如果交换结构不能快得(相对于输入线路速度而言)使所有到达分组无时延地通过它传送,则在输入端口也将出现分组排队,因为到达的分组必须加入输入端口队列中,以等待通过交换结构传送到输出端口。为了举例说明这种排队的重要后果,考虑纵横式交换结构,并假定:①所有链路速度相同;②一个分组能够以一条输入链路接收一个分组所用的相同的时间量,从任意一个输入端口传送到给定的输出端口;③分组按FCFS方式,从指定输入队列移动到其要求的输出队列中。只要其输出端口不同,多个分组可以被并行传送。然而,如果位于两个输入队列前端的两个分组是发往同一输出队列的,则其中的一个分组将被阻塞,且必须在输入队列中等待,因为交换结构一次只能传送一个分组到某指定端口。
输入排队交换机中的线路前部阻塞(Head-Or-the-line,HOL),即在一个输入队列中排队的分组必须等待通过交换结构发送(即使输出端口是空闲的),因为它被位于线路前部的另一个分组所阻塞。,由于HOL阻塞,只要输入链路上的分组到达速率达到其容量的58%,在某些假设前提下,输入队列长度将无限制地增大(不严格地讲,这等同于说将出现大量的丢包)。
假设路由选择控制平面全部驻留并运行在路由器中的路由选择处理器上。网络范围的路由选择控制平面因此是分布式的,即不同部分(例如路由选择算法)执行在不同的路由器上并且通过彼此发送控制报文进行交互。实际上,今天因特网路由器的路由选择算法正是以这种方式运行的。此外,路由器和交换机厂商将它们的硬件数据平面和软件控制平面绑在起放入封闭(但可互操作)的平台中,成为一种垂直综合的产品。
数据平面连同部分控制平面(例如,链路状态的本地测量/报告,转发表的安装和维护)在路由器中实现,部分控制平面能够在路由器外部实现(例如,在能够执行路由计算的集中式服务器中实现)。一个定义良好的API规定了这两个部分彼此交互和通信的方式。这些研究人员争辩说将软件控制平面与硬件数据平面(具有最少的路由器驻留控制平面)分离,能够以集中式路由选择计算代替分布式路由选择计算,从而简化路由选择,通过允许不同的用户定制的控制平面在快速的硬件数据平面上运行,能够进行网络创新。
##网际协议:因特网中的转发和编址到目前为止,我们有关网络层编址和转发的讨论并未提及任何特定的计算机网络。在
因特网编址和转发是网际协议(IP)的重要组件。目前有两个版本的P在使用。首先研究广泛
部署的IP协议版本4,这通常简称为IPv4[RFC7911。我们将在本节结尾研究P版本6RFC 2460,RFC4 2911,已经提议用它替代IP4。因特网的网络层有三个主要组件。第一个组件是IP协议。第二个主要组件是路由选择部分,它决定了数据报从源到目的地所流经的路径。网络层的最后一个组件是报告数据报中的差错和对某些网络层信息请求进行响应的设施。因特网的网络层差错和信息报告的协议,即互联网控制报文协议(ICMP)。
版本 | 首部长度 | 服务类型 | 数据包长度(字节) | ||||||||||||||||||||||||||||
16比特标识 | 标志 | 13比特片位移 | |||||||||||||||||||||||||||||
寿命 | 上层协议 | 首部检验和 | |||||||||||||||||||||||||||||
32比特源IP地址 | |||||||||||||||||||||||||||||||
32比特目的IP地址 | |||||||||||||||||||||||||||||||
选项(如果有) | |||||||||||||||||||||||||||||||
数据 |
IP4数据报中的关键字段如下:
注意到一个P数据报有总长为20字节的首部(假设无选项)。如果数据报承载一个TCP报文段,则每个(无分片的)数据报共承载了总长40字节的首部(20字节的IP首部加上20字节的TCP首部)以及应用层报文。
IP数据报分片
并不是所有链路层协议都能承载相同长度的网络层分组。有的协议能承载大数据报,而有的协议只能承载小分组。一个链路层帧能承载的最大数据量叫做最大传送单元( Maximum Transmission Unit,MTU)。因为每个IP数据报封装在链路层帧中从一台路由器传输到下一台路由器,故链路层协议的MTU严格地限制着IP数据报的长度。对IP数据报长度具有严格限制并不是主要问题。问题在于在发送方与目的地路径上的每段链路可能使用不同的链路层协议,且每种协议可能具有不同的MTU。
将较长IP数据报中的数据分片成两个或更多个较小的P数据报,用单独的链路层帧封装这些较小的P
数据报;然后向输出链路上发送这些帧。每个这些较小的数据报都称为片( fragment)。
片在其到达目的地运输层以前需要重新组装。实际上,TCP与UDP都希望从网络层收到完整的未分片的报文。P4的设计者感到在路由器中重新组装数据报会给协议带来相当大的复杂性并且影响路由器性能。为坚持网络内核保持简单的原则,IPv4的设计者决定将数据报的重新组装工作放到端系统中,而不是放到网络路由器中。
当一台目的主机从相同源收到一系列数据报时,它需要确定这些数据报中的某些是否是一些原来较大的数据报的片。如果某些数据报是片的话,则它必须进一步确定何时收到了最后一片,并且如何将这些接收到的片拼接到一起以形成初始的数据报。为了让目的主机执行这些重新组装任务,IPv4的设计者将标识、标志和片偏移字段放在IP数据报首部中。当生成一个数据报时,发送主机在为该数据报设置源和目的地址的同时再贴上标识号。发送主机通常将为它发送的每个数据报的标识号加1。当某路由器需要对一个数据报分片时,形成的每个数据报(即片)具有初始数据报的源地址、目的地址与标识号。当目的地从同一发送主机收到一系列数据报时,它能够检查数据报的标识号以确定哪些数据报实际上是同一较大数据报的片。由于IP是一种不可靠的服务,一个或多个片可能永远到达不了目的地。因为这种原因,为了让目的主机绝对地相信它已收到了初始数据报的最后一个片,最后一个片的标志比特被设为0,而所有其他片的标志比特被设为1。另外,为了让目的主机确定是否丢失了一个片(且能按正确的顺序重新组装片),使用偏移字段指定该片应放在初始IP数据报的哪个位置。
在目的地,数据报的有效载荷仅当在P层已完全重构为初始P数据报时,才被传递给目的地运输层。如果一个或多个片没有到达目的地,则该不完整的数据报被丢弃且不会交给运输层。若在运输层正使用着TCP,则TCP将通过让源以初始数据报来重传数据,以恢复这次丢包。
但是分片也是有开销的。首先,它使路由器和端系统更为复杂。其次,分片能够被用于生成致命的DoS攻击,由此攻击者发送了一系列古怪的、无法预期的片。Jolt2攻击就是一个经典的例子。
###IPv4编址
简述主机与路由器连入网络的方法。一台主机通常只有一条链路连接到网络;当主机中的IP想发送一个数据报时,它就在该链路上发送。主机与物理链路之间的边界叫做接口( interface)。现在考虑一台路由器及其接口。因为路由器的任务是从链路上接收数据报并从某些其他链路转发出去,路由器必须拥有两条或更多条链路与它连接。路由器与它的任意一条链路之间的边界也叫做接口。一台路由器因此有多个接口,每个接口有其链路。因为每台主机与路由器都能发送和接收IP数据报,IP要求每台主机和路由器接口拥有自己的IP地址。因此,一个PI地址技术上是与一个接口相关联的,而不是与包括该接口的主机或路由器相关联的。每个IP地址长度为32比特(等价为4字节),因此总共有232个可能的IP地址。这些地址一般按所谓点分十进制记法( dotted- decimal notation)书写,即地址中的每个字节用它的十进制形式书写,各字节间以句号(点)隔开。例如,考虑IP地址193.32.216.9,193是该地址第一个8比特的十进制等价数,32是该地址第二个8比特的十进制等价数,依次类推。因此,地址193.32.216.9的二进制记法是:
11000001 00100000 11011000 00001001
在全球因特网中的每台主机和路由器上的每个接口,必须有一个全球唯一的P地址(在NAT后面的接口除外)。然而,这些地址不能随意地自由选择。一个接口的IP地址的一部分需要由其连接的子网来决定。
为了确定网络区域,分开主机和路由器的每个接口,从而产生了若干个分离的网络岛,接口端连接了这些独立网络的端点。这些独立的网络岛叫做 子网(subnet)。
IP地址是以网络号和主机号来表示网络上的主机的,只有在一个网络号下的计算机之间才能“直接”互通,不同网络号的计算机要通过 网关 (Gateway)才能互通。但这样的划分在某些情况下显得并不十分灵活。为此IP网络还允许划分成更小的网络,称为 子网(Subnet)。
一个具有多个以太网段和点对点链路的组织将具有多个子网,在给定子网上的所有设备都具有相同的子网地址。原则上,不同的子网能够具有完全不同的子网地址。然而,在实践中,它们的子网地址经常有许多共同之处。
因特网的地址分配策略被称为无类别域间路由选择( Classless Interdomain Routing,CIDR)REC4632。CIDR将子网寻址的概念一般化了。因为对于子网寻址,32比特的IP地址被划分为两部分,并且也具有点分十进制数形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数。
形式为a.b.c.d/x的地址的x最高比特构成了P地址的网络部分,并且经常被称为该地址的前缀( prefix)(或网络前缀)。一个组织通常被分配一块连续的地址,即具有相同前级的一段地址。在这种情况下,该组织内部的设备的P地址将共享共同的前缀。这相当大地减少了在这些路由器中转发表的长度,因为形式为a.b.c.d/x单一表项足以将数据报转发到该组织内的任何目的地。
一个地址的剩余32-x比特可认为是用于区分该组织内部设备的,其中的所有设备具有相同的网络前缀。当该组织内部的路由器转发分组时,才会考虑这些比特。这些较低阶比特可能(或可能不)具有另外的子网结构,如前面所讨论的那样。
例如,a.b.c.d24可能表示该组织内的特定子网。
在CIDR被采用之前,P地址的网络部分被限制为长度为8、16或24比特,这是一种称为分类编址( classful addressing)的编址方案,这是因为具有8、16和24比特子网地址的子网分别被称为A、B和C类网络。一个IP地址的网络部分正好为1、2或3字节的要求,已经在支持数量迅速增加的具有小规模或中等规模子网的组织方面出现了问题。一个C类(/24)子网仅能容纳多达28-2=254台主机,其中的两个地址预留用于特殊用途,这对于许多组织来说太小了。然而一个B类(/16)子网可支持多达65534台主机,又太大了。在分类编址方法下,比方说一个有2000台主机的组织通常被分给个B类(/16)地址。这就导致了B类地址空间的迅速损耗以及所分配的地址空间的利用率低。
获取一块地址
为了获取一块IP地址用于一个组织的子网,某网络管理员也许首先会与他的ISP联系,该ISP可能会从已分给它的更大地址块中提供一些地址。
获取主机地址:动态主机配置协议
某组织一旦获得了一块地址,它就可为本组织内的主机与路由器接口逐个分配IP地址。系统管理员通常手工配置路由器中的P地址(常常在远程通过网络管理工具进行配置)。主机地址也能手动配置,但是这项任务目前通常更多的是使用动态主机配置协议( Dynamic Host Configuration,DHCP)RFC2131来完成。DHCP允许主机自动获取一个IP地址。网络管理员能够配置DHCP,以使某给定主机每次与网络连接时能得到一个相同的IP地址,或者某主机将被分配一个临时的IP地址( temporary IP address),该地址在每次与网络连接时也许是不同的。除了主机P地址分配外,DHCP还允许一台主机得知其他信息,例如它的子网掩码、它的第一跳路由器地址(常称为默认网关)与它的本地DNS服务器的地址
由于DHCP具有能将主机连接进一个网络的网络相关方面的自动能力,故它又常被称为 即插即用协议(plug-and- play protocol)。DHCP还广泛地使用于住宅因特网接入网与无线局域网中,其中的主机频繁地加入和离开网络。当主机加入或离开时,DHCP服务器要更新其可用的IP地址表。每当一台主机加入时,DHCP服务器从其当前可用的地址池中分配一个任意的地址给它;每当一台主机离开时,其地址便被收回这个池中。DHCP是一个客户ー服务器协议。客户通常是新达到的主机,它要获得包括自身使用的IP地址在内的网络配置信息。在最简单场合下,每个子网将具有一台DHCP服务器。如果在某子网中没有服务器,则需要一个DHCP中继代理,这个代理知道用于该网络的DHCP服务器的地址。
对于一台新到达的主机而言,DHCP是一个4个步骤的过程:
一旦客户收到 DHCP ACK后,交互便完成了,并且该客户能够在租用期内使用DHCP分配的P地址。因为客户可能在该租用期超时后还希望使用这个地址,所以DHCP还提供了一种机制以允许客户更新它对一个P地址的租用。从移动性角度看,DHCP确实有不足之处。因为每当结点连到一个新子网时,要从DHCP得到一个新的P地址,当一个移动结点在子网之间移动时,就不能维持与远程应用之间的TCP连接。
网络地址转换
每个IP使能的设备都需要一个P地址。随着子网的大量出现,这看起来意味着每当一个SOHO想安装一个LAN以互联多台机器时,需要ISP分配一组地址以供该SOHO的所有机器使用。如果该子网变大了,则需要分配块较大的地址。但如果ISP已经为SOHO网络当前地址范围分配过一块连续地址该怎么办呢?有一种简单的方法: 网络地址转换 (Network Address Translation, NAT) RFC 2663 , RFC 3022。 NAT 百度百科,NAT 维基百科
UPnP
NAT穿越正越来越多地由通用即插即用(UPnP)提供,UPnP是一种允许主机发现并配置邻近NAT的协议。UPnP要求主机和NAT都是UPnP兼容的。使用UPnP,在主机上运行的应用程序能够为某些请求的公共端口号请求一个NAT映射,该映射位于其(专用IP地址,专用端ロ号)和(公共IP地址,公共端ロ号)之间。如果某NAT接受该请求并生成映射,则来自外部的结点能够发起到(公共P地址,公共端口号)的TCP连接。此外,UPnP让该应用程序知道(公共P地址,公共端口号),因此该应用程序能够向外部世界通告它。
UPnP允许外部主机使用TCP或UDP向NAT化的主机发起通信会话。长期以来NAT一直对P2P应用程序十分不利;UPnP由于提供了有效和健壮的NAT穿越解决方案,可能成为了P2P应用程序的救世主。
CMP由RFC792定义,被主机和路由器用来彼此沟通网络层的信息。ICMP最典型的用途是差错报告。例如,当运行一个Telnet、FTP或HTTP会话时,你也许会遇到些诸如“目的网络不可达”之类的错误报文。这种报文就是在ICMP中产生的。在某个位
置,IP路由器不能找到一条路径,以通往Telnet、FTP或HTTP应用所指定的主机。该路由器就会向你的主机创建和发出一个类型3的ICMP报文以指示该错误。ICMP通常被认为是IP的一部分,但从体系结构上讲它是位于IP之上的,因为ICMP报文是承载在IP分组中的。这就是说,ICMP报文是作为IP有效载荷承载的,就像TCP与UDP报文段作为IP有效载荷被承载那样。类似地,当一台主机收到一个指明上层协议为ICMP的P数据报时,它分解出该数据报的内容给ICMP,就像分解出一个数据报的内
容给TCP或UDP一样。
ICMP报文有一个类型字段和一个编码字段,并且包含引起该ICMP报文首次生成的IP数据报的首部和前8字节内容(以便发送方能确定引发该差错的数据报)。在下表中显示了所选的ICMP报文类型。注意到ICMP报文并不仅是用于通知差错情况。
ICMP类型 | 编码 | 描述 |
---|---|---|
0 | 0 | 回显回答(对ping回答) |
3 | 0 | 目的网络不可达 |
3 | 1 | 目的主机不可达 |
3 | 2 | 目的协议不可达 |
3 | 3 | 目的端口不可达 |
3 | 6 | 目的网络未知 |
3 | 7 | 目的主机未知 |
4 | 0 | 源抑制(拥塞控制) |
8 | 0 | 回显请求 |
9 | 0 | 路由器通告 |
10 | 0 | 路由器发现 |
11 | 0 | TTL过期 |
12 | 0 | IP首部损坏 |
ping程序发送一个ICMP类型8编码0的报文到指定主机。看到该回显(echo)请求,目的主机发回一个类型0编码0的ICMP回显回答。大多数TCP/IP实现直接在操作系统中支持ping服务器,即该服务器不是一个进程。注意客户程序需要能够指示操作系统产生一个类型8编码0的1CMP报文。
另一个有趣的ICMP报文是源抑制报文。这种报文在实践中很少使用。其最初目的是执行拥塞控制,即使得拥塞的路由器向一台主机发送一个ICMP源抑制报文,以强制该主机减小其发送速率。TCP有自己在运输层操作的拥塞控制机制,不需要利用网络层中的反馈信息(如ICMP源抑制报文)。
版本 | 流量类型 | 流标签 | |||||||||||||||||||||||||||||
有效载荷长度 | 下一个首部 | 跳限制 | |||||||||||||||||||||||||||||
128比特源IP地址 | |||||||||||||||||||||||||||||||
128比特目的IP地址 | |||||||||||||||||||||||||||||||
数据 |
以下是IPv6中定义的字段:
注意到,在IPv4数据报中出现的几个字段在IP6数据报中已不复存在:
IP结点使用ICMP协议来报告差错情况,并向端系统提供有限的信息。RFC 4443中定义了一种用于IPv6的新版ICMP。除了能识别现存的ICMP类型和编码定义外,由于IPv6新增功能的需要,ICMPv6还增加了新的类型和编码。其中包括“分组太大”类型与“未识别的IPv6选项”错误编码。另外,ICMP6还包含了因特网组管理协议(IGMP)。IGMP用于管理主机加入和离开多播组,它在IP4中曾是一个与ICMP分开的独立协议。
引入IP6使能结点的最直接方式可能是一种双栈(dual- stack)方法,即使用该方法的IPv6结点还具有完整的IPv4实现。这样的结点在RFC 4213中被称为IP6/IPv4结点,它有发送和接收IPv4与IPv6两种数据报的能力。
RFC4213中还讨论了另一种双栈方法,叫做建隧道( tunneling)。隧道依据的基本思想如下:假定两个IP6结点()要使用IP6数据报进行交互,但它们是经由中间IP4路由器互联的。将两台IP6路由器之间的中间IP4路由器的集合称为一个隧道( tunnel),借助于隧道,在隧道发送端的IP6结点可将整个OP6数据报放到一个IP4数据报的数据(有效载荷)字段中。于是,该IPv4数据报的地址设为指向隧道接收端的IPv6结点,再发送给隧道中的第一个结点。隧道中的中间IP4路由器在它们之间为该数据报提供路由,就像对待其他数据报一样,完全不知道该IP4数据报自身就含有一个完整的IPv6数据报。隧道接收端的IPv6结点最终收到该IPv4数据报(它是该IPv4数据报的目的地!),并确定该IPv4数据报含有一个IPv6数据报,于是从中取出IP6数据报,然后再为该IPv6数据报提供路由,就好像它是从一个直接相连的IP6邻居那里接收到该IP6数据的一样。
百度百科:IPsec
维基百科:IPsec
由 Ipsec会话提供的服务包括:
密码技术约定。这种机制允许两台通信的主机对加密算法和密钥达成一致。
IP数据报有效载荷的加密。当发送主机从运输层接收到一个报文段时, Ipsec加密该有效载荷。该有效载荷仅能由在接收主机中的IPec解密。
数据完整性。 Ipsec允许接收主机验证数据报的首部字段,保证被加密的有效载荷在其数据报从源到目的地的路由器中传输时没有被修改过。
初始鉴别。当一台主机从某受信任的源(具有一个受信任的密钥)接收到一个Psec数据报时,该主机确信在数据报中的源IP地址是该数据报的实际源。
##路由选择算法
不管网络层提供的是数据报服务(在此情况下,在给定源和目的地址之间的不同分组可能采用不同的路由),还是虚电路服务(在此情况下,在给定源和目的地址之间的所有分组将采用相同路径),网络层都必须为从发送方到接收方的分组确定所采用的路径。将看到路由选择的工作是:确定从发送方到接收方通过路由器网络的好路径(等价为路由)。主机通常直接与一台路由器相连接,该路由器即为该主机的默认路由器( default router),又称为该主机的第一跳路由器(irst- hop router)。每当主机发送一个分组时,该分组被传送给它的默认路由器。我们将源主机的默认路由器称作 源路由器( source router),把目的主机的默认路由器称作 目的路由器( destination router)。一个分组从源主机到目的主机的路由选择问题显然可归结为从源路由器到目的路由器的路由选择问题。这是本节的重点。
因此,路由选择算法的目的是简单的:给定一组路由器以及连接路由器的链路,路由选择算法要找到一条从源路由器到目的路由器的“好”路径。通常,一条好路径指具有最低费用的路径。然而我们将看到,实践中现实世界还关心诸如策略之类的问题,这也使得概念简单、性能优秀的算法变得复杂。然而这些概念简单、性能优秀的算法的理论莫定了当今网络路由选择实践的基础。
全局式路由选择算法( global routing algorithm)用完整的、全局性的网络知识计算出从源到目的地之间的最低费用路径。也就是说,该算法以所有结点之间的连通性及所有链路的费用为输入。这就要求该算法在真正开始计算以前,要以某种方式获得这些信息。计算本身可在某个场点(集中式全局路由选择算法)进行,或可在多个场点重复进行。然而这里的主要区别在于,全局式算法具有关于连通性和链路费用方面的完整信息。实践中,具有全局状态信息的算法常被称作链路状态算法( Link State,IS),因为该算法必须知道网络中每条链路的费用。
分散式路由选择算法( decentralized routing algorithm)以迭代、分布式的方式计算出最低费用路径。没有结点拥有关于所有网络链路费用的完整信息,而每个结点仅有与其直接相连链路的费用知识即可开始工作。然后,通过迭代计算过程并与相邻结点(即与该结点相连链路的另一端的结点)交换信息,一个结点逐渐计算出到达某目的结点或一组目的结点的最低费用路径。
路由选择算法的第二种广义分类方式是根据算法是静态的还是动态的进行分类。在静态路由选择算法( static routing algorithm)中,随着时间的流逝,路由的变化是非常缓慢的,通常是人工干预进行调整(如人为手工编辑一台路由器的转发表)。动态路由选择算法( dynamic routing algorithm)能够当网络流量负载或拓扑发生变化时改变路由选择路径。一个动态算法可周期性地运行或直接响应拓扑或链路费用的变化而运行。虽然动态算法易于对网络的变化做出反应,但也更容易受诸如路由选择循环、路由振荡之类问题的影响。
路由选择算法的第三种分类方式是根据它是负载敏感的还是负载迟钝的进行划分。在 负载敏感算法(load- sensitive algorithm)中,链路费用会动态地变化以反映出底层链路的当前拥塞水平。如果当前拥塞的一条链路与高费用相联系,则路由选择算法趋向于绕开该拥塞链路来选择路由。而早期的ARPAnet路由选择算法就是负载敏感的,所以遇到了许多难题。当今的因特网路由选择算法(如RIP、OSPF和BGP)都是负载迟钝的(load- Insensitive),因为某条链路的费用不明显地反映其当前(或最近)的拥塞水平。
在链路状态算法中,网络拓扑和所有的链路费用都是已知的,也就是说可用作LS算法的输入。实践中这是通过让每个结点向网络中所有其他结点广播链路状态分组来完成的,其中每个链路状态分组包含它所连接的链路的特征和费用。在实践中,这经常由链路状态广播( link statebroadcast)算法来完成。结点广播结果是所有结点具有了该网络的等同的、完整的视图。于是每个结点都能够像其他结点样,运行IS算法并计算出相同的最低费用路径集合。
Dijkstra算法。一个密切相关的算法是Pim算法。Dik-stra算法计算从某结点(源结点,我们称之为u)到网络中所有其他结点的最低费用路径。Dijkstra算法是迭代算法,其性质是经算法的第k次迭代后,可知道到k个目的结点的最低费用路径,在到所有目的结点的最低费用路径之中,这k条路径具有k个最低费用。
百度百科:链路状态路由算法
维基百科:Link-state routing protocol
距离向量( Distance- Vector,DV)算法是一种送代的、异步的和分布式的算法,而LS算法是一种使用全局信息的算法。说它是分布式的,是因为每个结点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将其计算结果分发给邻居。说它是选代的,是因为此过程一直要持续到邻居之间无更多信息要交换为止。(有趣的是,此算法是自我终止的,即没有计算应该停止的信号,它就停止了。)说它是异步的,是因为它不要求所有结点相互之间步伐一致地操作。
LS算法是一种全局算法,在于它要求每个结点在运行 Dijkstra算法之前,首先获得该网络的完整信息。DV算法是分布式的,它不使用这样的全局信息。实际上,结点具有的唯一信息是它到直接相连邻居的链路费用和它从这些邻居接收到的信息。每个结点等待来自任何邻居的更新,当接收到一个更新时计算它的新距离向量并向它的邻居分布其新距离向量。
百度百科:距离向量路由协议
百度百科:距离向量路由算法
百度百科:距离向量路由选择协议
在LS和DV算法的研究中,将网络只看作一个互联路由器的集合。从所有路由器执行相同的路由选择算法以计算穿越整个网络的路由选择路径的意义上来说,一台路由器很难同另一台路由器区别开来。在实践中,该模型和这种一组执行同样路由选择算法的同质路由器集合的观点有一点简单化,因为至少有以下两个重要原因:
这两个问题都可以通过将路由器组织进 自治系统( Autonomous Systen,AS)来解决,每个AS由一组通常处在相同管理控制下的路由器组成(例如,由相同的ISP运营或属于相同的公司网络)。在相同的AS中的路由器都全部运行同样的路由选择算法(如一种LS或DV算法),且拥有彼此的信息,这就像在前一节中所讲的理想化模型中的情况一样。在一个自治系统内运行的路由选择算法叫做 自治系统内部路由选择协议( Intra- autonomoussystem routing protocol)。当然,将AS彼此互联是必需的,因此在一个AS内的一台或多台路由器将有另外的任务,即负责向在本AS之外的目的地转发分组。这些路由器被称为 网关路由器( gateway router)。
AS内部路由选择协议用于确定在一个AS内执行路由选择的方式。AS内部路由选择协议又称为内部 网关协议( interior gateway protocol)。历史上有两个路由选择协议曾被广泛用于因特网上自治系统内的路由选择: 路由选择信息协议( Routing Information Protocol,RIP)与 开放最短路优先( Open Shortest Path First,OSPF)。与OSPF密切相关的路由选择协议是IS-IS协议RFC1142。我们首先讨论RIP,然后考虑OSPF。RIP是最早的AS内部因特网路由选择协议之一,且目前仍在广泛使用。它的产生与命名源于 Xerox网络系统(XNS)体系结构。在RFC1058中定义了RP版本1,在RFC2453中定义了其向后兼容的版本2。
相邻路由器之间相互交换路由选择信息。任何一台路由器的距离向量是从这台路由器到该AS中子网的最短路径距离的当前估计值。在RP中,路由选择更新信息在邻居之间通过使用一种RIP响应报文( RIP response message)来交换,大约每30秒相互交換一次。由一台路由器或主机发出的响应报文包含了一个该AS内的多达25个目的子网的列表,以及发送方到其中每个子网的距离。响应报文又被称作RHIP通告( RIP advertisement)。
每台路由器维护一张称为路由选择表(routing table)的RIP表。一台路由器的路由选择表包括该路由器的距离向量和该路由器的转发表。
###因特网中自制系统内部的路由选择:OSPF
就像RP一样,OSPF路由选择也被广泛用于因特网的AS内部路由选择。 OSPF 2和它的关系密切的表兄弟1S-IS通常都设置在上层的ISP中,而RIP却被设置在下层ISP和企业网中。OSPF中的开放(Open)一词是指路由选择协议规范是公众可用的(与之相反的是如isco的 EIGRP协议)。OSPF的最新版本是版本2,由RFC 2328这个公用文档所定义。
OSPF被设想为是RIP的后继者,因为它有许多先进特性。然而,OSPF的核心就是一个使用洪泛链路状态信息的链路状态协议和一个 Dijkstra最低费用路径算法。使用OSPF,一台路由器构建了一幅关于整个自治系统的完整拓扑图(即一个图)。于是,路由器在本地运行 Dijkstra的最短路径算法,以确定一个以自身为根结点的到所有子网的最短路径树。
各条链路费用是由网络管理员配置的。管理员也许会选择将所有链路费用设为1,因而实现了最少跳数路由选择,或者可能会选择将链路权值按与链路容量成反比来设置,从而不鼓励流量使用低带宽链路。OSPF不强制使用如何设置链路权值的策略(那是网络管理员的任务),但提供了一种机制(协议),为给定链路权值集合确定最低费用路径路由选择。
使用OSPF时,路由器向自治系统内所有其他路由器广播路由选择信息,而不仅仅是向其相邻路由器广播。每当一条链路的状态发生变化时(如费用的变化或连接/中断状态的变化),路由器就会广播链路状态信息。即使链路状态未发生变化,它也要周期性地(至少每隔30分钟一次)广播链路状态。RFC2328中有这样的说明:“链路状态通告的这种周期性的更新增加了链路状态算法的健壮性。”OSPF通告包含在OSPF报文中,该OSPF报文直接由P承载,对OSPF其上层协议的值为89。因此OSPF协议必须自己实现诸如可靠报文传输、链路状态广播等功能。OSPF协议还要检查链路正在运行(通过向相连的邻居发送 HELLO报文),并允许OSPF路由器获得相邻路由器的网络范围链路状态的数据库。
OSPF的优点包括下列几方面:
一个OSPF自治系统可以配置成多个区域。每个区域都运行自己的OSPF链路状态路由选择算法,一个区域内的每台路由器都向该区域内的所有其他路由器广播其链路状态。在一个区域内,一台或多台区域边界路由器( area border router)负责为流向该区域以外的分组提供路由选择。最后,在AS内只有一个OSPF区域配置成主干( backbone)区域。主干区域的主要作用是为AS内其他区域之间的流量提供路由选择。该主干总是包含了AS内的所有区域边界路由器,并且可能还包含了一些非边界路由器。在AS内的区域间的路由选择要求分组首先路由到一个区域边界路由器(区域内路由选择),再通过主干路由到位于目的区域的区域边界路由器,然后再路由到最终目的地。
###自治系统间的路由选择BGP
跨越多个AS的源和目的对之间是如何确定路径的。由 RFC 4271 ( 亦可参见RFC4274 )
定义的边界网关协议( Broder Gateway Protocol,BCP)版本4是当今因特网中域间路由选择协议事实上的标准。它通常被称为BGP4或简称为BGP。作为一个自治系统间路由选择协议,BGP为每个AS提供了进行以
下工作的手段:
更为重要的是,BGP使得每个子网向因特网的其余部分通告它的存,并且BCP确保在因特网中的所有AS知道该子网以及如何到达那里。如果没有BGP的话,每个子网将是隔离的,即它们孤独并且不为因特网其余部分所知。
在BGP中,路由器对通过使用179端口的半永久TCP连接来交换路由选择信息。对于每条直接连接位于两个不同的AS中的路由器的链路而言,通常有一条这样的 BGP TCP连接。在一个AS中的路由器之间还有许多半永久 BGP TCP连接。对于每条TCP连接,位于该连接端点的两台路由器称为BGP对等方(BGPpeers),沿着该连接发送所有BCP报文的TCP连接称为 BGP会话( BGP session)。此外,跨越两个AS的BGP会话称为 外部BGP(eBGP)会话( external BGP session),在同一个AS中的两台路由器之间的BGP会话称为 内部BGP(iBGP)会话( internal BGP session)。
BGP使得每个AS知道经过其相邻AS可达哪些目的地。在BGP中,目的地不是主机而是CDIR化的 前缀( prefix),每个前缀表示一个子网或一个子网的集合。
在BCP中,一个自治系统由其全局唯一的 自治系统号( Autonomous System Number,ASN)RFC1930所标识。(从技术上讲,并非每个AS都有一个ASN。特殊是有一种所谓 桩(stub)AS通常就没有ASN,这种桩AS仅承载源地址或目的地址为本AS的流量。)就像P地址一样,AS号由 ICANN地区注册机构分配。
当一台路由器通过BGP会话通告一个前缀时,它在前缀中包括一些 BGP属性(BGPattribute)。用BGP术语来说,带有属性的前缀被称为一条 路由( route)。因此,BGP对等方彼此通告路由。两个较为重要的属性是AS-PATH和NEXT-HOP。
当一台网关路由器接收到一台路由器通告时,它使用其 输入策略( Importpolicy)来决定是否接收或过滤该路由,是否设置某种属性,如路由器偏好测度。输人策略可能过滤掉一条路由,因为该AS可能不希望通过在该路由的AS-PATH中的某个AS发送流量。网关路由器也可能过滤一条路由,因为它已经知道了一条到相同前缀的偏好路由。
BCP使用eBGP和iBGP向在AS中的所有路由器发布路由。根据这种发布,路由器可能知道到达任何一条前缀的多条路由,在这种情况下路由器必须在可能的路由中选择一条。进入这个路由选择进程的输入是被路由器知道并接受的所有路由的集合。如果对相同前缀存在两条或多条路由,则BGP顺序地调用下列消除规则,直到留下一条路由。
在广播路由选择( broadcast routing)中,网络层提供了从一种源结点到网络中的所有其他结点交付分组的服务;多播路由选择( multicast routing)使单个源结点能够向其他网络结点的一个子集发送分组的副本。
也许完成广播通信的最直接的方式是由发送结点向每个目的地分别发送分组的副本,在给定N个目的结点的情况下,源结点只是产生该分组的N份副本,对不同目的地的每个副本进行编址,并用单播路由选择向N个目的地传输这N份副本。这种用 N次单播(N-way- unicast)实现广播的方法简单,无需新的网络层路由选择协议以及分组复制或转发功能。
多播( multicast)服务。使用这种服务,多播分组仅被交付给网络结点的一个子集。一些新兴的网络应用要求将分组从一个或多个发送方交付给一组接收方。
在单播通信情况下,接收方(目的地)的IP地址承载在每个IP单播数据报中并标识了单个接收方:在广播的情况下,所有结点需要接收广播分组,因此不需要目的地址。但在多播情况下,面对多个接收方。每个多播分组都携带所有接收方的IP地址。虽然这种方法对于少量的接收方可能是行得通的,但它不能很好地扩展到数以百计或数以千计的接收方场合;在数据报中编址信息的量将充斥该分组中有效载荷字段中实际可携带的数据量。还需要由发送方给出接收方的明确标识,使得发送方知道所有接收方的标识与地址。
由于这些原因,在因特网体系结构(还有其他体系结构如ATM中,多播数据报使用间接地址( address indirection)来编址。这就是说,用一个标识来表示一组接收方,寻址到该组的分组副本被交付给所有与该组相关联的多播接收方,且该组使用这个单一标识符。在因特网中,这种表示一组接收方的单一标识就是一个D类多播地址。与一个D类地址相关联的接收方小组被称为一个 多播组( multicast group)。
虽然多播组抽象是简单的,但它给人们(主机)(故意使用了双关语,英语中host有主机或主人之意)带来了一堆问题。一个组是如何形成,又如何终结的呢?如何选择组地址?新主机如何加入某个组(要么作为发送方,要么作为接收方)?任何主机都能加入个组(向该组发送或从该组接收)或者组成员资格会受到限制吗?如果有限制,由谁限制?作为网络层协议的一部分,一个组成员知道其他组成员的标识吗?网络结点相互之间如何进行交互,以向所有组成员交付一个多播数据报呢?对于因特网,所有这些问题的答案都与因特网组管理协议(IGMP)RFC3376有关。
因特网组管理协议
IGMP版本3[RFC3376]运行在一台主机与其直接相连的路由器之间。IGMP为一台主机提供了手段,让它通知与其相连的路由器:在本主机上运行的一个应用程序想加入一个特定的多播组。由于IGMP的交互范围被局限在主机与其相连的路由器之间,显然需要另一种协议来协调遍及因特网内的多播路由器(包括相连的路由器),以便多播数据报能路由到其最终目的地。后一个功能是由网络层多播路由选择算法完成的。因此因特网中的网络层多播是由两个互补的组件组成的:IGMP与多播路由选择协议。
IGMP只有三种报文类型。与ICMP类似,IGMP报文也是承载(封装)在一个IP数据报中,使用的P协议号为2。由一台路由器向所有与主机(如局域网上的所有主机)相连的接口(例如在一个局域网上对所有主机)发送一个 membership_ query报文,以确定该接口上主机已加入的所有多播组集合。主机用一个 membership_ report报文来响应 membership_ query报文。当一个应用程序首次加入ー个多播组时,也可由主机产生 membershipreport报文,而不用等待来自路由器的 membership_ query报文。最后一种ICMP报文类型是eave_grup报文。这种报文是可选的,一台路由器如何检测出一台主机是何时离开该多播组的呢?问题的答案就在于使用了 membership_ query报文:当无主机响应一个具有给定组地址的 membership_ query报文时,该路由器就推断出已没有主机在这个多播组了。这是因特网协议中有时被称为软状态( soft state)机制的一个例子。在一个软状态协议中,状态(在IGMP场合中,有主机加入某给定多播组的事实)如果未被显式地更新,则通过超时事件被删除。Clak描述了由某个端系统发送的周期性状态更新报文的概念,并且建议使用这样的更新报文,状态能够在一次崩溃中丢失,接着自动地由后继的更新报文所恢复,即对该端系统来说所有都是透明的,并且不必调用任何显式的崩溃恢复过程。
多播路由选择算法
在实践中,采用两种方法来确定多播路由选择树。这两种方法的区别在于:是用单一的组共享
树来为组中的所有发送方分发流量,还是为每个独立的发送方构建一棵特定源的路由选择树。
在因特网中的多播路由选择
第一个用于因特网中的多播路由选择协议是 距离向量多播路由选择协议( Distance
Vector Multicast Routing Protocol, DVMRP) RFC 1075。 DVMRP实现了具有反向路径转发与剪枝算法的基于源的树。 DVMRP使用一种前面描述的具有剪枝的RP算法。也许使用最为广泛的因特网多播路由选择协议是 协议无关的多播( Protocol Independent Multicast,PM) 路由选择协议,该协议明确辦识两种多播分发情形。在稠密模式( dense mode)RFC 3973中,多播组的成员位置分布稠密;这就是说,在该区域内的许多或大多数路由器需要参与到多播数据报路由选择过程之中。PIM稠密模式是一种洪泛与剪枝反向路径转发技术,类似于 DVMRP的思想。
在稀疏模式( sparse mode)RFC 4601中,具有相连组成员的路由器数量相对于路由器总数来说很少,组成员极为分散。PM稀疏模式使用聚集点来建立多播分发树。在 源特定多播( Source-specific Multicast,SSM)RFC 3569,RFC 4607中,仅允许单一发送
方向多播树中发送流量,大大简化了树的构造和维护。当PIM和 DVMRP用于一个域中时,网络操作者能够配置该域中的P多播路由器,配置的方法与在域内配置单播路由选择协议如RIP、IS-1S和OSPF的方法非常类似。与域间BCP等价的多播协议:RFC 4271定义了对BGP的多协议扩展,使得BGP能够为其他协议承载路由选择信息,包括多播信息。使用多播源发现协议( MulticastSource Discovery Protocol,MSDP)RFC3618,RFC4611能够将不同的PM稀疏模式域中的聚集点连接在一起。有关因特网中多播路由选择的当前状态的极好概述见RFC 5110。
网络层涉及网络中的每台主机与路由器。
路由器可能需要在同一时刻处理不同源和目的对之间的数以百万计的分组流。为了使得一台路由器能够处理如此大量的流,网络设计者多年前就认识到,路由器的任务应当尽可能地简单。为了使路由器的工作更容易,能够采取许多措施,包括使用数据报网络层而不使用虚电路网络层,使用一种流水线和固定长度的首部(如在IPv6中所做的那样),取消分片(也如IPv6中所做的那样)和提供唯一的尽力而为服务。也许这里最重要的技巧是:不要跟踪各个流,而是使路由选择决策只依赖于数据报中的层次结构化的目的地址。
路由选择算法如何把计算机网络抽象为一个具有结点和链路的图。有了这种抽象,能够利用图中丰富的最短路径路由选择理论。
两大类方法:一种是集中式(全局)方法,在这种方法中,每个结点得到网络的张完整的图并且独立地应用一种最短路径路由选择算法;另一种是分布式方法,在这种方法中,各结点只有整个网络的部分知识,且结点在一起工作以便沿最短路径交付分组。如何使用层次结构来处理规模问题,通过将大型网络划分成称为自治系统(AS)的独立管理域来解决。每个AS独立地为其数据报选择路由以通过本AS,就像各个国家独立地在本国内指定邮件传递路线。
集中式、分散式和等级制方法是怎样具体应用于因特网中主要的路由选择协议中的,这些协议是RP、OSPF和BGP。通过考虑广播和多播路由选择,了解路由选择算法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。