自治系统号(ASN)探讨

来源:百度文库 编辑:神马文学网 时间:2024/04/29 21:24:32
自治系统号(ASN)是什么,它在互联网技术中扮演了怎样的角色呢?本文将对作为互联网路由架构中关键元素之一的ASN的作用进行探讨。首先,我们将介绍AS号码空间如何构建以及ASN在域间路由环境下如何使用;然后介绍ASN号的消耗率;最后,我们将对ASN资源在何时耗尽的观点进行探讨。此外,为了在本文中把这个观点阐述清楚,下面将对互联网路由架构进行简述。
互联网路由架构
互联网路由采用双层架构体系。整个路由环境首先被分割成许多域,每个域都使用自己的内部路由环境。这些网域使用内部路由协议(通常称为内部网关协议[IGP]),该协议用于维护当前网域内部拓扑的完整映射表以及维护网域内任意两点间的“最佳路径”集合。虽然这种使用某一路由协议自动维护当前网络拓扑的全面视图的方法能够应用于相当大范围的网络路由,但是这种方法并不适用于整个互联网这种级别的网络。关于网络拓扑的精确信息仅在“局部”情况下有用,而在形成更大的网络拓扑视图时则需将这些信息忽略掉。常用的内部路由协议包括OSPF、IS-IS以及EIGRP。
路由体系的第二层为域间路由域。域间路由环境描述了网域间是如何互联的,但避开了维护各个域内的传输路径。在域间路由空间中,到某个地址的路径被描述成到达某个具有特殊地址前缀域的一系列网域的集合。当前使用BGPv4来维护域间路由。
每个路由域都是一个单一的行政域,它们按照统一的路由规则集运行并且各个域之间相互独立。在整个路由架构中,这些域是一个自治单元并且被称为自治系统(AS)。每一个自治系统都用一个唯一的自治系统号(ASN)来标识。
自治系统是什么?
在描述BGPv4的编号为RFC 4271[4] 的IEFT的文档中,我们可以找到关于自治系统的定义,这是众多定义中最好的一个,如下:
“自治系统的经典定义:自治系统是在单一技术管理体系下的多个路由器的集合,在自治系统内部使用内部网关协议(IGP)和通用参数来决定如何路由数据包,在自治系统间则使用AS间路由协议来路由数据包。自从这一经典定义面世,一个自治系统内经常会使用多个IGP协议,并且有时也会使用多种参数。在这里之所以要使用自治系统这个术语,是因为我们想强调这样一个事实:即使在一个自治系统内可以使用多种IGP协议和参数,对其余的自治系统来说,某一自治系统的管理都具有统一的内部路由方案,并且通过该自治系统要传输到的目的地始终是一致的。”
AS号码池
自治系统号(ASN)由16个比特组成,一共具有65,536个可能取值。
号码0被保留了,可能会用来标识非路由网络,此外,最大号码-65,536-也被保留了。在64,512到65,534之间的号码块被指定为专用。23,456被保留作为在ASN池转换时使用。除此之外,从1到64,511(除去23,456)之间的号码能够用于互联网路由。ASN号码是非结构性的,因为在ASN号码结构中没有内部字段,ASN也不具备汇总或总结功能。
在BGP协议中如何使用AS号
域间路由空间由两个部分构成:地址前缀和AS号码,这两个部分可以作为域标识符来使用。每个前缀都有一个起源域,该域被称为源AS,从源AS开始向整个域空间传播地址前缀的可达信息。
由于路由广播会在域空间里传播,这使得每个地址前缀都会积累一个关联的“AS路径”。当一个地址前缀广播传输经过某一域时,该域会将它的ASN加到这个地址前缀相关的AS路径中,以表示给该广播信息一个有效“签名”。在网络中的任意一点,AS路径描述了一个互联域的序列,该序列组成了一条从当前点到起源域的路径。如图1所示,图中AS1发起了一条关于地址前缀192.0.2.0/24的广播。而AS5则接收到了关于该地址前缀的两条GBP广播,一条的路径为(4,2,1),而另一条的路径为(3,1)
在AS路径列表最左边的数字是接收到地址前缀的自治系统的相邻AS号码,这一数字序列表示一个AS序列,更新信息会通过该序列传播。最右边的数字即最后一个ASN号是发起该地址前缀广播的AS系统,也即源AS。

192.0.2.0/24,AS路径(4,2,1)
192.0.2.0/24,AS路径(3,1)
图1:BGP中的AS路径形成
在域间路由中,AS路径的作用有两点:衡量路径长度和循环检测。
在BGP路径选择算法中,AS路径被用来进行路径衡量。当某个域接收到关于同一地址前缀的两条不同的BGP广播时,默认的GBP选择方法是将路径中的每个AS作为一个单一的长度计算单位来计算路径长度,并选取其中最短的AS路径广播。在图1的例子中,AS5会选择通过AS3到达源AS1的路径,而不是选择先通过AS4然后再到AS2这样一条更长的路径。
虽然在路由协议的范围内列举AS路径向量是得到通过路由域的路径成本的方法之一,但我们可以通过一种简单的路径成本计算方法,即对域转换次数进行计数来实现最佳路径选择功能,这类似于其他一些距离向量路由协议,如RIPv2采用的方法。但距离向量协议带来了“无穷计数”的两难问题。
为了阐明在BGP协议中对明确列举AS路径的需要,我们可以考虑一下当使用这种简单的路径成本计算方法代替AS路径向量时会发生什么。在图2所示的配置中,AS1对AS2发起了一个路由广播,AS2与AS3和AS4互相连接成一个简单的环形结构。当AS2接收到来自AS1的路径成本为1的广播时,它会将该广播转发给AS3和AS4,此路径成本为2。此时AS3和AS4都会将这一来自AS2的路径成本为2的广播选为它们的最佳路径,相应的AS路径为(2,1)
但现在假如AS1和AS2之间的连接被断开了,也就是AS1对AS2来说不再可见并且它取消了通过AS1的地址前缀的最佳路径,然后AS2停止向AS3和AS4转发路径广播。但此时AS3已经向AS4发出了路径成本为3的广播,由于来自AS2的广播被取消,AS4就会将这条成本为3的路径选为它的下一条最佳路径。然后AS4会将这一地址前缀以路径成本为4的广播向AS2发送,此时对应的AS路径为(4,3,2,1)
此时,由于在广播中没有明确的的AS路径信息,AS2不知道此时的广播实际上是一个循环。因此AS2会将这一成本为4的路径作为它的最佳路径。然后AS2又向AS3发送成本为5的广播,对应的AS路径为(2,4,3,2,1)。AS3会使用这一新的路径来更新它到AS1的最佳路径并且将此更新发送到AS4,依此类推。这一过程会一直持续直到路径成本达到某一定义的最大值。路径成本的最大值越高,检测出这种环路情况的时间就会越长;而该值越小,协议能够覆盖的网络范围就越小。因此在设置最大路径成本参数时需要很仔细,并且协议运行时在环路检测方面可能会收敛得非常慢。

图2 距离向量协议中的环路形成
我们可以采用一个完整的AS序列来代替这种路径成本计数方法。以图2为例,当AS2撤销它到AS3和AS4的路由时,AS4仍然会选择它监听到的另外一条路由路径,但此时选择的地址前缀的路径则变成(3,2,1)。当AS4尝试将该广播信息向AS2发送时,AS2就会在这一关联AS路径中检测到它自己,从而拒绝这一广播信息。与此同时,AS3也会取消向AS4发送广播信息,至此AS1的地址前缀就在整个路由系统中被抛弃了。在这种情况下, AS路径扮演了有效的路由环路探测器角色。
在BGP协议中,ASN以及AS路径向量的使用有效地解决了环路检测这一经典问题,并且还提供了一种简单且有效的路径选择流程。
谁需要AS号?
并不是每个网络都需要有自己的ASN号,使用ASN的指导原则是,将其用于描述各种域间路由策略,而并不是每一个网络都有描述其独特路由策略集的需求。

剥离专用AS
图 3 专用AS号码的使用
如果某一网络具有两个或多个上行传输连接,则它使用自己唯一的ASN的可能性就更大。但此种情况也并不总是需要分配一个特殊的ASN号,这取决于该网络是否需要描述特别的路由策略。如果该网络没有对输入流量需要使用哪些上行服务有特别偏好,该网络也可以对它的每个路由连接使用一个专用ASN号。在外部路由看来,这种情况下的地址前缀源于多个自治系统。
而如果网络具有多条达到路径,并且在路由系统中需要将具有相同源AS的不同路径区分开 (即需要描述路由策略),则该网络需要在域间路由系统内使用一个唯一的ASN。
一个ASN能否被分割用于多个独立子域?
很多情况下,会有很多离散网络分布于多个不同地点。如果这些地点都由一个单一实体管理,则人们更希望对这些域使用一个单一ASN。这是可行的,但在进行路由配置设计时需要作进一步的考虑。图4描述了AS1的两个不同子域,它们在内部并不是互联的。

图4 分割AS
在该图中,AS1(A)向AS2广播地址前缀192.0.2.0/25,这一广播信息被传播到AS2、AS3和AS4。当AS4霉悴プ⒏鳤S1(B)的另外一个子段时,由于关联的AS路径(4,3,2,1)表示该路由已经通过AS1了,所以路由器会拒绝该广播。同样地,AS1(A)的首段也会拒绝来自AS2的地址前缀为192.0.2.128/25的广播,因为它的关联路径(4,3,2,1)也表示这形成了一个环路。为了恢复AS1不同部分的完整连接,AS1需要在它的边缘配置静态路由。如果AS1(A)配置了一个指向AS2的、针对192.0.2.128/25地址前缀的静态路由,并且AS1(B)也配置了一个类似的通过AS4、针对192.0.2.0/25地址前缀的静态路由,则该配置能够实现完整连接。
在更复杂的配置中,如果网络的每个子段都具有多个连接,则静态路由配置也会变得更复杂。然而,只要经过仔细的配置,一个单一的ASN是能够分布于多个不同网络的。
AS路径预先设定和路径破坏
在GBP协议中路径选择的根本机制是AS路径长度。当有两个广播路径到达某个特殊地址前缀时,默认的BGP选择算法会选取其中具有较短AS路径长度的一个。
对于一个多宿主域而言,它可能更倾向于让其他域使用一个特定路径向它发送数据。这是因为本地域会优化多个上游供应方间的流量传输成本,均衡多条路径间的流量负载,或者在多条供应方上行路径上建立多种形式的主用及备用关系。
虽然这种策略倾向能够通过BGP群来建立,但BGP群信令要求各个网络域之间协同工作并且对群值具有一致的解释。描述这种策略倾向性的一种更粗略的方法是通过AS路径预先设定来实现,这种技术通过在某一广播地址前缀的AS路径中增加额外的ASN,来扩展前缀广播的路径长度。通常使用本地ASN进行AS路径预先设定。
在图5所示的例子中,AS1希望描述主要接收通过AS2的输入流量并且只是将AS3作为备份链路的策略。为通过AS路径预先设定达到这一目标,AS1在向AS3发送的AP路径广播中将自己重复了两次,以便人为地延长了AS3传输路径。AS5本来是应该使用从AS3到AS1这条更短路径的,由于AS1人工延长了它到AS3的路径长度,使得AS5就会选择通过AS4和AS2到达AS1这条传输路径。

正常广播          选择到AS1的路径
预先设定广播
图5 预先设定AS路径
当然,预先设定AS路径并不是一种严密的技术,并且在实际中经常会导致一些让人惊讶的结果。进行流量规划的一种更可靠的方法是,在通过BGP群时在地址前缀广播中添加额外的信号。
另外一种更巧妙也是更富有争议的路径预先设定技术就是所谓的AS路径破坏,此时自治系统在AS路径中使用一些其他值来预先设定路径。如图6所示,AS1希望在任何情况下AS5都不要通过AS3向它发送数据,在这种情况下AS1可以将AS5作为其向AS3发送广播中的一个预先设定值。
当AS5接收到这个广播时,由于在AS路径中发现了它自己的ASN号,AS5将拒绝该广播并且会选择通过AS4和AS2到达AS1这条传输路径。上面所举的这两个例子的差别在于,当AS1和AS2之间的连接被断开后,如果使用了AS路径破坏技术, AS2、AS4和AS5都不能够达到AS1。

图6 通过AS路径破坏来预先设定路径
AS号码消耗
在这一部分我们将目光转向ASN号码资源的消耗,并且预估何时号码资源将被耗尽。在64,510个可用的AS号码中,截至到2006年1月,我们已经分配了大约40,000个号码,这已经消耗了过半数的号码池。因此立即产生了两个问题—在号码池完全耗尽前我们还有多少时间,以及我们该如何选择一个能够包含更大域间路由环境的扩大的号码池?
造成AS号码消耗的因素
在进一步讨论这两个问题的细节前,了解影响AS号码消耗的因素会对我们有所帮助。
从直觉角度来看,认为互联网会从数万个不同的路由域演进到数十万乃至数百万计的路由域肯定是不切实际的。互联网中有效的互联网服务供应商(ISP)的数量与被分配的ASN数量之间应该保持合理的关联关系。如果我们预测未来需要数十万乃至数百万的ASN,也即意味着我们认为未来的服务供应商行业将持续分裂成巨大数量的小企业,这些小企业互联构成互联网,这种假设是不大可能实现的。
影响ISP行业的根本因素在于经济规模。由于经济规模的原因,较大的ISP一般能够更有效地使用资源,并且有能力以具有竞争力的价格维持自己的市场份额,以保持合理运营毛利。而较小的服务供应商则倾向于机会市场,并且在竞争的供应市场中很容易受到价格压力的影响,这些原因使得在服务供应市场中面临着持续整合的压力,因此整个市场趋向于整合为数量更少的较大服务供应商。
如果认为在用自治系统数量与服务供应商在数量上保持基本一致,这一关于市场动态的观点会导致一个新的观点:即服务供应商数量处于稳定状态,即新供应商进入市场的速率与较小供应商合并为较大供应商的速率一致;或者由于互联网在全球基础上的持续扩展,这一动态环境有相对较小幅度的增长。
现实中并非如此,实际上我们看到的是新ASN资源的持续消耗,消耗速率大约为每年3500个ASN号。并且从2002年以来(见图7)该速率一直很稳定。因此,有一些其他的因素在影响着AS号码资源的消耗率。
其中的一个因素就是在网络边缘的多宿主主机的使用。许多具有重要商务的终端站点网络需要确保互联网连接,而满足这一连接要求的常用方法是使用两个或者多个上游服务供应商。在这种情况下终端网点需要对每一个上游供应商描述不同的路由策略,可以通过使用它自己的ASN号和对每一个上游供应商使用BGP协议来描述路由策略来达到此目的。
在其他情况下也可能使用AS号码。在多协议标签交换(MPLS)第三层网络中, 为VPN客户端网络生成路由识别符的一种方法就是,使用具有序列号的、连接VPN主机的AS号。在VPN网络中这种对AS号码的半专用使用在多大程度上加大了ASN的消耗率是很难估计的,原因很简单:这些AS号码的使用一般是不可见的。
甚至在公共互联网中也有一些因素导致了AS号码的消耗。具有多种产品组合的ISP需要对各种产品系列制订不同的路由策略,或者是在不同的网络覆盖地区制订不同的路由策略。这也是通过对每一个路由策略集分配不同的AS号来实现的。
导致AS号码资源消耗的另一个相关原因是目前还没有AS号码回收和再利用的机制。在目前的框架下,继续AS号码分配是没有直接成本的,目前AS号码分配的总体特征沿用的是“一次性分配、永久使用的”分配模式。当AS号码不再继续使用时,它们也不会被回收到未分配号码池以便能够继续分配并使用。
综合以上所有因素,我们可以得出这样一个结论:持续的AS号码资源消耗是有很多原因的,而不仅仅与服务供应商行业的市场动态有关。
据此,我们也可以更肯定的得出这样一个结论:一直以来影响AS号码消耗的各种因素将在近期持续发生作用,这使得我们更有把握去采用这样一种预测技术:使用近期的消耗数据来描述消耗趋势曲线,从而可以预测未来的号码资源需求。我们将使用此项技术对AS号码消耗数据进行处理,从而预测当前AS号码池资源被耗尽的时间。
AS号码池状态
一共有65,536个AS号码。如前所述,其中的1,026个号码被保留,它们也就不能在公共互联网中使用。这使得在公共互联网中一共有64,510个可用号码。
互联网号码分配机构(IANA)负责AS号码池的管理,当地区互联网注册机构(RIR)的可用号码资源低于某一阈值水平时,IANA就会向它们分配1,024个AS号码段。
截止到2006年1月,IANA已经分配了39,934个AS号码,对这些已分配的号码还进行了进一步的分类。由RIR持有的一个号码工作池用于分配给当前ISP,在那些已分配的AS号码中,其中一些是在公共互联网的域间路由表中可见的,而另外一些则是不可见的。RIR号码池分类如下:已分配但未被广播的,已分配并且已被广播的,截止到2006年1月的数据如图7所示。在34,827个已分配的AS号码中,已经广播了21,191个号码,此外还有12,636个号码是已被分配但目前在BGP路由表中还没有广播的。

AS号码池状态
IETF保留
IANA池
RIR池
已分配
已广播
池大小
图7 已广播、未广播和未分配的AS号码池状态
RIR向ISP和终端用户网络分配ASN。图8按时间顺序给出了RIR分配AS号码的累积和。该时间顺序显示了从1999年到2001年末互联网大发展期间AS号码分配急剧增长的趋势。而2002年初互联网发展的变化也可通过AS分配率的变化在该图上明显可见。

RIR分配总数
图8 RIR分配
BGP AS广播
除了AS号码分配率外,我们还可以从域间路由表中得到关于ASN的更多数据资源。从1997年以后,人们就对公共互联网中域间路由空间中广播的不同AS号码数进行了定期测量,图9给出了已广播的ASN数目和未广播ASN数目的时间变化曲线。

已广播的AS数量
未广播的AS数量
图9 已广播和未广播的AS号码
AS号码消耗预测
现在,我们能够对AS号码消耗进行一些预测。我们采用的方法如下:使用过去三年(从2003年1月开始)AS号码消耗的数据来进行分析,利用关联指数函数对这三年的数据进行拟和,以便能够得到一个变化趋势函数。然后将该趋势函数在时间上向前拓展,这样就能够预测AS号码将在何时达到某一阈值点。此外,根据本文的需要,在操作中我们还考虑了许多其他相关细节,包括使用指数函数来拟和过去三年的ASN号码使用率(参见http://www.potaroo.net/tools/asns/),以便能够正确地得出我们的研究成果(见图10)。

日期
IANA 未广播
分配 RIR池
已广播
图10 AS号码消耗预测模型
从这个模型中我们可以发现ASN的消耗一直在稳定的加速增长,并且可以预计在2010年末将没有可用的AS号码可以分配给ISP。
该模型意味着,在2010年末,互联网可能会使用一个新的不依赖于AS号码的域间路由协议,而更有可能的是,互联网应该使用一个大于16比特AS号码池的BGP协议。第一个选择看起来有些不切实际,因此就不作过多阐述了。虽然第二个选择更简单并且也是更让人容易接受的方法,但考虑到互联网组成域的多样性和域间空间的增长规模,它仍然需要一段时间才能付诸实施。
当着手向更大ASN池的迁移时,我们应该记住每天都有更多的网络需要将其已部署的BGP协议实例迁移到更长的ASN字段。
这种迁移包括如下几个步骤:
完成BGP中更大ASN字段的相关协议标准 生成支持该协议标准的、可实现的BGP代码 通过多种方式来测试代码,要对这些代码的正确运行和互操作性以及相关迁移步骤的正确性和可行性两方面进行测试。 开发必要的基础设施支持系统来管理这些新的号码池的分配 推动该协议的部署,以便在现有AS号码池耗尽前,这种容量更大的ASN部署已有良好开始。
即使是积极的迁移计划,在互联网这种如此庞大和多样化的网络中,也需要很多年才能有所建树。对我们来说,谨慎的做法是认为至少在2008年而不是2010年ASN号码将耗尽,这使得我们有大约两年(剩下10,000个AS号码)来完成这一任务。
32比特AS号码
在文章的这一部分,我们来关注一些当前的关于更大AS号码池的建议。从2005年10月起,定义这一建议的文档是一份IETF互联网草案:draft-ietf-idr-as4bytes-12.txt。
这份建议草案将AS号码池的大小从16比特扩展到32比特。从数字上来看这一扩展将AS号码空间从65,536个号码扩展到了4,294,967,296个号码。从当前ASN号码的使用和当前BGP路由协议的规模属性以及在域间路由中对AS的使用来看,具有43亿个号码的号码池可以很轻易的覆盖更大级别的域网络环境和域间互联密度。这种规模的号码池也将比当前我们对BGP协议容量规模的估计超出两个数量级。
并且该草案还建议保留32比特ASN号码池的首个65,536号码块,以符合16比特号码分配方案。
我们可以采用一种新的格式来描述32比特ASN号码值,它的首个65,536号码块采用0.0到0.65535形式描述,而第二个65,536号码块则为1.0到1.65536,依此类推。因此在这里我们使用这样的数字格式:<高位16比特>.<低位16比特>
在迁移到32比特自治系统号的过程中,有哪些问题是需要我们关注并特别说明的?
很显然,首先需要对路由协议进行一些修改,并且不要期望域间迁移是有序的。实际上更可能出现的情况是域迁移是分散进行的,各个域分别在各自确定的时间内升级它们的BGP平台以支持32比特AS。那些目前使用16比特AS的域可能比较不愿意过早升级到32比特系统,而那些分配了不可映射到16比特AS的32比特ASN的域会发现,它们从一开始就必须支持32位ASN号。
32位ASN对BGP的改变
BGP协议包括两个主要部分:与对等BGP讲者展开一次BGP会话以及随后传输描述地址前缀可达性和地址前缀关联属性的协议对象。这两个部分都包含AS号码,并且考虑到当前协议的改变,对BGP的这两部分都要求作一些修改。因此,这里需要考虑的消息对象为“BGP OPEN”和“BGP UPDATE”两个消息。
对BGP的修改产生了一个“新”的能够支持32比特ASN环境的协议。这些修改的核心任务是去定义供所有新的GBP讲者使用的、用于彼此会话和传输所有32比特ASN号码的机制。然而,由于互联网是如此庞大,这使得我们不可能指定一个“标志日”,在这天要求所有BGP讲者都从“旧”BGP切换到新BGP。因此,就有必要在新的BGP中定义协议交互,这是因为互联网的迁移是渐进的且本质上是不协调的。新BGP讲者需要与旧BGP讲者建立会话,旧BGP讲者当然也需要与其他旧BGP讲者进行同等会话。与32比特AS路径相关的信息必须通过只能支持16比特AS路径的网络传输。换句话说,32比特AS信息需要传输给旧BGP讲者并在旧BGP讲者间传输。
一般采用的迁移方法是在新旧BGP边界保留AS路径长度信息,这是由于一些32比特AS号码信息不能被正确的映射到16比特AS路径。为了保留32比特号码信息—阻止32比特AS形成环路的必要步骤—32比特信息在通过旧的传输路径时被保留并且在重新进入新BGP区域时被恢复。

32比特AS范围    16比特AS范围         32比特AS范围
映射的16比特AS路径  扩展的16比特AS路径
32比特AS路径
保留的32比特AS路径    保留的32比特AS路径
图11 16比特和32比特AS区域
开始一个BGP会话
开始BGP会话的建议方法是以与旧BGP协议兼容的方式初始化一个新BGP会话,并且告知远程对等端,如果它也是新BGP讲者,则它能开始一个新BGP会话。而与旧BGP建立会话的新BGP讲者则会忽略自己的新特性,以旧模式开展它们的BGP对等会话。新BGP对等端肯定会对新特性作出响应,它们之间的BGP会话则运行在新模式下。
BGP OPEN 消息包括一个定长的16比特的My_AS字段和一个潜在的包含能力查询部分的可选参数段。为了确保新旧讲者能够通信,16比特的My_AS字段需要在新BGP中予以保留,即使可选参数段包含了开始新对等会话能力的信息也是如此。这看起来与第一种情况是矛盾的,因为OPEN 消息包含了16比特 ASN和32比特AS能力查询信息。根据新讲者使用一个来自源号码池(即My_AS号码范围在0.0 到 0.65535之间)的可映射ASN号还是使用来自更高编号的32比特号码块的号码值,来选择建议的OPEN 消息机制。在第一种情况中,OPEN消息使用My_AS 字段里的16比特映射值(去掉了高位16比特的0值),而在第二种情况里,BGP讲者在My_AS中使用了为此目的(即AS号23456)而保留的特殊16比特值。在这两种情况下,可选参数段会包含一个能力代码,用来表示本地BGP讲者能够支持32比特ASN(能力代码为65)
这种做法的一个副作用就是对旧BGP域而言,AS 23456是一个连接到许多不同位置的域间网络。虽然对于旧BGP域来说这并不会引发协议问题,但通常会引发一个潜在的问题,即将23456作为32比特AS替代令牌重复使用,这在旧BGP的角度看来,互联网的BGP视图就有些混乱了。
该能力交换使用了RFC 3392中的一个协议。新BGP讲者在OPEN消息中添加了一个额外的可选能力字段。32比特AS能力代码65会将本地32比特ASN值作为它的能力值而携带。在OPEN消息体的My_AS 字段是本地32比特自治系统编号的截断(在32比特AS可映射的情况下),或者是23456这一特殊AS号码值的基础上, 该能力值对于一个新对等端来说会被解释为远端的实际AS号,
BGP UPDATE消息
对于一个新BGP会话(即32比特 ASN对32比特ASN),协议的变化在于在UPDATE消息的AS_PATH属性中使用了32比特的ASN。所有16比特长的AS号码值都在高位16比特填充零,如果使用了AGGREGATOR属性,这就类似于携带了一个32比特值。所以在32比特对等会话中,所有的16比特信息都被映射为32比特ASN (如图12)。

旧              新
AS路径(1)
图12 旧BGP到新BGP的AS路径映射
在这种方式下,在将16比特AS信息转换为32比特域时,AS路径长度得以保持不变。
第二种情况发生在旧BGP与新BGP对等会话时。对于来自16比特路径并且没有额外的32比特信息的处理,我们已经给出了简单例子来说明,在这种情况下16比特值会被以在高位16比特加零的方式简单地映射为32比特值。但如果是32比特信息被传输回16比特AS时将如何处理呢?
这种情况的处理包括两个部分:首先需要创建一个等价的16比特AS路径,然后将32比特AS路径信息打包,以便它能够在16比特域中传输并且能够在随后进入32比特域后重组。在第一部分,分成两种情况来建立等价路径信息:如果32比特ASN的高位16比特是全零,只需要将高位剥离即可;如果AS路径包含一个或多个具有非零的高位16比特的ASN号,则使用23456来替换AS路径上的这些ASN号。这种处理方式使得AS长度得以保持,并且可以避免16比特域的无穷计数环路的产生。
第二部分为将32比特路径封装入旧GP会话中,要求该封装能够在随后进入的任何一个32比特路由区域的边界被解封并还原。这里的建议方案需要在旧BGP路由区中携带新的传输群属性,这些属性被定义为传输属性,并且应无需修改,即能在旧BGP对等会话中传输。需要注意的是这并不是修改协议,但这确实要求在旧BGP中明确地将该属性配置为传输群。
建议机制是一个叫做“NEW_AS_PATH.”的扩展群属性。当一个新BGP与一个旧BGP对话时, 新BGP将它自己的AS号码值预先加入到AS_PATH里,并且将该信息复制到NEW_AS_PATH属性中。它然后将32比特AS路径转换成16比特等价路径,如果32比特号码的高位16比特为全零时则直接截断为16比特值,如果非零则使用保留的AS号码23456来替换当前号码。
在旧BGP中的传输不会更改NEW_AS_PATH的值,并且将预先约定的16比特AS值填入AS_PATH中。换句话说,旧BGP仍然象从前一样运作,NEW_AS_PATH在旧域中作为一个透明比特块传输。

新              旧
AS路径(1.10)
映射的AS路径
新AS路径
图13 新BGP到旧BGP的AS路径映射
如果存在NEW_AS_PATH属性并且下一个转换是从旧域向新域切换时。此时新BGP讲者会认为这是来自旧BGP讲者的AS 路径,并且会通过给每个AS号码加零的方式将16比特的AS值转换为32比特。然而,在这种情况下新BGP讲者会使用尾部由NEW_AS_PATH指定的值来重写AS号码。籍此,进入16比特域的32比特AS路径即为相应的16比特AS传输路径。NEW_AS_PATH属性然后从BGP UPDATE中删除,得到一个和AS_PATH属性一样的完整32比特路径。这一措施确保了在混合BGP环境中新的32比特域和旧的16比特域都能够准确的检测环路(如图14所示)。

旧              新
AS路径(1,23456,3,23456)
新AS路径
图14 旧BGP到新BGP路径映射
如果在一个由新旧两种路由区域组成的混合区域中存在路由环路,那么会发生什么情况? 在由旧到新切换时,对源32比特AS路径的恢复机制确保会抛弃潜在的环路,这是因为16比特AS可以在16比特 AS_PATH属性中见到自己的AS号,并且32比特 AS也可以在32比特 AS_PATH中见到它的AS号。迁移映射确保了BGP会检测到潜在的路由环路。
进行AS路径预先设定的能力在这种混合的新旧BGP环境中也是不变的。自治系统只需向平常一样简单地在AS_PATH中预设其本地AS值。在需要预先设定的新旧区域转换边界,也只需要向前面介绍的那样将预设的AS路径映射到NEW_AS_PATH中。
在本文的开始部分,我们介绍了比较少用到的AS路径破坏方法,在该方法中预先设定一个不同的ASN值,以便确保某个特别的广播不会被远程AS接受。对新BGP讲者来说,这种方法的应用没有任何改变,而对于旧BGP讲者,则AS路径破坏方法只能对16比特AS使用,这是因为旧BGP讲者无法知道NEW_AS_PATH的结构或内容。
另一使用到ASN的BGP协议的部分是AGGREGATOR属性段。当某一AS将两个或两个以上的地址前缀组合成一个单一的汇聚前缀(实际上该前缀经常被称为“代理汇聚”)时,会将该属性附属在一个更新消息中。汇聚AS的ASN以AGGREGATOR属性的形式附加到汇聚前缀广播中。当广播信息通过转换点时,可以采用相同的ASN转换技术来处理AGGREATOR属性。在进行“新域到旧域”的迁移时,如果AGGREGATOR可以被截断为一个16比特值,则不需要再进行其他的处理,否则需要将32比特 AGGREGATOR 改写为一个NEW_AGGREGATOR属性并将值为23456的16比特值填入AGGREGATOR属性中。在由“旧域到新域”迁移时,如果定义了NEW_AGGREGATOR,则需将其属性复制到AGGREGATOR属性中;否则在首部用零填充。
迁移
计划中的迁移是相对平稳进行的。能够在网络中以零散的方式来部署新BGP讲者,并且不需要修改旧BGP讲者。BGP UPDATE消息的大小相对较长,这是因为在新BGP中的AS PATH属性以及加入到旧BGP环境中的NEW_AS_PATH属性的长度增加了,但这应该不会造成大的影响。
在所有常见的情况中都会对BGP环路预防进行充分的说明,而在BGP平台中已不再需要对此作过多的考虑。
这也就意味着可以进行相对平稳的迁移。由于32比特 ASN号码部署在网络的其他地方,因此旧BGP讲者不需要迁移到新BGP,旧BGP只需要不作任何修改地传输NEW_AS_PATH更新信息就可以了,然后32比特路由域就会以与16比特路由域完全一致的方式进行环路检测和最短AS路径选择。只有当使用不可映射的32比特ASN号码对本地AS进行编号时,才需要部署新BGP代码。
AS号码的替代品
从目前来看构想一个会耗尽32big ASN号码空间的环境毫无疑问是一个富有挑战的任务,但也有人说最初BGP协议的设计者选择使用16比特 ASN号码时也持有同样的想法。当然,32比特号码池不是16比特号码池的两倍—而是65,536倍。这使人们确信在目前想要耗尽该号码池是一个极富挑战的任务。
通过简单的扩展号码空间的方法,对BGP的运行配置、存储、消息大小以及处理开销等方面都是影响最小的。除了号码空间范围和一些迁移时期的辅助考虑外,不再有其他过多的改变。
当然,仍然可以使用其他标记空间,并且也可以使用相同的迁移方法切换到不同的标记方案。ASN的唯一意义在于它的唯一性,此外在BGP协议中其他形式的名字空间也可以具有同等的功能。人们可以使用域名,URL,公共密钥的定长散列,公共密钥或者甚至是IPV6地址等字符串来作为区分AS的标志。
目前协议中没有直接规定ASN号码的使用范围,也没有要求需要持续地使用号码标记符,此外,也没有要求使用以定长编码的号码值。
然而,目前的方法会增加BGP UPDATE的大小,提高存储需求以及增加BGP处理开销。身份识别越复杂,BGP配置的任务也就越复杂,并且也会提高出错的概率。从其他名字空间,比如域名或者派生URL“借用”AS标记符时,我们会相信在此基础上派生出的识别符的名字空间是内在稳定的和唯一的。然而有时这种信任却是错误的。
数字通常是最简单的识别符。使用数字这种方法也是对现有BGP讲者影响最小的,它不要求改变现有使用16比特ASN号的路由域和旧BGP对它们的路由环境进行任何的改变。它提供了灵活,有序并且对现有运行影响最小的迁移方案。
总结
我们肯定会消耗完目前可用的16比特ASN,而象互联网这种规模的行业已经不能像过去那样通过灵活地调整,来缓解这种情况。目前我们需要对域间路由空间等基础组件的改变提出长时期的预先警告,以便我们能够在将各种变化集成到生产环境之前,将它们集成到各种过渡部署和测试周期中。首先第一步就是以互联网标准的形式完成该方案的技术规范,将现有BGP产品升级到支持32比特ASN并完成其生产和发布。如果我们在近期就开始进入迁移流程,那么在耗尽现有16比特ASN空间前,我们仍然有时间来很好的完成迁移。