计算机基础(笔记)——计算机网络(网络层)

网络层

概述

与运输层和应用层不同的是,在网络中的每一台主机和路由器中都有一个网络层部分。正因如此,网络层协议是协议栈中最具挑战性的部分。
网络层也是协议栈中最复杂的层次之一,因此我们将在这里涉及大量的知识。我们的学习从网络层的概述和它能够提供的服务开始。我们将仔细考察两种用于构造网络层分组交付的方法,即数据报模式和虚电路模式,并且理解编址在传递分组到目的主机所起的重要作用。
将对网络层的转发( forwarding)功能和路由选择( routing)功能做重要区分。转发涉及分组在单一的路由器中从一条入链路到一条出链路的传送。路由选择涉及一个网络的所有路由器,它们经路由选择协议共同交互,以决定分组从源到目的地结点所采用的路径。
为了加深对分组转发的理解,我们将“进入”路由器内部来观察它的硬件体系结构和组织。接下来我们将观察在因特网中的分组转发,以及令人称颂的网际协议(IP)。研究网络层编址和Pv4的数据报格式。然后探讨网络地址转换(NAT)、数据报分段、因特网控制报文协议(ICMP)和IPv6。
路由选择算法的任务是决定从发送方到接收方的好的路径(等价地为路由)。首先学习路由选择算法的理论,关注两种最为流行的算法类型:链路状态和距离矢量算法。因为路由选择算法的复杂性随着网络路由器数量的增加会有相当大的增长,因此会关注等级制路由选择方法。当
我们涉及因特网的自治系统内部的路由选择协议(RIP、OSPF和IS-IS)和因特网的自治系统之间的路由选择协议(BCP)时,将看到理论是如何付诸实践的。最后讨论播和多播路由选择。
路由器的主要作用是将数据报从入链路转发到出链路

转发和路由选择

网络层的作用从表面上看极为简单,即将分组从一台发送主机移动到一台接收主机。为此,需要两种重要的网络层功能:

  • 转发。当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。
  • 路由选择。当分组从发送方流向接收方时,网络层必须决定这些分组所采用的路由或路径。计算这些路径的算法被称为路由选择算法( routing algorithm)。

转发是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。路由选择是指网络范围的过程,以决定分组从源到目的地所采取的端到端路径。
每台路由器具有一张转发表( forwarding table)。路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在该路由器的转发表中索引查询。存储在转发表项中的该首部的值指出了该分组将被转发的路由器的输出链路接口。分组首部中的该值可能是该分组的目的地址或该分组所属连接的指示,这取决于网络层协议。
路由选择算法决定了插入路由器的转发表中的值。路由选择算法可能是集中式的,或是分布式的。在任何一种情况下,都是路由器接收路由选择协议报文,该信息被用于配置其转发表。通过考虑网络中的一种假想情况(不真实的,但技术上是可行的),其中所有的转发表是由人类网络操作员直接配置而在路由器中物理地存在,转发和路由选择功能的区别和不同能被进一步说明。在这种情况下,不需要任何路由选择协议!
当然,该人类操作员将需要彼此交互,以确保该转发表配置得能使分组到达它们想要到达的目的地。也很可能出现下列现象:人工配置更容易出错,并且对于网络拓扑的变化,响应起来比路由选择协议慢。约定术语分组交换机是指一台通用分组交换设备,它根据分组首部字段中的值,从输入链路接口到输出链路接口转移分组。某些分组交换机称为链路层交换机(link- layer switches),基于链路层字段中的值做转发决定。其他分组交换机称为路由器( router),基于网络层字段中的值做转发决定。因为在本章中关注的是网络层,所以我们使用术语路由器代替分组交换机。当我们谈论虚电路网络中的分组交换机时,我们甚至将使用词汇路由器
####连接建立
刚才说过网络层有两个重要的功能,转发和路由选择。但我们很快将看到在某些计算机网络中,实际上有第三种重要的网络功能,即连接建立( connection setup)。回想我们学习TCP时,当数据能从发送方流向接收方之前,需要三次握手。这允许发送方和接收方建立所需的状态信息(例如,序号和初始流控制窗口长度)。以类似的方式,某些网络层体系结构如ATM、帧中继、MPLS,要求从源到目的地沿着所选择的路径彼此握手,以便在给定源到目的地连接中的网络层数据分组能够开始流动之前建立起状态。在网络层,该过程被称为连接建立。

网络服务模型

网络服务模型( network service model)定义了分组在发送与接收端系统之间的端到端运输特性。
在发送主机中,当运输层向网络层传递一个分组时,能由网络层提供的特定服务包括:

  • 确保交付。该服务确保分组将最终到达其目的地。
  • 具有时廷上界的确保交付。该服务不仅确保分组的交付,而且在特定的主机到主机时延上界内(例如在100ms内)交付。

此外,能够为给定的源和目的地之间的分组流提供下列服务:

  • 有序分组交付。该服务确保分组以它们发送的顺序到达目的地。
  • 确保最小带宽。这种网络层服务模仿在发送和接收主机之间的一条特定比特率的传输链路的行为。只要发送主机以低于特定比特率的速率传输比特(作为分组的组成部分),则分组不会丢失,且每个分组会在预定的主机到主机时延内到达。
  • 确保最大时延抖动。该服务确保位于发送方的两个相继分组之间的时间量等于在目的地接收到它们之间的时间量(或这种间隔的变化不超过某些特定的值)。
  • 安全性服务。使用仅由源和目的主机所知晓的一个秘密会话密钥,在源主机中的网络层能够加密向目的主机发送的所有数据报负载。在目的主机中的网络层则能够负责解密该负载。使用这种服务,能够向源和目的主机之间的所有运输层报文段(TCP和UDP)提供机密性。除了机密性以外,网络层能够提供数据完整性和源鉴别服务。

因特网的网络层提供了单一的服务,称为尽力而为服务(best- effort service)。从下表看,尽力而为服务看起来是根本无服务的一种委婉说法。使用尽力而为服务,分组间的定时是不能确保被保证的,分组接收的顺序也不能保证与发送的顺序一致,传送的分组也不能保证最终交付。给出这样的定义,一个没有向目的地交付分组的网络也符合尽力而为交
付服务的定义。

网络体系结构服务模型带宽保证无丢包保证有序定时拥塞指示
因特网尽力而为任何可能的顺序不维护
ATMCBR保证恒定速率有序维护不出现拥塞
ATMABR保证最小速率有序不维护提供拥塞指示

其他的网络体系结构已定义和实现了许多超过因特网的尽力而为服务的服务模型。例如,ATM网络体系结构提供了多重服务模型,意味着可以在相同的网络中为不同的连接提供不同类别的服务。两个最重要的ATM服务模型是恒定比特率和可用比特率服务:

  • 恒定比特率( Constant Bit Rate,CBR)ATM网络服务。这是第一个被标准化的ATM服务模型,反映了电话公司对ATM的早期兴趣,以及CBR服务在承载实时、恒定比特率的音频和视频流量方面的适用性。CBR服务的目标从概念上讲是简单的,就是使网络连接看起来就像在发送与接收主机之间存在一条专用的、固定带宽的传输链路,以使用性质相同的虚拟管道来提供分组(ATM术语称为信元)流。使用CBR服务,ATM信元流以如下方式被承载跨越网络,即一个信元的端到端时延、信元端到端时延中的可变性(即时延抖动)及丢失或推迟交付的信元的比率都确保在特定值以下。当第一次建立CBR连接时,发送主机与ATM网络认可了这些值。
  • 可用比特率( Available Bit Rate,ABR)ATM网络服务。由于因特网提供了所谓的尽力而为服务,ATM的ABR也许最好被刻画为比尽力而为服务稍好一点的服务。与因特网服务模型一样,ABR服务下的信元也许会丢失。然而与因特网不同的是,信元不能被重排序(虽然它们可能丢失),对于使用ABR服务的连接来说,最小信元传输速率(MCR)是可以得到保证的。如果在给定时间内网络有足够的空闲资源,发送方也可以用比MCR更高的速率成功地发送数据。另外, ATM ABR服务能够为发送方提供反馈信息(利用一个拥塞通知比特,或一个明确的速率发送),以便控制发送方在MCR和一个允许的峰值信元速率之间调整其速率。

虚电路和数据报网络

因特网的运输层为每个应用程序在两种服务间提供了选择:UDP,一种无连接服务;或TCP,一种面向连接服务。以类似的方式,网络层也能够在两台主机之间提供无连接服务或连接服务。网络层的连接和无连接服务在许多方面与运输层的面向连接和无连接服务类似。例如,网络层连接服务以源和目的主机间的握手开始;网络层无连接服务则没有任何握手预备步骤。
尽管网络层连接和无连接服务与运输层面向连接和无连接服务有类似之处,但也存在重大差异:

  • 在网络层中,这些服务是由网络层向运输层提供的主机到主机的服务。在运输层中,这些服务则是运输层向应用层提供的进程到进程的服务。
  • 在至今为止的所有主要的计算机网络体系结构中(因特网、ATM、帧中继等),网络层或者提供了主机到主机的无连接服务,或者提供了主机到主机的连接服务,而不同时提供这两种服务。仅在网络层提供连接服务的计算机网络称为虚电路( Virtual-Circuit,VC)网络;仅在网络层提供无连接服务的计算机网络称为数据报网络( datagram network)。
  • 在运输层实现面向连接的服务与在网络层实现连接服务是根本不同的。运输层面向连接服务是在位于网络边缘的端系统中实现的,网络层连接服务除了在端系统中,也在位于网络核心的路由器中实现。

虚电路网络和数据报网络是计算机网络的两种基本类型。在作出转发决定时,它们使用了非常不同的信息。

虚电路网络

虽然因特网是一个数据报网络,但许多其他网络体系结构(包括ATM、帧中继的体系结构)却是虚电路网络,因此在网络层使用连接。这些网络层连接被称为虚电路。我们现在考虑在计算机网络中是如何实现虚电路服务的。
一条虚电路的组成如下:

  1. 源和目的主机之间的路径(即一系列链路和路由器);
  2. VC号,沿着该路径的每段链路的一个号码;③沿着该路径的每台路由器中的转发表表项。属于一条虚电路的分组将在它的首部携带一个VC号。因为一条虚电路在每条链路上可能具有不同的VC号,每台中间路由器必须用一个新的VC号替代每个传输分组的VC号。该新的VC号从转发表获得。

无论何时跨越一台路由器创建一条新的虚电路,转发表就增加了一个新表项。类似地,无论何时终止一条虚电路,沿着该路径每个表中的相应项将被删除。
一个分组沿着其路由在每条链路上不简单地保持相同的VC号的原因:
第一,逐链路代替该号码减少了在分组首部中VC字段的长度。
第二方面更为重要,通过允许沿着该虚电路路径每条链路有一个不同的VC号,大大简化了虚电路的建立。特别是,在具有多个VC号的路径,其上的每条链路能够独立于沿着该路径的其他链路所选的号码选择一个VC号。如果沿着某路径的所有链路要求一个共同的VC号的话,路由器将不得不交换并处理相当大量的报文,以约定一个共同的VC号(例如,个并未由这些路由器的任何其他现有虚电路使用的号码)用于一次连接。
在虛电路网络中,该网络的路由器必须为进行中的连接维持连接状态信息( connection state information)。特别是,每当跨越一台路由器创建一个新连接,必须在该路由器的转发表中增加一个新的连接项;每当释放一个连接,必须从该表中删除该项。值得注意的是,即使没有VC号转换,仍有必要维持连接状态信息,该信息将VC号与输出接口号联系起来。
在虚电路中有3个明显不同的阶段:

  • 虚电路建立。在建立阶段,发送运输层与网络层联系,指定接收方地址,等待网络建立虚电路。网络层决定发送方与接收方之间的路径,即该虚电路的所有分组要通过的一系列链路与路由器。网络层也为沿着该路径的每条链路决定一个VC号。最后,网络层在沿着路径的每台路由器的转发表中增加一个表项。在虚电路建立期间,网络层还可以预留该虚电路路径上的资源(如带宽)。
  • 数据传送。一旦创建了虚电路,分组就可以开始沿该虚电路流动。
  • 虚电路拆除。当发送方(或接收方)通知网络层它希望终止该虚电路时,就启动这个阶段。然后网络层通常将通知网络另一侧的端系统结東呼叫,并更新路径上每台分组路由器中的转发表以表明该虚电路已不存在了。

在网络层的虚电路建立与运输层的连接建立之间有一个细微但很重要的区别。运输层的连接建立仅涉及两个端系统。在运输层的连接建立期间,两个端系统独自决定运输层连接的参数(如初始序号与流量控制窗口长度)。虽然这两个端系统已经知道该运输层连接,但网络中的路由器则对这些完全不知情。在另一方面,对于一个虚电路网络层,沿两个端系统之间路径上的路由器都要参与虚电路的建立,且每台路由器都完全知道经过它的所有虚电路。
端系统向网络发送指示虚电路启动与终止的报文,以及路由器之间传递的用于建立虚电路(即修改路由器表中的连接状态)的报文,它们被称为信令报文( 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 000100
11001000 00010111 000110001
11001000 00010111 000112
其他3

使用这种风格的转发表,路由器用分组的目的地址的前缀( prefix)与该表中的表项进行匹配;如果存在一个匹配项,则路由器向与该匹配项相联系的链路转发分组。例如,
假设分组的目的地址是11001000 00010111 00010110 10100001;因为该地址的21比特前缀匹配该表的第一项,所以路由器向链路接口0转发该分组。如果一个前缀不匹配前3项中的任何一项,则路由器向链路接口3转发该分组。尽管听起来足够简单,但这里还是有重要的微妙之处。注意到一个目的地址可能与不止一个表项相匹配。例如,地址11001000 00010100 01000010 10101010的前24比特与表中的第二项匹配,而该地址的前21比特与表中的第三项匹配。当有多个匹配时,该路由器使用最长前缀匹配规则( longest prefix matching rule);即在该表中寻找最长的匹配项,并向与最长前缀匹配相关联的链路接口转发分组。
虽然在数据报网络中的路由器不维持连接状态信息,但它们无论如何在其转发表中维持了转发状态信息。然而,转发状态信息表变化的时间尺度相对要慢。实际上,在数据报网络中的转发表是通过路由选择算法进行修改的,这通常每1~5分钟左右更新一次转发表。在虚电路网络中,无论何时通过路由器建立一条新的连接,或无论何时通过路由器拆除一条现有的连接,路由器中的转发表就被更新。对一台第一层主干路由器而言,这很容易以微秒的时间尺度进行更新。
因为在数据报网络中的转发表能够在任何时刻修改,从一个端系统到另一个端系统发送一系列分组可能在通过网络时走不同的路径,并可能无序到达。

虚电路和数据报网络的由来

数据报与虚电路网络的演化反映了它们的由来。作为一条重要的组织原则,虚电路的概念来源于电话界,它采用了真正的电路。由于呼叫建立及每呼叫的状态要在网络中的路由器上维持,一个面向虚电路的网络显然比数据报网络要复杂得多。这也与它的电话传统一致。电话网络在网络中必然有其复杂性,因为它们要连接哑端系统设备。
另一方面,因特网作为一种数据报网络,是由将计算机连接在一起的需求发展而来的。由于端系统设备复杂得多,因特网架构师们选择使网络层服务模型尽可能简单。

  • 由于所产生的因特网服务模型使服务保证最少(没有!),它对网络层施加了最小
    限度的需求。这使得互联使用各种不同链路层技术而且具有十分不同的传输速率
    和丢包特性的网络变得更加容易。这些链路层技术包括卫星、以太网、光纤或无
    线。
  • 诸如电子邮件、Web等应用,甚至如DNS这样的网络基础设施都是在位于网络边缘的主机(服务器)上实现的。增加一个新服务只需连接台主机到网络中,并定义一个新的应用层协议(如HTP)即可,这种能力可以使如Web之类的新服务能在相当短的时间内在因特网上得以部署。

路由器工作原理

网络层的转发功能( 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)中,一个运输层端口号匹配某给定值的入分组,在转发(动作)前其端口号将被重写。因此,“匹配加动作”抽象不仅作用大,而且在网络设备中无所不在。

交换结构

交换结构位于一台路由器的核心部位。正是通过这种交换结构,分组才能实际地从
个输入端口交换(即转发)到一个输出端口中。

  • 经内存交换。最简单、最早的路由器是传统的计算机,在输入端口与输出端口之间的交换是在CPU(路由选择处理器)的直接控制下完成的。输入与输出端口的功能就像在传统操作系统中I/O设备一样。一个分组到达一个输人端口时,该端口会先通过中断方式向路由选择处理器发出信号。于是,该分组从输入端口处被复制到处理器内存中。路由选择处理器则从其首部中提取目的地址,在转发表
    中找出适当的输出端口,并将该分组复制到输出端口的缓存中。在这种情况下,如果内存带宽为每秒可写进内存或从内存读出B个分组,则总的转发吞吐量(分组从输入端口被传送到输出端口的总速率)必然小于B/2。也要注意到不能同时转发两个分组,即使它们有不同的端口号,因为经过共享系统总线一次仅能执行个内存读/写。
    许多现代路由器通过内存进行交换。然而,与早期路由器的一个主要差别是,目的地址的查找和将分组存储(交换)进适当的内存存储位置是由输入线路卡来处理的。在某些方面,经内存交换的路由器看起来很像共享内存的多处理机,用一个线路卡上的处理将分组交换(写)进适当的输出端口的内存中。
  • 经总线交換。在这种方法中,输入端口经一根共享总线将分组直接传送到输出端口,不需要路由选择处理器的干预。通常按以下方式完成该任务:让输入端口为分组预先计划一个交换机内部标签(首部),指示本地输出端口,使分组在总线上传送和传输到输出端口。该分组能由所有输出端口收到,但只有与该标签匹配的端口才能保存该分组。然后标签在输出端口被去除,因为其仅用于换机内部来跨越总线。如果多个分组同时到达路由器,每个位于不同的输出端口,除了一个分组外所有其他分组必须等待,因为一次只有一个分组能够跨越总线。因为每个分组必须跨过单一总线,故路由器的交换带宽受总线速率的限制。
  • 经互联网络交換。克服单一、共享式总线带宽限制的一种方法是,使用一个更复
    杂的互联网络。纵横式交换机就是一种由2N条总线组成的互联网络,它连接N个输入端口
    与N个输出端口。与前面两种交换方法不同,纵横式网络能够并行转发多个分组。然而,如果来自两个不同输入端口的两个分组其目的地为相同的输出端口,则一个分组必须在输入端等待,因为在某个时刻经给定总线仅有一个分组能够发送。

更为复杂的互联网络使用多级交换元素,以使来自不同输入端口的分组通过交换结构同时朝着相同的输出端口前行。

输出端口

输出端口处理取出存放在输出端口内存中的分组并将其发送到输出链路上。这包括选择和取出排队的分组进行传输,执行所需的链路层和物理层传输功能。

何处出现排队

在输入端口和输出端口处都能够形成分组队列。排队的位置和程度(或者在输入端口排队,或者
在输出端口排队)将取决于流量负载、交换结构的相对速率和线路速率。随着这些队列的增长,路由器的缓存空间将最终会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包( 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数据报中的关键字段如下:

  • 版本(号)。这4比特规定了数据报的IP协议版本。通过查看版本号,路由器能够确定如何解释P数据报的剩余部分。不同的P版本使用不同的数据报格式。
  • 首部长度。因为一个IP4数据报可包含一些可变数量的选项(这些选项包括在IP4数据报首部中),故需要用这4比特来确定P数据报中数据部分实际从哪里开始。大多数P数据报不包含选项,所以一般的P数据报具有20字节的首部。服务类型。服务类型(TOS)比特包含在IPv4首部中,以便使不同类型的P数据报(例如,一些特别要求低时延、高吞吐量或可靠性的数据报)能相互区别开来。
  • 数据报长度。这是P数据报的总长度(首部加上数据),以字节计。因为该字段长为16比特,所以P数据报的理论最大长度为65535字节。然而,数据报很少有超过1500字节的。
  • 标识、标志、片偏移。新版本的IP(即IPv6)不允许在路由器上对分组分片。
  • 寿命。寿命(Time-To-Live,TTL)字段用来确保数据报不会永远(如由于长时间的路由选择环路)在网络中循环。每当数据报由一台路由器处理时,该字段的值减1。若TL字段减为0,则该数据报必须丢弃。
  • 协议。该字段仅在一个P数据报到达其最终目的地才会有用。该字段值指示了IP数据报的数据部分应交给哪个特定的运输层协议。注意在P数据报中的协议号所起的作用,类似于运输层报文段中端口号字段所起的作用。协议号是将网络层与运输层绑定到一起的粘合剂,而端口号是将运输层和应用层绑定到一起的粘合剂。
  • 首部检验和。首部检验和用于帮助路由器检测收到的P数据报中的比特错误。首部检验和是这样计算的:将首部中的每2个字节当作一个数,用反码运算对这些数求和。,该和的反码(被称为因特网检验和)存放在检验和字段中。路由器要对每个收到的P数据报计算其首部检验和,如果数据报首部中携带的检验和与计算得到的检验和不一致,则检测出是个差错。路由器一般会丢弃检测出错误的数据报。注意到在每台路由器上必须重新计算检验和并再次存放到原处,因为TL字段以及可能的选项字段会改变。RFC1071。重复检测有几种原因。首先,注意到在P层只对P首部计算了检验和,而 TCP/UDP检验和是对整个TCP/UDP报文段进行的。其次,TCP/UDP与P不一定都必须属于同一个协议栈。原则上TCP能运行在一个不同的协议(如ATM)上,而IP能够携带不一定要传递给TCP/UDP的数据。
  • 源和目的P地址。当某源生成一个数据报时,它在源IP字段中插入它的P地址,在目的IP地址字段中插入其最终目的地的地址。通常源主机通过DNS査找来决定目的地址。
  • 选项。选项字段允许P首部被扩展。首部选项意味着很少使用,因此决定对每个数据报首部不包括选项字段中的信息,这样能够节约开销。然而,选项的可能存在的确是件复杂的事,因为数据报头长度可变,故不能预先确定数据字段从何处开始。而且还因为有些数据报要求处理选项,而有些数据报则不要求,故导致台路由器处理一个IP数据报所需的时间变化很大。这些考虑对于高性能路由器和
    主机上的IP处理来说特别重要。由于这样或那样的原因,在IP6首部中已去掉了IP选项。
  • 数据(有效載荷)。我们来看看最后的也是最重要的字段,这是数据报存在的首要理由!在大多数情况下,IP数据报中的数据字段包含要交付给目的地的运输层报文段(TCP或UDP)。然而,该数据字段也可承载其他类型的数据,如ICMP报文。

注意到一个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类地址空间的迅速损耗以及所分配的地址空间的利用率低。

  1. 获取一块地址
    为了获取一块IP地址用于一个组织的子网,某网络管理员也许首先会与他的ISP联系,该ISP可能会从已分给它的更大地址块中提供一些地址。

  2. 获取主机地址:动态主机配置协议
    某组织一旦获得了一块地址,它就可为本组织内的主机与路由器接口逐个分配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个步骤的过程:

    1. DHCP服务器发现。一台新到的主机的首要任务是发现一个要与其交互的DHCP服务器。这可通过使用一个 DHCP发现报文( DHCP discover message)来完成。
    2. DHCP服务器提供。DHCP服务器收到一个DHCP发现报文时,用一个 DHCP提供报文( DHCP offer message)向客户作出响应,因为在子网中可能有几个DHCP服务器,该客户也许会发现它处于能在几个提供者之间进行选择的优越位置。每台服务器提供的报文包含有收到的发现报文的事务ID、向客户推荐的IP地址、网络掩码以及 IP地址租用期( address lease time),即IP地址有效的时间量。
    3. DHCP请求。新到达的客户从一个或多个服务器提供中选择一个,并向选中的服务器提供用一个 DHCP请求报文( DHCP request message)进行响应,回显配置参数。
    4. DHCP ACK。服务器用 DHCP ACK报文( DHCP ACK message)对DHCP请求报文进行响应,证实所要求的参数。

    一旦客户收到 DHCP ACK后,交互便完成了,并且该客户能够在租用期内使用DHCP分配的P地址。因为客户可能在该租用期超时后还希望使用这个地址,所以DHCP还提供了一种机制以允许客户更新它对一个P地址的租用。从移动性角度看,DHCP确实有不足之处。因为每当结点连到一个新子网时,要从DHCP得到一个新的P地址,当一个移动结点在子网之间移动时,就不能维持与远程应用之间的TCP连接。

  3. 网络地址转换
    每个IP使能的设备都需要一个P地址。随着子网的大量出现,这看起来意味着每当一个SOHO想安装一个LAN以互联多台机器时,需要ISP分配一组地址以供该SOHO的所有机器使用。如果该子网变大了,则需要分配块较大的地址。但如果ISP已经为SOHO网络当前地址范围分配过一块连续地址该怎么办呢?有一种简单的方法: 网络地址转换 (Network Address Translation, NAT) RFC 2663 , RFC 3022NAT 百度百科NAT 维基百科

  4. 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应用程序的救世主。

因特网控制报文协议(ICMP)

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类型编码描述
00回显回答(对ping回答)
30目的网络不可达
31目的主机不可达
32目的协议不可达
33目的端口不可达
36目的网络未知
37目的主机未知
40源抑制(拥塞控制)
80回显请求
90路由器通告
100路由器发现
110TTL过期
120IP首部损坏

ping程序发送一个ICMP类型8编码0的报文到指定主机。看到该回显(echo)请求,目的主机发回一个类型0编码0的ICMP回显回答。大多数TCP/IP实现直接在操作系统中支持ping服务器,即该服务器不是一个进程。注意客户程序需要能够指示操作系统产生一个类型8编码0的1CMP报文。
另一个有趣的ICMP报文是源抑制报文。这种报文在实践中很少使用。其最初目的是执行拥塞控制,即使得拥塞的路由器向一台主机发送一个ICMP源抑制报文,以强制该主机减小其发送速率。TCP有自己在运输层操作的拥塞控制机制,不需要利用网络层中的反馈信息(如ICMP源抑制报文)。

IPv6

IPv6数据报格式
版本流量类型流标签
有效载荷长度下一个首部跳限制
128比特源IP地址
128比特目的IP地址
数据
IP6中引入的最重要的变化显示在其数据报格式中:
  • 扩大的地址容量。IPv6将P地址长度从32比特增加到128比特。这就确保全世界将不会用尽IP地址。除了单播与多播地址以外,IP6还引入了一种称为任播地址( anycast address)的新型地址,这种地址可以使数据报交付给一组主机中的任意一个。
  • 简化高效的40字节首部。因而所形成的40字节定长首部允许更快地处理IP数据报。一种新的选项编码允许进行更灵活的选项处理。
  • 流标签与优先级。IP6有一个难以捉摸的流(ow)定义。RFC1752RFC2460中描述道,该字段可用于“给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种非默认服务质量或需要实时服务的流”。在另一方面,更为传统的应用(如文件传输和电子邮件,就不可能被当作流。由高优先级用户(如某些为使其流量得到更好服务而付费的用户)承载的流量也有可能被当作一个流。然而,IP6的设计者们显然已预见到最终需要能够区分这些流,即使流的确切含义还未完全确定。IPv6首部中还有一个8比特的流量类型字段,该字段就像Pv4中的TOS字段,可用于给出一个流中某些数据报的优先级,以便指明某些应用的数据报(如ICMP分组)比其他应用的数据报(如网络新闻)有更高的优先权。

以下是IPv6中定义的字段:

  • 版本。该4比特字段用于标识IP版本号。毫不奇怪,IP6将该字段值设为6。注意到将该字段值置为4并不能创建一个合法的IPv4数据报。
  • 流量类型。该8比特字段与我们在IPv4中看到的TOS字段的含义相似。
  • 流标签。该20比特的字段用于标识一条数据报的流。
  • 有效載荷长度。该16比特值作为一个无符号整数,给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数量。
  • 下一个首部。该字段标识数据报中的内容(数据字段)需要交付给哪个协议(如TCP或UDP)。该字段使用与Pv4首部中协议字段相同的值。
  • 跳限制。转发数据报的每台路由器将对该字段的内容减1。如果跳限制计数到达时,则该数据报将被丢弃。
  • 源地址和目的地址。IPv6128比特地址的各种格式在RFC4291中进行了描述。
  • 数据。这是IPv6数据报的有效载荷部分。当数据报到达目的地时,该有效载荷就从IP数据报中移出,并交给在下一个首部字段中指定的协议处理。

注意到,在IPv4数据报中出现的几个字段在IP6数据报中已不复存在:

  • 分片/重新组装。IPv6不允许在中间路由器上进行分片与重新组装。这种操作只能在源与目的地上执行。如果路由器收到的P6数据报因太大而不能转发到出链路上的话,则路由器只需丢掉该数据报,并向发送方发回一个“分组太大”的ICMP差错报文即可(见下文)。于是发送方能够使用较小长度的IP数据报重发数据。分片与重新组装是一个耗时的操作,将该功能从路由器中删除并放到端系统中,大大加快了网络中的P转发速度。
  • 首部检验和。因为因特网层中的运输层(如TCP与UDP)和数据链路层(如以太网)协议执行了检验操作,IP设计者大概觉得在网络层中具有该项功能实属多余,可以将其去除。再次强调的是,快速处理IP分组是关注的重点。
  • 选项。选项字段不再是标准IP首部的一部分了。但它并没有消失,而是可能出现在IPv6首部中由“下一个首部”指出的位置上。这就是说,就像TCP或UDP协议首部能够是IP分组中的“下一个首部”,选项字段也能是“下一个首部”。删除选项字段使得IP首部成为定长的40字节。

IP结点使用ICMP协议来报告差错情况,并向端系统提供有限的信息。RFC 4443中定义了一种用于IPv6的新版ICMP。除了能识别现存的ICMP类型和编码定义外,由于IPv6新增功能的需要,ICMPv6还增加了新的类型和编码。其中包括“分组太大”类型与“未识别的IPv6选项”错误编码。另外,ICMP6还包含了因特网组管理协议(IGMP)。IGMP用于管理主机加入和离开多播组,它在IP4中曾是一个与ICMP分开的独立协议。

从IPv4到IPv6的迁移

引入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数据的一样。

涉足IP安全性

百度百科: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算法的研究中,将网络只看作一个互联路由器的集合。从所有路由器执行相同的路由选择算法以计算穿越整个网络的路由选择路径的意义上来说,一台路由器很难同另一台路由器区别开来。在实践中,该模型和这种一组执行同样路由选择算法的同质路由器集合的观点有一点简单化,因为至少有以下两个重要原因:

  • 规模。随着路由器数目变得很大,涉及路由选择信息的计算、存储及通信(例如LS更新或最低费用路径的变化)的开销将高得不可实现。当今的公共因特网由数亿台主机组成。在这些主机中存储的路由选择信息显然需要巨大容量的内存。在公共因特网上的所有路由器中广播IS更新所需的开销将导致没有剩余的带宽用来发送数据分组!在如此大量的路由器中迭代的距离向量算法将肯定永远无法收敛!
  • 管理自治。虽然研究人员倾向于忽略这样的问题,如某公司要求按自己的意愿运行路由器(如运行其选择的某种路由选择算法),或对外部隐藏其网络的内部组织面貌,但这些都是需要考虑的重要因素。在理想情况下,一个组织应当能够按自己的愿望运行和管理其网络,还要能将其网络与其他外部网络相连接。

这两个问题都可以通过将路由器组织进 自治系统( Autonomous Systen,AS)来解决,每个AS由一组通常处在相同管理控制下的路由器组成(例如,由相同的ISP运营或属于相同的公司网络)。在相同的AS中的路由器都全部运行同样的路由选择算法(如一种LS或DV算法),且拥有彼此的信息,这就像在前一节中所讲的理想化模型中的情况一样。在一个自治系统内运行的路由选择算法叫做 自治系统内部路由选择协议( Intra- autonomoussystem routing protocol)。当然,将AS彼此互联是必需的,因此在一个AS内的一台或多台路由器将有另外的任务,即负责向在本AS之外的目的地转发分组。这些路由器被称为 网关路由器( gateway router)。

因特网中的路由选择

因特网中自制系统内部的路由选择:RIP

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路由器之间的交换(如链路状态更新)。使用鉴别,仅有受信任的路由器能参与一个AS内的OSPF协议,因此可防止恶意入侵者将不正确的信息注入路由器表内。在默认状态下,路由器间的OSPF报文是未被鉴别的并能被伪造。能够配置两类鉴别,即简单的和MD5的。使用简单的鉴别,每台路由器配置相同的口令。当一台路由器发送一个OSPF分组,它以明文方式包括了口令。显然,简单鉴别并不是非常安全。MD5鉴别基于配置在所有路由器上的共享秘密密钥。对每个发送的OSPF分组,路由器对附加秘密密钥的分
    组内容计算MD5散列值。然后它将所得的散列值包括在该OSPF分组中。接收路由器使用预配置的秘密密钥计算出该分组的MD5散列值,并与该分组携带的散列值进行比较,从而验证了该分组的真实性。在MD5鉴别中也使用了序号对重放攻击进行保护。
  • 多条相同费用的路径。当到达某目的地的多条路径具有相同的费用时,OSPF允许使用多条路径(这就是说,当多条相等费用的路径存在时,无需仅选择单一的路径来承载所有的流量)。
  • 对单播与多播路由选择的综合支持。多播OSPF( MOSPF) RFC1584提供对OSPF的简单扩展,以便提供多播路由选择。MOSPF使用现有的OSPF链路数据库,并为现有的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提供了进行以
下工作的手段:

  1. 从相邻AS处获得子网可达性信息。
  2. 向本AS内部的所有路由器传播这些可达性信息。
  3. 基于可达性信息和AS策略,决定到达子网的“好”路由。

更为重要的是,BGP使得每个子网向因特网的其余部分通告它的存,并且BCP确保在因特网中的所有AS知道该子网以及如何到达那里。如果没有BGP的话,每个子网将是隔离的,即它们孤独并且不为因特网其余部分所知。

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),每个前缀表示一个子网或一个子网的集合。

路径属性和BGP路由

在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。

  • AS-PATH。该属性包含了前缀的通告已经通过的那些AS。当一个前缀传送到一个AS时,该AS将它的ASN增加到AS-PATH属性中。路由器也使用AS-PATH属性在多条路径中选择相同的前缀。
  • 在AS间和AS内部路由选择协议之间提供重要链路后,NEXT-HOP属性具有一种微妙而重要的用途。NEXT-HOP是一个开始某AS-PATH的路由器接ロ。路由器使用NEXT-HOP属性正确地配置它们的转发表。
  • 在AS中的路由器能够知道到相同前缀x的两条不同的路由。这两条路由具有到x的相同的AS-PATH,但具有不同的NEXT-HOP值对应于不同的对等链路。使用NEXT-HOP值和AS内部路由选择算法,路由器能够确定到每条对等链路的路径的费用,然后应用热土豆路由选择来决定适当的接口。

当一台网关路由器接收到一台路由器通告时,它使用其 输入策略( Importpolicy)来决定是否接收或过滤该路由,是否设置某种属性,如路由器偏好测度。输人策略可能过滤掉一条路由,因为该AS可能不希望通过在该路由的AS-PATH中的某个AS发送流量。网关路由器也可能过滤一条路由,因为它已经知道了一条到相同前缀的偏好路由。

BGP路由选择

BCP使用eBGP和iBGP向在AS中的所有路由器发布路由。根据这种发布,路由器可能知道到达任何一条前缀的多条路由,在这种情况下路由器必须在可能的路由中选择一条。进入这个路由选择进程的输入是被路由器知道并接受的所有路由的集合。如果对相同前缀存在两条或多条路由,则BGP顺序地调用下列消除规则,直到留下一条路由。

  • 路由被指派一个本地偏好值作为它们的属性之一。一条路由的本地偏好可能由该路由器设置或可能由在相同AS中的另一台路由器学习到。这是一条由AS的网络管理员决定的决策。具有最高本地偏好值的路由将被选择。在余下的路由中(所有都具有相同的本地偏好值),具有最短AS-PATH的路由将被选择。如果该规则是路由选择的唯一规则的话,则BGP将使用一种距离向量算法来决定路径,其中距离测度使用AS跳的数目而不是路由器跳的数目。
  • 在余下的路由中(所有都具有相同的本地偏好和相同的AS-PATH长度),将选择具有最靠近NEXT-HOP路由器的路由。这里,最靠近是指具有最低费用路径的费用的路由器,它由AS内部算法来决定。 该进程经
    常被称为热土豆路由选择。
  • 如果仍留下多条路由,该路由器使用BGP标识符来选择路由。

广播和多播路由选择

在广播路由选择( broadcast routing)中,网络层提供了从一种源结点到网络中的所有其他结点交付分组的服务;多播路由选择( multicast routing)使单个源结点能够向其他网络结点的一个子集发送分组的副本。

广播路由选择算法

也许完成广播通信的最直接的方式是由发送结点向每个目的地分别发送分组的副本,在给定N个目的结点的情况下,源结点只是产生该分组的N份副本,对不同目的地的每个副本进行编址,并用单播路由选择向N个目的地传输这N份副本。这种用 N次单播(N-way- unicast)实现广播的方法简单,无需新的网络层路由选择协议以及分组复制或转发功能。

  1. 无控制洪泛
    实现广播的最显而易见的技术是 洪泛( flooding)方法,该方法要求源结点向它的所有邻居发送分组的副本。当某结点接收了一个广播分组时,它复制该分组并向它的所有邻居(除了从其接收该分组的那个邻居)转发之。显然,如果图是相连的,这种方案将最终将广播分组的副本交付给该图中的所有结点。虽然这种方案简单而优雅,但它可能会引发 广播风暴( broadcast storn),导致无休止的广播分组的复制,将最终导致在该网络中生成大量的广播分组,使得网络变得毫无用处。
  2. 受控洪泛
    避免广播风暴的关键是每个结点明智地选择何时洪泛分组,何时不洪泛分组在实践中,这能够以几种方式来实现:
    • 序号控制洪泛( sequence- number- controlled flooding)中,源结点将其地址(或其他唯一的标识符)以及广播序号( broadcast sequence number)放入广播分组,再向它的所有邻居发送该分组。每个结点维护它已经收到的、复制的和转发的源地址和每个广播分组的序号列表。当结点接收到一个广播分组时,它首先检査该分组是否在列表中。如果在,丢弃该分组;如果不在,复制该分组并向该结点的所有邻居转发(除了接收到该分组从其的那个结点)。(在 Gnutella I中,报文复制和转发在应用层执行,而不是在网络层执行。)
    • 反向路径转发( Reverse Path Forwarding,RPF),有时也称为反向路径广播(RPB)。RPF的基本思想简单且优雅。当一台路由器接收到具有给定源地址的广播分组时,仅当该分组到达的链路正好是位于它自己的返回其源的最短单播路径上,它才向其所有出链路(除了它接收分组的那个)传输报文;否则,路由器只是丢弃入分组而不向任何它的出链路转发分组。因为路由器知道它在这样一条链路上将接收或者已经接收了该分组的一个副本(该链路位于自身返回发送方最短路径上),故这样一个分组能够被丢弃。
  3. 生成树广播
    因此,提供广播的另一种方法是首先对网络结点构造出一棵生成树。当一个源结点要发送一个广播分组时,它向所有属于该生成树的特定链路发送分组。接收广播分组的结点则向在生成树中的所有邻居转发该分组(其接收该分组的邻居除外)。生成树不仅消除了冗余的广播分组,而且一且合适,该生成树能够被任何结点用于开始广播分组,注意到一个结点不必知道整棵树;只需要知道它在G中的哪些邻居是生成树的邻居。
    与生成树方法相关的复杂性主要是生成树的生成和维护。采用 基于中心的方法( center- based approach)建立一棵生成树时,要定义一个中心结点(也称之为 汇合点( rendezvous point)或 (core))。结点则向中心结点单播加入树(tree-join)报文。加入树报文使用单播路由选择朝着中心结点转发,直到它到达一个已经属于生成树的结点或到达该中心。在任一种情况下,加入树报文经过的路径定义了发起加入树报文的边缘结点和中心之间的生成树分支。这个新分支能够认为已被嫁接到现有的生成树上了。
  4. 实践中的广播算法
    在实践中,广播协议被用于应用层和网络层。 为了在 Gnutela对等方之间广播对内容的查询,使用应用级的广播。其中,在 Gnutella网络中的两个分布式应用级对等进程之间的一条链路实际上是一条TCP连接。 Gnutella使用某种形式的序号控制洪泛,其中使用了一个16比特标识符和一个16比特有效载荷描述符(它标识了Gnutella报文类型),以监测一个接收到的广播查询是否以前已经收到、复制和转发过。
    Gnutella也使用一个寿命(TTL)字段来限制转发一个洪泛请求通过的跳数。当一个Gmutell进程接收并复制一个请求时,它在转发请求之前减小TL字段。因此,一个洪泛的Gnutella请求将仅到达位于从该请求的发起者到给定数量(TTL的初始值)的应用级跳数范围内的对等方。 Gnutella f的洪泛机制因此有时被称为范国受限的洪泛。在OSPFRFC 2328路由选择算法和中间系统到中间系统(IS-IS)路由选择算法RFC 1142中,使用了一种序号控制洪泛来广播链路状态通告(LSA)。OSPF使用一个32比特序号,以及一个16比特年龄(age)字段来标识ISA。
    当到邻居的链路费用变化时,或当一条链路变化为通/断时,OSPF结点周期性地向与它相连的链路广播ISA。ISA序号被用于检测冗余的LSA,但也服务于OSPF中的第二项重要功能。使用洪泛方法,源在时刻t生成的一个LSA的到达可能晚于相同源在时刻产生的较新的LSA。源结点使用的序号使得一个较旧的ISA能够区别于较新的LSA。年龄字段起到了类似于一个TTL值的作用。初始年龄字段值被置为0,随着洪泛到每跳而被增加,并且当它位于一台路由器内存中等待洪泛时也会增加。

多播

多播( multicast)服务。使用这种服务,多播分组仅被交付给网络结点的一个子集。一些新兴的网络应用要求将分组从一个或多个发送方交付给一组接收方。
在单播通信情况下,接收方(目的地)的IP地址承载在每个IP单播数据报中并标识了单个接收方:在广播的情况下,所有结点需要接收广播分组,因此不需要目的地址。但在多播情况下,面对多个接收方。每个多播分组都携带所有接收方的IP地址。虽然这种方法对于少量的接收方可能是行得通的,但它不能很好地扩展到数以百计或数以千计的接收方场合;在数据报中编址信息的量将充斥该分组中有效载荷字段中实际可携带的数据量。还需要由发送方给出接收方的明确标识,使得发送方知道所有接收方的标识与地址。
由于这些原因,在因特网体系结构(还有其他体系结构如ATM中,多播数据报使用间接地址( address indirection)来编址。这就是说,用一个标识来表示一组接收方,寻址到该组的分组副本被交付给所有与该组相关联的多播接收方,且该组使用这个单一标识符。在因特网中,这种表示一组接收方的单一标识就是一个D类多播地址。与一个D类地址相关联的接收方小组被称为一个 多播组( multicast group)。
虽然多播组抽象是简单的,但它给人们(主机)(故意使用了双关语,英语中host有主机或主人之意)带来了一堆问题。一个组是如何形成,又如何终结的呢?如何选择组地址?新主机如何加入某个组(要么作为发送方,要么作为接收方)?任何主机都能加入个组(向该组发送或从该组接收)或者组成员资格会受到限制吗?如果有限制,由谁限制?作为网络层协议的一部分,一个组成员知道其他组成员的标识吗?网络结点相互之间如何进行交互,以向所有组成员交付一个多播数据报呢?对于因特网,所有这些问题的答案都与因特网组管理协议(IGMP)RFC3376有关。

  1. 因特网组管理协议
    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描述了由某个端系统发送的周期性状态更新报文的概念,并且建议使用这样的更新报文,状态能够在一次崩溃中丢失,接着自动地由后继的更新报文所恢复,即对该端系统来说所有都是透明的,并且不必调用任何显式的崩溃恢复过程。

  2. 多播路由选择算法
    在实践中,采用两种方法来确定多播路由选择树。这两种方法的区别在于:是用单一的组共享
    树来为组中的所有发送方分发流量,还是为每个独立的发送方构建一棵特定源的路由选择树。

    • 使用一棵组共享树的多播路由选择。如同在生成树广播的场合中,通过组共享树进行多播路由选择的基础是构建一棵树,该树包括了所有具有属于该多播组的相连主机的边缘路由器。在实践中,使用基于中心的方法来构造多播路由选择树具有属于多播组的相连主机的边缘路由器向中心结点(经单播)发送加入报文。如同在广播情况下,一个加入报文使用单播路由选择朝着中心转发,直到它到达已经属于多播树的一台路由器或到达该中心。沿着该加入报文走过路径的所有路由器,则将向发起该多播加入的边缘路由器转发接收到的多插分组。使用基于中心的树进行多播路由选择。
    • 使用一棵基于源的树的多播路由选择。组共享树多播路由选择构建单一的、共享的路由选择树,以路由所有发送方的分组,而第二种方法为多播组中的每个源构建棵多播路由选择树。在实践中,使用RPF算法(具有源结点x)来构造一棵多播转发树,以用于源于源点x的多播数据报。
  3. 在因特网中的多播路由选择
    第一个用于因特网中的多播路由选择协议是 距离向量多播路由选择协议( 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。通过考虑广播和多播路由选择,了解路由选择算法。


  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值