BGP设计与实现

978-7-115-28589-8
作者: 【美】Randy ZhangMicah Bartell
译者: 黄博葛建立
编辑: 傅道坤王旭丹

图书目录:

详情

本书介绍了BGP特性及其应用,其中包括BGP的基本特性、路径属性、路径选择算法,BGP策略控制技巧,以及如何设计大型企业和服务提供商的BGP网络,同时还涉及多协议BGP在其他领域中的应用。通过本书的学习,读者可以掌握设计与部署BGP时所需要的知识。

图书摘要

ciscopress.com

BGP设计与实现

BGP Design and Implementation

〔美〕Randy Zhang, CCIE #5659 Micah Bartell, CCIE #5069 著

黄博 葛建立 译

黄博 审

人民邮电出版社

北京

本书详细介绍了BGP特性及应用。全书共分5个部分,共12章。第一部分为理解高级BGP,其中第1章讲解了BGP的基本特性,并比较了BGP和IGP的特性。第2章回顾了BGP的路径属性,在此基础上讲解了 BGP 的路径选择算法;同时较为深入地介绍了BGP进程和内存使用、路由选择信息库以及IOS的交换特性。第3章主要阐述了BGP性能调整的内容,包括有关TCP的考虑、队列优化、BGP更新报文生成、性能调整的相互依赖性、BGP网络性能特性等方面的内容。第4章详细阐述了 BGP 若干策略控制技巧,包括正则表达式、加强 BGP策略的过滤列表、路由映射、策略列表、过滤处理的顺序等。第二、三部分介绍了设计企业和服务提供商BGP网络,这两部分的第5章至第9章是本书的核心,详细分析了企业的和运营商的BGP网络设计,内容包括若干BGP架构及其相互比较、企业网络的Internet连接性、可扩展的iBGP设计和实施指南、路由反射和联盟迁移策略、服务提供商网络架构。第四部分介绍了实施BGP多协议扩展,这部分的第10章到第12章跳出了传统的BGP领域,扩展地讲述了多协议BGP在其他领域的新应用,包括 MPLS VPN、域间多播、IPv6、CLNS 等方面的知识。第五部分为附录,提供了与本书内容关系密切的资料。

本书层次分明、阐述清晰、分析透彻、理论与实践并重,既深入讲解了传统的BGP知识,又讨论了BGP的新特性及IOS的新发展,非常适合于ISP网络管理员、BGP网络的设计及实施者以及希望深入研究BGP的读者。

Randy Zhang,Ph.D.,CCIE #5659,是 Cisco 公司高级服务组(Advanced Services,AS)的网络咨询工程师,为 Cisco 公司战略性的服务提供商和企业客户提供技术支持。他帮助过许多这样的客户进行大规模的BGP和MPLS网络的设计、迁移和实施。在加入高级服务组之前,他是Cisco公司的高级软件QA工程师,研究领域是 Cisco 6x00系列IP DSL交换机中的IP路由选择和MPLS,他也参与了其他很多项目。Randy Zhang在不同的领域已经撰写了超过30篇的著作。

Micah Bartell,CCIE #5069,是Cisco 公司的网络咨询工程师,是高级服务组里的 ISP 专家(ISP Experts)组的成员之一,为 Cisco 公司战略性的服务提供商和企业客户提供技术支持。在大规模IP网络设计领域,特别是在BGP、IS-IS和IP多播方面,他是一位公认的专家。此外,Micah Bartell 通过国际标准化组织(International Standards Organization,ISO)和 Internet工程任务组(Internet Engineering Task Force,IETF)参与到了一些标准化制订的工作之中。他还是ISO/IEC IS 10589 的编辑。

Juan Alcaide,1999 年加盟 Cisco 公司,从事 BGP 可扩展性的研究工作。自那时以后,他就一直在 Cisco 技术支援中心(Technical Assistance Center,TAC)的路由选择协议团队中工作。目前,他是一名网络咨询人员,为大型ISP提供支持。

Jonathan Looney,CCIE #7797,是 Navisite 公司的一位高级网络工程师,在那里,他为客户设计和实现了自定义的网络解决方案,还为公司设计和实现了15 个数据中心。在企业网和服务提供商的网络环境方面,他拥有超过 5 年的实施和维护 BGP的经验。在Navisite公司供职之前,他先后在一个ISP和一所大型的大学里工作,在那里,他设计和维护了所在单位的网络。

Vaughn Suazo,CCIE #5109,是一位在技术领域工作了 12年的技术行家,在服务器技术、局域网/广域网和网络安全方面经验丰富。他取得了路由选择和交换、安全的双 CCIE 证书。Vaughn Suazo 在 Cisco 公司的职业生涯开始于1999年,并且一开始就为网络服务提供商客户提供技术支撑和工程支持服务。在加盟Cisco公司之前,他为一些技术公司工作,并为Tulsa和Oklahoma城区的很多企业和商业公司客户提供网络设计咨询服务、网络部署前后的技术支持服务以及网络审计服务等。

献辞

Randy Zhang:献给 Susan、Amy 和 Ally,感谢她们永远的关爱、支持和耐心。

Micah Bartell:献给我的父母,Merlin 和 Marlene,感谢他们这些年来的支持。

致谢

本书是我们需要感谢的许多人共同努力的结果。我们要对很多同事表示深深的谢意,他们在时间紧迫的情况下对本书提供了详细的技术评审——特别是Rudy Davis、Tony Phelps、Soumitra Mukherji、Eric Louzau和Chuck Curtiss。我们也要感谢Mike Sneed和Dave Browning,感谢他们的鼓励和支持。

我们非常感谢Cisco Press的一些友善的人们,是他们使本书的出版成为现实。John Kane在项目的每一个阶段都耐心地指导我们。他的鼓励和指导使得该出版项目减少了一些挑战性。Dayna Isley 和Amy Moss是两位很有才华的编辑,他们帮助我们采用正确的方法对书稿进行编辑并加入一些评论,并在手稿修订过程中给我们提供了详细的注释和建议。我们也要感谢Brett Bartow、Chris Cleveland和Tammi Ross,感谢他们在项目初期给予的支持和配合。我们还要对3位技术审稿者——Juan Alcaide、Jonathan Looney和Vaughn Suazo表达谢意,他们提出了有益的评论和建议,给本书带来了很多改进。

Randy Zhang:我特别要感谢我的家人、朋友、同事和所有其他这些年来一直帮助和鼓励我的人。

Micah Bartell:我想感谢我的家人和朋友——特别是 Adam Sellhorn和Jeff McCombs,感谢他们对该图书出版项目的支持。我也要感谢Tom Campbell和全球Internet网络运行中心(Global Internet NOC)的其他朋友,他们使网络技术从一开始就变得十分有趣。最后,也是最重要的,我要感谢上帝给了我编写本书的智慧和机会。

这是一本内容非常精彩的书!

熟悉网络的人几乎都知道 Cisco Press 2000 年推出了 Sam Halabi与Danny McPherson合著的《Internet Routing Architectures, 2nd Edition》(本书中文版已由人民邮电出版社出版)一书,这本书一度被业界视为BGP的Bible,而且直到现在仍备受推崇。2001 年,Cisco Press 又推出了 Jeff Doyle 与 Jennifer DeHaven Carroll 合著的《Routing TCP/IP,Volume II》(本书中文版已由人民邮电出版社出版),这本书的前半部分主要以案例的形式来讲解 BGP 的策略工具的应用,深入浅出。本书从工程设计和实践的角度出发来讲解 BGP,毫不夸张地说,这本书就是新时代、新发展环境下的BGP的Bible。

本书不是BGP的入门指南,而是BGP的高级理解,BGP工具的高级使用技巧。书中大量的图例、例题、案例有助于读者深入地理解书中的内容。内容新是本书的另一大特色。例如,第2章讲解了IOS的交换技术,并对BGP的内存使用做出了估算,为以后的内容打下了基础。第3章BGP性能调整的主题对于优化BGP来说是绝对必要的,但对于绝大多数网络工作者来说又是相对陌生的,作者在这里做了全面的讲解。又如,在第9章“公共对等安全考虑”一节中关于带宽盗用的问题确实对很多人来说十分新奇。

美国 Cisco Networkers 2004 大会上关于 BGP 的技术交流文档中推荐了这本书(见http://www.cisco.com/warp/public/732/Tech/routing/docs/deployingbgp.pdf文档第60页)。这在一定程度上反映了业界对本书的认可程度。

本书的译者中,一名工作于四川省创意技术发展有限责任公司,这是一家优秀的网络集成商,主要承接四川电信的多媒体数据网及 MPLS VPN 网络的建设及维护,也参与了中国电信核心网络改造的区域性的工程施工;另一名工作于江苏网通。由于译者的工作背景,在各自的工作中都遇到过若干关于BGP的难题,设计方面和施工方面的都有。有幸翻译此书,我们受益匪浅。我们同时也将书中的内容应用到实际工作中。相信读者一定会和我们一样感觉开卷有益!

我们希望尽可能地表达出作者的原意,因此在一些不清楚或模糊的地方加入了注解,而在某些地方我们却保留了书中的原貌,这些内容是需要读者自己去理解的。由于种种原因,部分翻译显得仓促,尽管我们在翻译上力求术语、文字、风格上的统一,但仍恐有出入之处,敬请读者谅解。本书前言及1~5章由葛建立翻译,6~12章、附录A、B由黄博翻译,全书由黄博统稿。

译者

2005年1月

边界网关协议(Border Gateway Protocol,BGP)是今天的网络中最广泛部署的协议之一,也是Internet事实上的路由选择协议。BGP是一种灵活的协议,这在于它具有很多网络设计者和工程师可用的选项。此外,BGP的扩展和软件实现的增强也使它成为一种有力而复杂的工具。

本书的目的超出了基本协议概念和配置,而着重于提供实用的设计和实现的解决方案。在设计和实现复杂的网络方面, BGP被当做一种有用的工具。通过实际的手法,本书提供了Cisco IOS 软件的实现细节,以及广泛的例子和案例研究。

读者对象

本书希望涵盖设计和实现BGP网络的高级课题。虽然书中也回顾了BGP的基本概念,但是本书的重点不在于BGP本身或基本的BGP配置,而是提供了实用的设计和实现方面的指导建议,以帮助网络工程师、网络管理员以及网络设计者们搭建一个可扩展的BGP路由选择体系结构。本书也可以供任何希望理解 Cisco IOS 中可用的 BGP 高级特性的人使用,此外,对于准备Cisco认证考试的考生也会有所帮助。

本书组织结构

本书的章节大致可以分成5个部分。

第一部分“理解高级BGP”,讨论和回顾了BGP的一些基础组件和工具。

· 第1章“高级BGP介绍”,讲述了BGP的特性,并比较了BGP和IGP。

· 第2章“理解 BGP的构件块”,通过回顾与 BGP有关的多种组件来为本书打下基础。

· 第3章“调整BGP性能”,详细讲述了怎样调整BGP性能,并着重讨论了IOS的最新发展。

· 第4章“有效的BGP策略控制”,描述了常用的BGP策略控制技巧,这些技巧使BGP变得如此灵活。

第二部分“设计企业BGP网络”,着重介绍在设计企业网络时怎样运用BGP的特性。

· 第5章“企业级BGP核心网络设计”,讨论使用BGP来设计企业核心网络时的多种选择。

· 第6章“企业网络的Internet连接性”,描述了一个企业网络与Internet服务提供商(ISP)相连,以获得Internet连接性的设计方法。

第三部分“设计服务提供商BGP网络”,着重讨论服务提供商的BGP网络设计。

· 第7章“可扩展的iBGP设计和实施指南”,详细讨论了可用来增强iBGP扩展性的两种方法:路由反射和联盟。

· 第8章“路由反射和联盟迁移策略”,提供了全连接的BGP网络和基于路由反射或基于联盟的网络之间相互迁移的策略,并讲述了几个迁移过程的操作步骤。

· 第9章“服务提供商网络架构”,讲述了可用于服务提供商的多种BGP设计方法。

第四部分“实施BGP多协议扩展”,关注于对BGP的多协议扩展。

· 第10章“多协议 BGP 和 MPLS VPN”,讨论了为 MPLS VPN 的 BGP 多协议扩展,以及设计和实施复杂VPN的多种解决方案。

· 第11章“多协议BGP和域间多播”,提供了BGP怎样被用于域间多播的设计方法。

· 第12章“多协议BGP对IPv6的支持”,讲述了对IP版本6的BGP扩展。

第五部分“附录”,提供了以下信息。

· 附录A,多协议BGP扩展对CLNS的支持。

· 附录B,BGP 特性和 Cisco IOS软件版本列表。

· 附录C,其他信息源。

· 附录D,术语表。

本书使用的图标

Cisco使用下列标准图标来表示不同的网络设备。在本书中,你可能会碰到一些这样的图标。

命令语法惯例

本书命令语法遵循的惯例与IOS命令手册使用的惯例相同。命令手册对这些惯例的描述如下。

· 粗体字表示照原样输入的命令和关键字,在实际的设置和输出(非常规命令语法)中,粗体字表示命令由用户手动输入(如show命令)。

· 斜体字表示用户应提供的具体值参数。

· 竖线(|)用于分隔可选的、互斥的选项。

· 方括号([])表示任选项。

· 花括号({})表示必选项。

· 方括号中的花括号([{}])表示必须在任选项中选择一个。

编址约定

为了简化描述,本书通常分配私有 IP 地址(RFC 1918),相应地,也使用了简单的子网划分方法。任何这样的地址分配和子网划分机制仅仅用于演示,而不应该被理解为推荐的方法。

AS 号的分配机制通常以百计数,例如 100、200、300 等。在适合的时候,本书也使用私有自治系统号。除非特别指出,否则这些AS号仅仅用于演示,而不应该被理解为推荐的方法。

Cisco bug 经常被用做记录 IOS 新特性的一种工具。在某些适当和相关的地方,本书会提供Cisco bug的标识号。如果要访问这些bug信息,你需要注册访问Cisco网站(www.cisco.com)的权限。

第1章 高级BGP介绍

第2章 理解BGP的构件块

第3章 调整BGP性能

第4章 有效的 BGP 策略控制

本章涵盖以下主题:

· 理解BGP的特性;

· 比较BGP和IGP。

边界网关协议(Border Gateway Protocol,BGP)是一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。由于不同的管理机构分别控制着他们各自的路由选择域,因此,路由选择域经常被称为自治系统(Autonomous System,AS)。现在的Internet是一个由多个自治系统相互连接构成的大网络,其中,BGP 版本 4(BGP version 4,BGP 4)是事实上的路由选择协议。

在过去的几十年里,Internet 经历了令人瞩目的增长。目前,Internet的BGP路由选择表已经拥有超过10万条的路由表项。许多企业也部署了BGP来互连他们自己的网络。如此广泛的部署证明了BGP对大型和复杂网络的支持能力。

BGP 在今天的 Internet 中,之所以具有这样重要的地位,是因为它具有以下这些特性:

· 可靠性;

· 稳定性;

· 可扩展性;

· 灵活性。

以下将详细地描述每一种特性。

可以从几个角度来考察BGP的可靠性:

· 连接的建立;

· 连接的保持;

· 路由选择信息的精确性。

BGP 利用了传输控制协议(Transmission Control Protocol,TCP)提供的可靠传输服务。这消除了BGP实现更新数据包的分段、重传、确认和先后顺序问题的需要,因为TCP已经完成了这些功能。另外,任何TCP使用的认证方法也可以用于BGP。

会话建立之后,BGP就使用通常的保活(keepalive)消息来维护会话的完整性。Update消息也可以重置保持计时器(hold timer),这一计时器的典型的值是保活计时器(keepalive timer)的值的3倍。如果连续3次收不到Keepalive消息,也没有收到Update消息,那么BGP会话就会被关闭。

精确的路由选择信息是可靠转发的重要前提。BGP使用了几种方法来提高精确性。当路由器接收更新数据包时,为了检测环路,它将检查AS_PATH属性(一种BGP属性,列出了路由所经过的自治系统)。如果更新数据包来自于当前 AS,或者已经经过了当前 AS,那么它将被拒绝。入站过滤(inbound filter)可被应用于所有更新,以确保符合本地路由策略。在一条 BGP路由被认为有效之前,路由器通常会验证下一跳的可达性。

为了维护路由选择信息的精确性,及时删除不可达的路由也是很重要的。当某些路由变得不可达时,BGP会迅速地从它的对等体中撤回这些不可达路由。

路由选择协议的稳定性在一个大型网络中是十分关键的。例如在当今 Internet 这样大小的网络中,大量路由的震荡将会对网络产生灾难性的影响。

通过使用各种不同的计时器,BGP可以抑制网络上出现的接口或路由起/宕(Up/Down)事件所产生的影响。例如,一个BGP宣告者(speaker)只有到达最小的通告时间间隔(Minimal Advertisement Interval)后,才可以生成更新。Cisco IOS软件中,这个时间间隔对于外部 BGP (eBGP)会话来说是30秒,对于内部BGP(iBGP)会话来说是5秒。此外,可以增加一些时间偏差抖动(jitter)来避免更新的同步问题。有关eBGP和iBGP对比的主题将在第2章“理解BGP的构件块”中讨论。

路由衰减(route dampening)是 BGP 抑制不稳定性的另一个特性。路由器可以跟踪一条路由的震荡历史纪录。不稳定的路由将会受到惩罚,并被抑制。路由衰减将在本书后面的相关章节中讲述。

在路由策略发生变化时,如果会话不是必须被重置,那么就会提升BGP的稳定性。例如第3 章中讲述的温和重配置(soft reconfiguration)和路由刷新(route refresh)两个特性,它们对于不重置BGP会话而改变BGP策略是十分有用的。这两个特性使得路由器可以动态地请求或发送新的更新。

如果BGP会话必须被重置,那么所有与该会话相关的BGP路由选择和转发信息都会被清除。这在一个新的转发数据库被建造之前,有可能导致数据包的丢失。当这些会话正被重置的时候,不中断转发(Nonstop Forwarding,NSF)或优雅重启动(Graceful Restart)特性将允许路由器利用现有的信息(从原有会话保留下来的信息)继续转发数据包。第3章将详细讨论NSF。

收敛(convergence)是指网络中发生某种变化后,整个网络同步于相同的路由选择信息的过程。没有收敛的网络可能会导致数据包的丢失或转发环路。但是,如果网络一直处于不断收敛的状态,那么也会降低稳定性。在稳定性和收敛之间达成适当的平衡,可能依赖于网络所提供的服务。例如,当在一个共享的多协议标签交换(Multiprotocol Label Switching,MPLS)网络上,使用 BGP 来提供虚拟专用网(Virtual Private Network,VPN)服务时,更应该注重收敛性。第10章将会对这一主题做详细的讨论。第3章详细地讨论了BGP收敛的调整。

你可以从两个方面来评估BGP的可扩展性:对等会话(peer session)的数量和路由的数量。基于路由器的配置、硬件性能(CPU 和内存)以及 Cisco IOS软件的版本,BGP 已经被证明可以支持数百个对等会话,并能很好地维护超过10万条的路由。

有几种方法可以用来增强 BGP 的可扩展性。这些方法或者可以减少被维护的路由/路径的数量,或者可以减少所生成的更新的数量。

作为距离矢量(distance vector)协议的一种形式,BGP 仅仅把它使用的路径去更新它的对等体。换句话说,BGP只会通告最佳路径给它的对等体。当最佳路径发生变化时,新的路径将会被通告,这样就可以使对等体被告知使用新的最佳路径去替换早先的最佳路径。这是一个对早先通告的最佳路径的隐含撤回动作。

当BGP被用来在同一个AS内部交换路由可达性信息时,需要所有的BGP宣告者全连接(fully meshed)。全连接的网络往往会限制 BGP 的可扩展性,这是因为每一台路由器可能会维护大量的会话,而且可能会生成大量的更新。路由反射和联盟是增强 BGP 网络的可扩展性的两种方法。第7章、第8章和第10章详细讨论了这两种方法。

路由聚合是 BGP 使用的另一个工具,可以用来减少通告的前缀数量和增加 BGP 的稳定性。事实上,根据第6章中的讨论,Internet需要适当的路由聚合。

减少生成更新的数量,就能够减少对CPU的利用率,并加快网络的收敛速度。在IOS中,具有相同出站策略的对等体可以被编组到同一个对等体组(peer group)或更新组(update group)。这样只需要生成一份更新,就可以为整个组而被复制。第3章将详细讨论使用更新分组机制来增强网络性能的主题。

BGP 是路径矢量(path vector)协议,它是距离矢量协议的一种形式,BGP 为每一个目的地构造了一个基于自治系统的概要图。BGP的灵活性可以通过路径属性的数量来说明,这些路径属性是用来定义路由策略并描述BGP前缀的特性的参数。正是由于这些属性才使BGP成为一种独特的路由选择协议,因此,整本书都将讨论它们。

你可以定义两种类型的BGP策略:路由选择(routing)策略和管理(administrative)策略。这两种类型的策略在功能上经常是重叠的。

你既可以为入境(inbound)方向,也可以为出境(outbound)方向定义 BGP 路由选择策略,来影响路由或者路径的选择。例如,可以定义一个入境路由过滤策略,用于仅仅接受那些始发于直接上游服务提供商的路由和该服务提供商的客户的路由。通过适当地设置某些属性,可以使一条路径变得比其他路径更优先。本书后面的章节将会提供设置路由选择策略的详细例子。

BGP管理策略对进入或离开AS的路由定义了管理控制策略。例如,一个AS可能希望通过限制允许自己接收的最大前缀数目,来保护它的边界路由器。作为另一个例子,在出境方向上,一个多宿主(multihomed)AS的边界路由器可以选择通过这样一种方式来设置它的属性——就是只通告本地始发的路由。

为了执行策略,BGP使用了3个步骤:

1.输入策略引擎(input policy engine);

2.路径选择(path selection);

3.输出策略引擎(output policy engine)。

图1-1演示了这个处理过程。

图1-1 BGP 策略引擎和路径选择:概念模型

当从对等体接收到更新数据包时,路由器会把这些更新数据包存储到路由选择信息库(Routing Information Base,RIB)中,并指明是来自哪个对等体的(Adj-RIB-In)。这些更新数据包被输入策略引擎过滤后,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径,第2章将详细讨论这种算法。

得出的最佳路径被存储到本地 BGP RIB(Loc-RIB)中,然后被提交给本地 IP 路由选择表(IP-RIB),以用作安装考虑。第2章将讨论IP-RIB的路由安装过程。

如果启用了多径(multipath)特性,最佳路径和所有等成本路径都将被提交给IP-RIB考虑。

除了从对等体接收来的最佳路径外,Loc-RIB 也会包含当前路由器注入的(被称为本地发起的,locally sourced),并被选择为最佳路径的 BGP 前缀。Loc-RIB 中的内容在被通告给其他对等体之前,必须通过输出策略引擎。只有那些成功通过输出策略引擎的路由,才会被安装到输出RIB(Adj-RIB-Out)中。

这里对RIB的讨论仅仅是概念上的概括描述。实际的更新处理过程依赖于BGP的软件实现和配置而变化。在 Cisco IOS软件中,BGP 表或 BGP RIB(命令 show ip bgp 的输出内容)包含了所有输入策略引擎所允许的路由,这其中包括了那些没有被选择为最佳路径的路由。如果启用了入站温和重置(inbound soft reset)的 IOS 特性(温和重配置,soft reconfiguration),那么,那些被输入策略引擎所拒绝的路由也会被保留(被标记为“仅仅接收”,receive only),但不会被路径选择过程所考虑。温和重配置的使用将在第3章中讨论。

当讨论 BGP 时,理解内部网关协议(Interior Gateway Protocol,IGP)和 BGP(一种外部网关协议(Exterior Gateway Protocol,EGP))之间的区别是非常重要的。IGP 被设计用来在单一的路由选择域内提供可达性信息。

当今的网络通常使用3种类型的IGP:

· 距离矢量协议,例如路由选择信息协议(Routing Information Protocol,RIP)和内部网关路由选择协议(Interior Gateway Routing Protocol,IGRP);

· 链路状态协议,例如开放式最短路径优先(Open Shortest Path First,OSPF)协议和中间系统—中间系统(Intermediate System-to-Intermediate System,IS-IS)协议;

· 混合型协议,例如增强型 IGRP(Enhanced IGRP,EIGRP)。

虽然这些协议是为不同目的设计的,并且具有不同的行为特征,但是它们的共同目标是解决在一个路由选择域内的路径最优化问题——也就是说,为给定的一个目的地寻找一条最佳路径。

IGP具有以下某些特性或全部特性:

· 它执行拓扑发现;

· 它尽力完成快速收敛;

· 它需要周期性的更新来确保路由选择信息的精确性;

· 它受同一个管理机构的控制;

· 它采取了共同的路由选择策略;

· 它提供了有限的策略控制能力。

由于有这些特性,因此IGP并不适合提供域间路由选择功能。比如说,一种域间路由选择协议应该能够提供广泛的策略控制,因为不同的域通常需要不同的路由选择策略和管理策略。又如,当前缀的数量处于Internet的水平时,IGP路由的周期性刷新特性是不具有扩展能力的。

从一开始,BGP就被设计成一种域间路由选择协议。两个最重要的设计目标就是策略控制能力和可扩展性。但是,很显然BGP也不适合替代IGP,因为它对拓扑的变化响应慢。当BGP被用来提供域内可达性信息时,例如在一个 MPLS VPN 中,经常需要调整 BGP 以减少收敛时间。

IGP和BGP都有它们各自的适用场合。在设计网络时,恰当地使用这两种类型的协议是非常重要的。第2章将更详细地比较BGP和IGP。

本章涵盖以下主题:

· 比较控制层面和转发层面;

· BGP进程和内存使用;

· BGP路径属性;

· 理解内部BGP;

· 路径决策过程;

· BGP的能力;

· BGP-IGP的路由交换;

· 路由选择信息库;

· 交换路线。

本章的内容将为本书后面的内容打下基础。本章并不试图涵盖BGP所有的基础内容,而着重地强调一些基本的BGP构件和概念,以便给你一些适当的观点。在适当的地方,也会提供一些更新的信息。特别地,这一章将尽力达到以下一些目标:

· 概览了BGP的Cisco实现,例如IOS中的BGP进程。在本章的结尾,将提供一个关于如何在 Cisco 路由器中评估BGP内存使用的案例研究。

· 回顾BGP的基本组件,例如,BGP的属性、BGP的决策过程、BGP的能力交换、路由选择信息库(RIB)等。

· 讨论BGP的一些基本概念,例如iBGP、BGP和IGP的路由交换等。

· 概览了Cisco IOS软件中可用的主要交换路经,以及在资源竞争的情况下,它们是如何与BGP的性能和路由器的性能相关联的。

路由器由两种逻辑组件组成:控制层面和转发层面。控制层面(control plane)负责创建 RIB,而转发层面(forwarding plane)可以用RIB来分类和转发数据包。

路由器的性能和这两个层面的性能,以及它们相互协调的有效程度是紧密相关的。在路由选择体系结构的设计中,理解这两个层面关于数据包的转发与资源竞争的相互作用是非常重要的。

控制层面和转发层面的相互作用,以及由此对BGP性能产生的影响可以通过下面的例子来说明。BGP协议数据包的处理涉及到大量的计算和数据操作,特别是在路由收敛过程中。因而,BGP将会和路由器上运行的其他进程竞争CPU时间。减少被路由器进程交换(一种CPU密集(CPU-intensive)的操作)的穿越数据包(不直接指向该路由器的数据包)的数目能够改进BGP的性能,特别是在初始化的收敛期间。这是因为此时BGP有更多的CPU周期可用。

路由器可以使用很多信息资源来创建它的RIB。在像Internet这样大型的互连网络环境中,路由选择信息可以通过多种动态路由选择协议来交换,例如内部网关协议(IGP)或者外部网关协议(EGP)。在整个网络中及时地分发正确的路由选择信息,是组建一个可靠网络的主要成分。后面的章节将在收敛性、策略控制和扩展性等方面讲述多种优化BGP路由选择架构的技巧。

转发层面有两个主要的功能:数据包分类和数据包转发。数据包分类(Packet Classification)是指把 RIB精简到转发信息库(Forwarding Information Base,FIB)中的过程。典型的 FIB 是根据目的地前缀来组织的,每一条前缀都和一个下一跳地址、出站接口(outgoing Interface)等相关联。实际的数据包转发由转发层面的交换组件来执行。特别是,路由器将把前缀作为主键(key)来执行查找操作,从而产生下一跳地址、出站接口和第2层帧头,这里的第2层帧头是根据出站接口的类型来确定的。

Cisco IOS软件有 3 种主要的 BGP 进程:

· 输入输出(I/O);

· 路由器(Router);

· 扫描仪(Scanner)。

图2-1显示了3种BGP进程以及在IOS中所有主要的BGP组件之间的相互作用。

图2-1 IOS 中的BGP 进程

BGP I/O 进程处理读、写和执行 BGP 消息的任务。它为TCP和BGP之间提供了一个接口。一方面,它从TCP套接字(socket)中读取消息,并把它们放到 BGP 输入队列(Input Queue,InQ)中,以便被BGP Router进程操作。另一方面,积聚在输出队列(Output Queue,OutQ)中的消息也被 BGP I/O进程移到TCP套接字中。

BGP Router 进程是 BGP 主进程,它负责初始化其他的BGP进程,维护与邻居的BGP会话,处理来自对等体和源自本地网络的入站更新,用 BGP 表项更新 IP RIB,以及向对等体发送更新。特别是,BGP Router 进程通过语法分析程序(parser)接收来自命令行接口(Command Line Interface,CLI)输入的命令。BGP Router 进程与 BGP I/O 进程相互作用,并使用每个邻居的队列对更新进行处理(包括发送和接收),如例2-1所示。在所有的有效路径都被安装进BGP RIB中后,BGP Router进程将运行路径选择算法,并且把最佳路径安装进 IP RIB。IP RIB 和BGP RIB 中发生的事件也能够触发 BGP Router进程做出适当的反应。例如,当一条路由需要从其他路由选择协议被重分布到 BGP 中时,IP RIB会通知 BGP Router 进程更新 BGP RIB。

例 2-1 BGP 队列

BGP Scanner进程的主要功能是 BGP 的内部管理。特别是,BGP Scanner进程对 BGP RIB执行周期性的扫描,以确定是否应该删除前缀和属性,以及是否应该刷新路由映射或过滤缓存。这个进程也可以扫描 IP RIB,以便确保所有的 BGP 下一跳仍然有效。如果下一跳不可达,那么所有使用该下一跳地址的 BGP 表项都会从 BGP RIB 中被清除。BGP 衰减信息也会在每一个周期内被更新。通常,每 60 秒执行一次扫描。BGP Scanner 进程也可以通过语法分析程序接受来自CLI输入的命令,从而改变它的扫描时间。

例2-2是一台Cisco 12000路由器上BGP进程和内存使用情况的快照。“Allocated”(分配)列显示了该进程自创建以来所分配的内存的总字节数。“Freed”(释放)列提供了该进程自创建以来已经释放的内存的字节数。“Holding”(占用)列显示了当前被该进程所消耗的实际内存的字节数。在这个例子中,BGP Router进程消耗了超过34MB的内存,而BGP I/O和BGP Scanner进程分别只消耗6KB的内存。

例 2-2 BGP 进程和内存使用

该例子表明,BGP Router进程占用了BGP使用的大部分内存(即“Holding”列)。BGP I/O和 BGP Scanner 进程占用的内存则是微不足道的。BGP Router 进程的 3 个主要组件占用了大部分内存:

· BGP RIB;

· 通过从 BGP 学到的前缀而构成的 IP RIB;

· 从BGP学到的前缀所使用的IP交换组件。

BGP RIB中持有的信息包括网络表项、路径表项、路径属性以及路由映射和过滤列表缓存。通过命令 show ip bgp summary 的输出可以显示存储这些信息的内存。

IP RIB 中,从 BGP 学到的前缀以两种类型的结构被保存:

· 网络描述符块(Network Descriptor Blocks,NDBs);

· 路由选择描述符块(Routing Descriptor Blocks,RDBs)。

IP RIB 中的每一条路由针对每一条路径都需要一个 NDB 和一个 RDB。如果该路由是子网化的,还需要额外的内存来维护该 NDB。可以使用命令 show ip route summary 来显示 IP RIB直接使用的内存。

BGP Router 进程的第三个主要组件具有大量的内存需求,它就是 IP 交换组件,例如 FIB结构。交换路线将在本章后面讲述。

BGP Router 进程除了需要用来保存路由选择信息的内存外,也需要少量的内存用于它自身的操作;不过,该进程本身所使用的内存大约在 40KB 左右,因此,和 BGP Router 进程消耗的全部内存相比是微不足道的。本章结尾时的案例研究详细描述了这些组件的内存使用。

BGP路径属性是一组描述BGP前缀特性的参数。由于BGP首先是一个路由选择策略工具,因此BGP在影响路径选择的时候,广泛地使用了这些属性。在设计一个有效率的BGP路由选择体系结构中,有效地利用这些属性是十分关键的。这一节将着重讲述一些通用的 BGP属性,而在后面的章节中会作更为深入的讨论。

Cisco IOS软件目前支持以下这些属性:

· ORIGIN(起源);

· AS_PATH(AS 路径);

· NEXT_HOP(下一跳);

· MULTI_EXIT_DISC(多出口鉴别);

· LOCAL_PREF(本地优先);

· ATOMIC_AGGREGATE(原子聚合);

· AGGREGATOR(聚合者);

· COMMUNITY(团体);

· ORIGINATOR_ID(起源者标识);

· CLUSTER_LIST(簇列表);

· Multiprotocol Reachable NLRI(多协议网络层可达性信息,MP_REACH_NLRI);

· Multiprotocol Unreachable NLRI(多协议网络层不可达性信息,MP_UNREACH_NLRI)。

以下是对一些更常用的BGP属性的简要概述。后面的章节将讨论其他的属性。

这个属性指出了前缀的起源。有3种可能的起源:

· IGP——ORIGIN 为 0;

· EGP——ORIGIN 为 1;

· INCOMPLETE——ORIGIN 为 3。

在路径选择过程中,具有较低的ORIGIN值的前缀被优先选择。在前缀被注入进BGP时,它的 ORIGIN 属性是自动被定义的,但是可以使用路由映射来更改。例如,如果前缀通过redistribute命令被重分布到BGP中,那么它的ORIGIN属性就会被设置为3;如果前缀通过network命令被注入到BGP中,那么它的ORIGIN属性就会被设置为0。事实上,由network命令发起的路由优于那些被重分布的路由。

AS_PATH列表以相反的顺序列出了一条前缀先后所经过的自治系统,最后一个AS放置在该列表的开始处。AS_PATH的主要目的是为AS域间路由选择提供环路防止机制。列表中可接受的自治系统的数目在1~255之间。因为AS_PATH列表最短的路径优先,因此在列表中前置(prepending)相同的 AS 号是影响入站路径选择的常用方法。Cisco IOS 软件在 AS_PATH 中支持4种类型的AS段:

· AS_SET;

· AS_SEQUENCE;

· AS_CONFED_SET;

· AS_CONFED_SEQUENCE。

SET和SEQUENCE的不同之处在于,SET选项下的自治系统的列表是无序的(关于该路径所经过的自治系统),而SEQUENCE选项下的自治系统的列表是有序的。后两者仅仅应用于本地联盟内部发起的路径。另外,在路径选择中,它们的计数方法是不同的,这将在“路径决策过程”一节中讨论。

从BGP的角度来看,这个属性定义了到达某条前缀的下一跳IP地址。这并不意味着下一跳地址必须是直连的。如果 BGP 下一跳并不是直连的下一跳,那么就需要在 IP RIB 中执行递归路由查找。前缀必须要先有可达的下一跳,然后BGP在最佳路径选择过程中才会考虑这条前缀。换句话说,下一跳必须要在路由选择表中某条前缀的下面,包括默认路由 0.0.0.0/0。BGP路径的下一跳属性通常在3个地方被设置:

· 当前缀一开始被注入到BGP时,它的下一跳地址由注入该前缀的BGP宣告者(speaker)来设置。下一跳的值依赖于前缀被注入进 BGP 的方式。如果前缀是通过 aggregate-address命令被注入的,那么前缀的BGP下一跳就是进行路由聚合的那个BGP宣告者。如果前缀是通过network命令或者重分布被注入到BGP中的,那么注入前的IGP下一跳现在就成为BGP下一跳。例如,假设一条OSPF前缀被重分布到BGP中,那么BGP下一跳就不一定是进行重分布的BGP宣告者,而是OSPF前缀原来的下一跳。因此,在这样的情况下,我们建议在重分布点将 BGP 下一跳重置为 BGP 宣告者自身。如果IGP下一跳不存在(例如在路由指向Null0接口的情况下),那么下一跳就是 BGP 宣告者自身。如果本地的 BGP 宣告者成了下一跳地址,那么 BGP RIB 中的下一跳字段就是0.0.0.0。出站更新数据包中的下一跳被设置为本地的BGP对等会话地址。

· 当前缀通过eBGP被通告出去时,下一跳会自动地被设置为那个正在发送该前缀的eBGP对等体的IP地址。如果3个或更多的对等体正在共享一个相同的多路访问(multiaccess)网络,那么正在作通告的宣告者会把同一个网段上原来的宣告者设置为下一跳,而不是它自身。这叫“第三方下一跳”(third-party next hop)。

· 通过使用路由映射或者 next-hop-self 命令可以手工地更改下一跳。注意对于同一个AS中的BGP会话来说,默认条件下,下一跳不会被改变。

MULTI_EXIT_DISC(MED)属性典型地被用在 AS 间的链路上,以区分到达相同的邻居自治系统的多个出口/入口点。Cisco IOS 软件也允许你使用命令 bgp always-compare-med,在不同的自治系统之间比较MED。MED值由度量值来表示。它的用法与度量的用法是一致的,具有较低MED值的路径被优先选择。

在 Cisco IOS软件中,下面是一些 MED 设置和通告的规则:

· 如果路由从iBGP对等体学到,那么边界路由器在把这条路由通告给eBGP对等体之前,会清除它的MED。在这种情况下,如果要强制边界路由器通告MED,可以为那个 eBGP 对等体配置路由映射命令 set metric-type internal。

· 在边界路由器本地被注入到BGP中的路由在被通告给eBGP对等体时携带MED值。度量值由下列规则来确定:

— 如果通过network或redistribute命令注入到BGP中的路由是来自于IGP的,那么 BGP MED 从 IGP 度量中导出;

— 如果通过network或redistribute命令注入到BGP中的路由是来自于直连路由的,那么 BGP MED 被设为 0;

— 如果通过 aggregate-address 命令注入路由,那么 BGP MED 不被设置。

LOCAL_PREF是iBGP宣告者用来计算每一条外部路由的优先程度的属性。本地优先属性在iBGP对等体之间被交换,以设置离开AS的优先出口点。具有较高的LOCAL_PREF值的路径被优先选择。这个属性不包含在eBGP前缀通告中(典型地,在入境eBGP更新中被手工设置),并且仅仅被同一个AS内的路径选择处理所使用。作为比较,在eBGP链路上,MED从一个AS被发送到另外一个邻居AS,以影响接收AS的出境策略。

注意:Cisco IOS 软件中另外一个参数——WEIGHT(权重)可以影响路径选择。这个参数是Cisco专有的,而且对配置这个参数的路由器来说是本地有效的。也就是说,WEIGHT设置不在路由器之间交换。

COMMUNITY 被一组共享相同的特性的前缀所定义。多个团体可以应用到一条前缀上,每个团体有4字节长。团体属性有以下两种类型:

· Well-known communities(熟知团体)——当接收到这些带有团体属性的前缀时,对等体会自动地根据预先定义的团体属性的意义来采取操作。不需要额外的配置。在RFC 1997 中,熟知团体属性落在保留值的范围内,即 0xFFFF0000~0xFFFFFFFF。

· Private communities(私有团体)——由网络管理员定义的团体,并且在不同自治系统的对等体之间,这些团体必须相互协调。必须明确地配置所采取的行为。私有团体的值在保留范围以外。

当前,Cisco IOS软件支持 4 种熟知团体属性:

· NO_EXPORT——带有这个属性的前缀不应该被通告给eBGP对等体,但可以被发送给同一个联盟内的子自治系统(subautonomous system)。这个团体的值为0xFFFFFF01。

· LOCAL_AS——带有这个属性的前缀不会被通告到本地AS之外。在联盟的情况下,只有同一个子自治系统中的对等体才被允许接收这些前缀。如果不在联盟的情况下, LOCAL_AS和NO_EXPORT被一样对待。在RFC 1997中,NO_EXPORT_SUBCONFED (0xFFFFFF03)就是为这种情况定义的。

· NO_ADVERTISE——带有这个属性的前缀不会被通告给任何对等体,包括内部的或外部的对等体。该属性的值为0xFFFFFF02。

· INTERNET——带有这个属性的前缀被通告到 Internet。换句话说,这些前缀的通告是没有限制的。这个熟知团体属性在RFC 1997中没有被明确地定义。在Cisco IOS软件中,每一条前缀都属于这个INTERNET团体(值为0)。

更常用的团体是私有团体。使用它们的主要目的是为前缀附加管理标记,以便制定合适的策略。私有团体使用AS:number的格式,其中AS是指本地AS号或对等体AS号,而number是指本地分配的,或与对等体 AS 协商分配的任意数值,用来表示可以应用策略的一组团体。这种用户友好的(user-friendly)格式可以在全局配置模式下由 ip bgp-community new-format命令来启用。

当路由反射器(route reflector,RR)被部署时,ORIGINATOR_ID 在 AS 内被用作环路防止机制。它由第一个RR创建,并且不被后续的RR所更改。ORIGINATOR_ID是以下这些路由器的路由器标识(router ID):

· 在本地AS始发路由的BGP宣告者,例如使用network命令注入的路由就是这种路由;

· 如果路由是通过eBGP学到的,那么就是同一个AS的边界路由器。

ORIGINATOR_ID是一个32bit长的数值,并且只应该从iBGP对等体那里接收到。在RR上,ORIGINATOR_ID 用来替代路径选择过程中的 router ID。当 iBGP 宣告者接收到的更新包含了它自己的ORIGINATOR_ID时,它就会丢弃路由,这样就打破了路由选择信息环路。如果ORIGINATOR_ID已经存在的话,BGP宣告者就不应该再创建一个。

当路由反射器被部署时,CLUSTER_LIST在AS内被用作另一个环路防止机制。这个属性记录了在RR的环境中,前缀所经过的CLUSTER_ID的列表。当RR从它的客户那里反射路由到簇(cluster)外的非客户时,或从非客户反射路由到客户时,或从一个客户反射路由到另一个客户时,它会把本地 CLUSTER_ID 添加到 CLUSTER_LIST 的前面。如果路由更新的CLUSTER_LIST为空,那么RR就会创建一个。使用这个属性,RR能够识别出路由选择信息是否又环回到了同一个簇。如果在CLUSTER_LIST中发现了本地CLUSTER_ID,那么这个更新就会被丢弃,这样就打破了路由选择信息环路。第 7 章将详细地讨论 CLUSTER_LIST 和CLUSTER_ID的设计和配置问题。

BGP被设计用来在Internet上的一系列自治系统之间提供无环路的路径。确保无环拓扑的机制就是 AS_PATH 属性。考虑图 2-2,其中 3 个自治系统相互连接。如果 AS 65000 中的路由器 R1 通告一条前缀给 AS 65001 中的 R3,那么在它发送前缀给 R3 时,它会把 65000 添加到这条前缀的 AS_PATH 列表前面。如果同样的前缀再次被 AS 65000 收到,那么边界 BGP 宣告者就会拒绝它,这是因为它在AS_PATH属性中检测到了环路。

继续考虑图 2-2,假设 R3 需要向 AS 65002 中的 R7 传播前缀,那么这里有几种选择来完成这项任务。

图2-2 多AS拓扑中的前缀传播

一种方法是让R3把所有的BGP前缀重分布到IGP中,IGP把它们通告给R4、R5和R6。接着,让R5和R6把这些前缀重分布回BGP,并把它们分别通告给各自的eBGP邻居——R7和R8。但是,这种策略有一些问题。

IGP不是被设计用来处理这里可能包含的路由数量的。完全的Internet表已经超过了10万条前缀。很多IGP需要周期性地刷新前缀信息,这会进一步导致网络的不稳定和额外的系统资源消耗,并且给常规的路由选择更新带来显著的带宽需求。前缀数量的增长导致发生路由抖动(route flapping)的可能性更大,路由抖动会引起严重的稳定性和收敛性问题。

BGP信息被重分布进IGP后会丢失所有的BGP属性,包括AS_PATH属性。AS_PATH属性的丢失破坏了BGP环路防止机制。例如,当前缀在R4上被重分布回BGP时,同样的这条前缀也会被发送回R2,因为AS_PATH属性中只包含65001。重分布也会导致任何策略属性的丢失,这些策略属性是为BGP学到的前缀所设置的。

比较明智的选择是使用内部 BGP(internal BGP,iBGP)。当 R3 通过 iBGP 把前缀通告给R5时,R3不会在AS_PATH中添加自己的AS号。事实上,如果更新来自于iBGP对等体,Cisco IOS甚至不检查AS_PATH环路。如果没有这个额外的AS_PATH信息,路由选择信息环路就会在iBGP域中形成。

如果允许R3把前缀通告给R5,但是不允许R5把它从iBGP学到的前缀通告给其他iBGP对等体,例如,R4 和 R6,那么就可以避免环路。但是,这样的解决办法需要所有的 iBGP 宣告者全连接(fully meshed)。例如,R3 需要与R4、R5 以及R6 建立 iBGP 对等会话。在 iBGP宣告者数目很大的自治系统中,全连接会带来扩展性的问题。这个问题的解决办法涉及第7章讲述的路由反射和联盟。

使用iBGP传送前缀信息会带来其他一些小问题。如果BGP能够传送所有的前缀,那么还需要IGP吗?

IGP肯定是需要的。图2-2中,R3并不与R6直连。如果没有某种形式的路由选择信息存在,那么R3如何与R6建立iBGP会话呢?答案就是让IGP为自治系统内部提供基础的路由可达性信息。内部BGP从未被设计成在没有IGP的情况下使用,而是与IGP配合使用。iBGP路由通常需要IGP来递归解析。表2-1说明了iBGP与IGP的一些不同之处。

表2-1 比较iBGP和IGP

在比较了iBGP和IGP之间的不同之处后,理解iBGP和eBGP之间的不同之处也是很重要的(见表2-2)。

表2-2 比较iBGP和eBGP

续表

BGP经过一个复杂的算法来决定最佳路径并更新BGP RIB和IP RIB。正如前面所提到的, BGP是一个策略工具。它的重要性通过BGP利用属性和其他参数来选择最佳路径的过程最能说明。

当存在多条到达特定目的地的有效的 BGP 路径时,IOS 将会根据收到它们的相反顺序列出这些路径。也就是说,最新的路径将被列在最开始,而最老的路径则被列在末端。在命令show ip bgp 的输出中,最新的路径被列在最上面,而最老的路径被列在最下面。对于给定的一个目的地,为了选择最佳路径,BGP通常使用顺序比较的方法。它指定第一条路径(最新的路径)作为当前的最佳路径,然后比较当前的最佳路径和列表中的下一条路径,直到比较到有效路径列表的末端。例如,BGP顺序接收到3条路径——1、2和3——BGP首先比较路径3(最后接收到的)和路径2。接着,得出的最佳路径再与路径1(最早接收到的)相比较。这样,第二次比较得出的最佳路径就成为到达目的地的最终的最佳路径。

如果一条路径满足下列任一条件,那么它在最佳路径选择过程中就不是有效的候选者:

· 路径的下一跳不可达;

· 路径未同步,但同步功能被启用了;

· 路径被入境 BGP 策略所拒绝,并且路由器配置了入境温和重置(soft reset);

· 路由被惩罚(dampened)。

当前,Cisco IOS 软件的路径选择有 13 步(www.cisco.com/warp/customer/459/25.shtml)。每一步都会被顺序评估,直到找到一条优选路径为止:

1.WEIGHT是首先考虑的参数。WEIGHT值最高的路径优先。WEIGHT是Cisco专有的参数,并且对配置这个参数的路由器来说是本地有效的。默认条件下,本地始发的路径具有相同的WEIGHT值(即32768),所有其他的路径的WEIGHT值为0。

2.LOCAL_PREF值最高的路径优先。Cisco IOS软件中,LOCAL_PREF的默认值为100。

3.基于始发地(origination)评估路由,路由器本地始发的路径优先。依次降低的优先级顺序是:default-originate(针对每个邻居配置)、default-information-originate(针对每种地址簇配置)、network、redistribute、aggregate-address。

4.评估AS_PATH的长度,AS_PATH列表最短的路径优先。但是,可以通过配置bgp bestpath as-path ignore(隐藏的命令)来跳过这一步。

在评估路径长度时,记住以下要点:

· 一个AS_SET被计数为1,而不管“set”中包含多少个自治系统;

· AS_CONFED_SEQUENCE 不包括在 AS_PATH 长度中。

5.这一步评估路由的ORIGIN属性,ORIGIN类型最低的路径优先。IGP低于EGP,EGP低于INCOMPLETE。

6.评估MED。MED值最小的路径胜出。默认条件下,只有在两条路径的第一个(邻近的) AS 相同的情况下才会进行比较操作;任何联盟子自治系统都被忽略。换句话说,对于多条路径,只有在 AS_SEQUENCE 中的第一个 AS 相同的情况下,才会比较 MED;任何打头的AS_CONFED_SEQUENCE 都将被忽略。如果激活了 bgp always-compare-med,那么对于所有路径都将比较MED,而不考虑它们是否来自于同一个AS。如果你使用了这个选项,就应该在整个AS中都这么做,以避免路由选择环路。

注意以下MED的更改选项:

· 配置了bgp deterministic-med后,不管收到前缀的顺序如何,MED比较的结果都是一致的。在这种配置下,所有的路径都将基于邻近的编组。在每一个AS组内,根据MED的大小对路径进行排序。MED值最小的路径被选为该组的最佳路径。最终的最佳路径是所有选出的路径中具有最小 MED 值的路径(译者注:这句话值得商榷,参见 Cisco 文档http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a0080094925.shtm1)。如果存在MED,那么这是一种建议的配置。

· 如果激活了 bgp bestpath med-confed,对于所有只包含 AS_CONFED_SEQUENCE 的路径来说才比较MED,也就是说,这些路径是始发于本地联盟的。注意,如果一条路径包含了任何外部的自治系统,那么这条路径就不参与比较,而它的 MED 在联盟内部被传递时不被改变。

· 如果接收到的路径没有MED,就把它的度量指定为0,除非激活了bgp bestpath missing-as-worst,在这种情况下,这些路径的度量值被指定为4 294 967 294(最大值)。这主要是考虑到对旧标准的兼容性。

7.外部BGP(eBGP)路径优于内部BGP(iBGP)路径。包含AS_CONFED_SEQUENCE的路径对于联盟来说是本地的,因此被看作是内部路径。在路径选择过程中,联盟外部(Confederation External)路径和联盟内部(Confederation Internal)路径没有差别。

8.BGP优先选择到BGP下一跳的IGP度量最低的路径。这一步使得本地拓扑信息被考虑进去。

9.如果配置了 maximum-paths [ibgp] n,这里的 n 在 2~6 之间,并且存在多条等价成本的路径(对于多条路径,以上1~6步的比较结果都相同,而且AS_PATH也相同),那么BGP会在IP路由选择表中插入最多n条接收到的路径。这就激活了BGP多路径负载分担(multipath load sharing)特性。如果没有使用可选关键字 ibgp,那么多路径特性就仅仅应用于 eBGP 路径,或来自于同一个邻居AS或子AS的联盟外部路径。当不激活这一选项时,它的默认值为1。

10.当两条路径都是外部路径时,BGP 将优先选择最先收到的路径(最老的路径)。这一步能最小化路由抖动,因为新路径即使在基于另外的决策准则(在第11、12和13步中讲述)下是优先的路径,也不会替代老路径。

如果以下任一条件为真,这一步将会被忽略:

· 启用了 bgp bestpath compare-routerid命令;

· 多条路径具有相同的路由器ID,因为这些路由都是从同一台路由器接收过来的;

· 当前没有最佳路径。缺乏当前最佳路径的例子发生在正在通告最佳路径的邻居失效的时候。

11.BGP优先选择来自于具有最低的路由器ID的BGP路由器的路由。路由器ID是路由器上的最高IP地址,并且优选环回地址。也可以通过bgp router-id命令静态地设定路由器ID。如果路径包含RR属性,那么在路径选择过程中,就用ORIGINATOR_ID来替代路由器ID。

12.如果多条路径的始发路由器ID 或路由器ID 相同,那么BGP 将优选CLUSTER_LIST长度最短的路径。这种情况仅仅出现在 BGP RR 的环境中。当一个客户与其他簇中的 RR 或客户形成对等关系时,该客户可以使用CLUSTER_LIST长度来选择最佳路径。为了采用这一步,客户必须能感知RR特定的BGP属性。

13.BGP优选来自于最低的邻居地址的路径。这是BGP的neighbor配置中所使用的IP地址,并且它对应于与本地路由器建立TCP连接的远端对等体。

按照 RFC 1771 的定义,BGP 在对等体之间只能运载 IPv4 可达性信息。为了能够交换 IPv4之外的网络前缀信息,BGP必须被扩展。这是通过能力(capability)交换和属性扩展来完成的。本节仅仅介绍能力交换,各种不同的属性扩展将在第10章开始讲述。

根据 RFC 1771 的定义,BGP 支持下列 4 种类型的消息:

· Open——这种类型的消息用来建立最初的BGP连接;

· Update——对等体之间使用这些消息来交换网络层可达性信息;

· Notification——这些消息被用来通知出错条件;

· Keepalive——一对对等体之间周期性地交换这些消息以保持会话有效。

在 Open 消息中,有一个 Optional Parameter 字段包含了一些额外的可选信息,这些信息可以在会话建立阶段被协商。在 RFC 3392 中附加的 Capability Optional Parameter(参数类型 2)允许一对BGP宣告者协商出共同的能力集。

这里列出一些 Cisco IOS软件支持的能力:

· 能力代码 1,多协议扩展(Multiprotocol extension);

· 能力代码 2,路由刷新(Route refresh);

· 能力代码 64,优雅重启动(Graceful restart);

· 能力代码128,路由刷新的旧格式;

· 能力代码 130,出站路由过滤(Outbound Route Filter,ORF)。

第10章到附录A将阐述多协议BGP的主题。路由刷新、优雅重启动和ORF将在第3章中讲述。

为了支持IPv4以外的地址,RFC 1700定义了不同的地址簇(address families,AF)。例如IPv4和IPv6就是被支持的地址簇。在每一种地址簇里,进一步定义了后继地址簇标识(subsequent address family identifiers,SAFI)。例如,在 IPv4 地址簇里,定义了下面的 SAFI:

· 单播,SAFI代码1;

· 多播,SAFI代码2;

· IPv4 标签,SAFI 代码 4;

· 带标签的VPNv4单播,SAFI代码128。

在每一种所支持的能力里,对等体可以通告所支持的AF和SAFI。在会话建立阶段,仅仅使用共同的能力。

例 2-3 使用了命令 show ip bgp neighbor 的输出的一部分来显示 BGP 能力的例子。这里有4种能力被交换(被通告的和被接收的):路由刷新(新旧两种格式)、IPv4单播、IPv4标签和IPv4 ORF(在 IPv4 地址簇下显示)。

例 2-3 BGP 能力的例子

(待续)

注意:当前,能力只在会话建立期间才被协商,因此,会话建立后所配置的能力是不可用的,除非会话被重置。

例2-4显示了一对路由器之间交换BGP能力的另一个例子。这里有4种能力被交换(被通告的和被接收的):路由刷新(新旧两种格式)、IPv4单播、VPNv4单播和IPv4多播。对于这3种地址簇中的每一种类型,在描述它们的各自的章节中提供了更多的信息。

例 2-4 BGP 能力的另一个例子

(待续)

例2-5显示了在会话建立阶段命令debug ip bgp的输出。在Open消息里面,Optional Parameter中包含了Capability字段。在这个字段中,所有被支持的能力都被交换。这里交换了以下能力:

· 多协议扩展,代码1:IPv4单播(AF/SAFI代码1/1)、VPN IPv4(1/128)、IPv4多播(1/2);

· 路由刷新的旧格式,代码128;

· 路由刷新的新格式,代码2。

例 2-5 在会话建立阶段,debug ip bgp 的输出

BGP和一种IGP之间的路由交换可在两个方向上发生:从IGP到BGP,从BGP到IGP。通常有两种方法将一种IGP路由注入到BGP中:

· 使用命令redistribute;

· 使用命令network。

使用redistribute命令可以把IGP路由动态地注入到BGP中。只要你这样做,你就应该使用适当的过滤和路由汇总手段,来减小IGP路由的不稳定性对BGP的影响。即使有这些措施,将IGP路由动态地重分布到BGP中也是不鼓励使用的,这是因为IGP路由固有的动态特性,而因此丧失了对它的管理控制。

注意:当你使用 redistribute 命令将路由重分布到 BGP 中时,默认条件下,只有有类(classful)网络才会被重分布。为了使每一条路由被单独地重分布到BGP中,你必须关闭BGP的 auto-summary 特性(否则,将会自动地创建一个有类的路由汇总)。最近的 Cisco IOS 软件将引入新的默认行为,即自动启用 no auto-summary。

在 Cisco IOS 软件中,BGP 的 network 命令的操作不同于 IGP 的 network 命令的操作。在大多数的IGP配置中,network命令都会绑定一个本地接口到一种路由选择协议上,并将接口地址注入到IGP路由中。在BGP中,network命令仅当某条路由已经存在于IP路由选择表的时候,才会在BGP表中创建该路由。这使IGP路由被半静态地注入到BGP中。这里之所以说是半静态的,是因为只有那些已经存在于IP路由选择表中的路由才会被注入到BGP表中。

BGP 到 IGP 的重分布,应该只用在当这些路由是 BGP Internet 路由的一个小的子集的时候,或者当BGP路由的数量比较小的时候。在重分布的时候,应该部署适当的过滤措施来最小化IGP中的前缀数量。第4章将讲述各种过滤技巧。

如前面章节“比较控制层面和转发层面”所提到的一样,IP RIB,或者称为 IP 路由选择表,是一个十分关键的数据库,它为控制层面和转发层面之间提供了重要的联系。一方面,不同的路由选择源,或路由选择协议,例如BGP和IS-IS,都将它们的路径加载到RIB中。另一方面, RIB为创建转发数据库(一些交换方法直接使用RIB进行数据转发)提供信息。

当每一种路由选择协议接收路由更新或者其他信息时,它会选择到达任何给定目的地的最佳路径,并尝试把这条路径安装到路由选择表中。当多条到达同一条前缀/掩码的路径存在时,路由器会根据该协议所涉及的管理距离来决定是否安装路由。IOS 已经为不同的路由选择协议,或路由选择源预先定义了管理距离,但这些管理距离是可以被配置的。来自于较低管理距离的路由选择源的前缀优先。备份路由仍然被路由选择协议所维持——如果路由选择协议支持的话——当已存的最佳路由失效时,备份路由可以被用作最佳路由。

注意:当 BGP 在 IP RIB 中安装路由失败时,将会在路由器的 BGP RIB中报告一条 RIB失败的消息。失败的代码将标识出原因。请查阅附录B以了解更多的信息。

IP RIB 被组织成网络描述符块(Network Descriptor Block,NDB)的集合。每一个 NDB 就是路由选择表中的一个表项,它代表了通过下列3种来源之一获取的网络前缀:

· 在路由器的本地接口上配置的一个地址/掩码对。这样就成为一条直连路由,它具有最高的优先级,或者说它的管理距离为0。

· 在路由器上配置的静态路由。静态路由的默认管理距离是1。

· 动态路由选择协议,例如BGP。

NDB包含的信息有网络地址、掩码、管理距离,还有动态路由选择协议操作所需要的信息,例如路由重分布。因为 NDB 中的每一条前缀可能通过多条路径到达,因此也使用了路由选择描述符块(Routing Descriptor Block,RDB)。每一个 NDB 可以连接一个或多个 RDB,这些 RDB存储了实际的下一跳信息。当前,一个NDB最多可以连接8个RDB,这些RDB设定了基于每目的地(per destination)的负载分担链路数目的上限(也就是 8 条)。注意到,由于 NDB 受单个路由选择协议的控制,因此路由选择协议就决定了每个NDB可以关联多少个RDB。

包转发数据库是根据IP RIB和IP ARP表中所包含的信息创建的。在RIB表中执行前缀查找就确定了下一跳地址和出站接口(outgoing interface)。实际的第2层数据帧的头部是基于IP ARP表中的信息创建的。帧中继和ATM映射是另外一些例子,它们使用第3层地址到第2层地址映射的方法。Cisco IOS 软件支持两种普通的 RIB 查找操作(译者注:建议读者参阅 Cisco 文档http://www.cisco.com/en/US/tech/tk365/technologies_tech_note09186a0080094823.shtml):

· 无类(classless)——最长匹配前缀查找。如果没有找到匹配的前缀,就使用默认路由;如果有,就使用它。从 Cisco IOS 软件版本 11.3 开始就使用默认的 IP 无类查找了(虽然它仍然显示在运行配置中)。

· 有类——最长匹配查找。如果路由选择表包含了目的主网络(major network)(由目的地址解析出的有类网络)的子网,那么将不考虑选择超网(supernet)和默认路由。

在 Cisco IOS 软件中,依赖于硬件平台和配置,共有 3 种通常的交换路线(switching path)被支持:

· 进程交换;

· 基于缓存的交换;

· Cisco 快速转发(Cisco Express Forwarding,CEF)。

下面的章节将更详细地讨论每一种交换路线。

进程交换(process switching)是一种最基本的交换形式,在所有的 Cisco 路由器上统统可用。进程交换指出这样的事实,即 CPU 是和转发数据包所需要的进程直接相关的。在 IOS 软件中,数据包在进程级别上被交换。换句话说,转发决策过程是由IOS进程调度表调度的进程实现的,该进程在路由器上作为其他进程的对等进程而运行,例如,像路由选择协议进程一样。正常运行于路由器上的进程是不会被中断,来进程交换(process-switching)数据包的。对于IP数据包来说,转发进程就是 IP Input 进程。

图2-3显示了典型的IP进程交换的主要组件。下面的内容描述了处理过程:

图2-3 IP 进程交换

1.从输入接口(inbound interface)上接收到的IP数据包被放到同步动态RAM(Synchronous Dynamic,SDRAM)数据包内存中进行排队。

2.处理器把数据包复制到动态 RAM (Dynamic,DRAM)中的系统缓冲区(system buffer area),IP Input进程在这里开始对数据包进行第3层和第2层的处理。

3.利用数据包头部中的目的IP地址,进程首先检查RIB以确定输出接口,然后它会咨询ARP缓存以创建第2层的帧头。

4.这时,数据包将被重新写入新的第 2层帧头,并被复制回数据包内存或系统内存,再被转发到输出接口上去。

进程交换是CPU密集的(CPU-intensive),如果大量的数据包需要在进程级别上被检查,就会导致系统性能降低。进程交换IP数据包涉及到以下一些CPU密集的任务:

· 从接收缓冲区来的数据包被复制到共享内存系统缓冲区的内存复制任务。

· 路由选择表查找任务。由于使用了更有效率的算法来存储信息,因此多年来该任务通常很少出问题。

· 从共享内存系统缓冲区来的数据包被复制到中转缓冲区(transmit buffer)的内存复制任务。

进程交换的局限在于,如果路由器需要在一个不稳定的网络上处理大量的数据包,那么其性能将会恶化,Internet例如环境。进程交换也不是一个有效率的交换机制,因为数据包信息无法重复使用。进程交换直接在RIB中执行前缀查找,这种做法并不是路由表查找的优化方式。

重要的是要注意到,那些指向路由器的数据包是被进程交换的,例如BGP数据包。当数据包去往路由器时,IP Input 进程将把数据包排队,以便在次高一层处理;以 BGP 为例,次高一层就是TCP层。该进程的效率会直接影响BGP的性能。例如,在BGP路由收敛期间,TCP可能会接收大量的 ACK 数据包。如果这些数据包没有被及时地交付给 TCP,那么路由器有可能不能建立会话。第3章将详细讲解怎样调整多种参数来避免这种情形的发生。

基于缓存的交换(cache-based switching)是一种更有效率的交换机制,它利用了从第一个被交换的数据包所获得的信息的优势,这第一个数据包是由一个被调度的进程来交换的。在这种交换方式下,当前运行于处理器上IOS进程可以被中断,来进行数据包的交换。数据包按需被交换,而不是仅仅在 IP Input 进程可以被调度的时候才被交换,像进程交换方式一样。

处理器在进程级别上交换第一个数据包,并在路由缓存中创建一个表项,以便后续的、具有相同目的地址的数据包能够基于缓存表项被交换。基于路由缓存的数据包交换需要的处理更少,这使得数据包在中断级别上被交换。这也是为什么基于缓存的交换方式也被称为中断上下文交换(interrupt context switching)的原因。

与进程交换相比较,基于缓存的交换具有以下优势:

· 它能够在数据包到达时就进行交换,而不必等待转发进程被调度,因而这种方式可以减少延迟。

· 只有第一个到达目的地的数据包需要被进程交换,以生成路由缓存,这样就使执行CPU密集任务所耗费的时间最小化了。

· 后续数据包基于路由缓存中的信息被交换。

几种基于缓存的交换方式当前在Cisco路由器上可用:

· 快速交换。

· 最优交换。

· 分布式最优交换。

· 网络流交换。

几种基于缓存的交换路线之间的不同之处在于信息存储于缓存的方式。下面将简要地考察这些交换路线,以及它们各自的缺点。

1.快速交换

快速交换(fast switching)使用二叉树来存储转发信息和 MAC 头改写字符串(新的 MAC头),以便快速查找和参考。你可以使用命令 show ip cache verbose 来显示快速缓存中的内容。

图2-4显示了快速交换的组件。下面简略地描述了处理过程:

图2-4 IP 快速交换

(1)当数据包从输入接口到达时,路由器将会执行查找,以确定与该数据包对应的缓存表项是否存在。

(2)如果表项信息不存在,那么该数据包就被进程交换。

(3)从交换第一个数据包中获得的信息会在快速缓存中创建一个表项。

(4)当数据包到达时,如果表项已经存在,那么数据包将会被输出接口的第2层信息所改写,并被转发到那个接口。数据包并不会被复制到系统缓冲区中去,这与进程交换不同。

2.最优交换

最优交换(optimum switching)在 256-way 的基数树(radix tree)中存储转发信息和 MAC头改写信息。利用 256-way 的树,可以减少查找一条前缀所必须经过的步骤数,虽然这样需要更多的内存。只有基于路由交换处理器(Route Switch Processor,RSP)的平台上才支持最优交换。

3.分布式最优交换

分布式最优交换(distributed optimum switching)通过将路由选择决策转移到接口处理器上,来寻求卸载主CPU的包交换功能负担的方法。只要路由选择平台的每个接口都有专门的CPU,例如通用接口处理器(Versatile Interface Processor,VIP),这种做法就是可行的。例如,就 VIP来说,RSP 创建最优缓存(optimum cache)。当数据包到达时,VIP 将试图根据那张表作出路由选择决策。如果VIP在它本地的路由缓存中找到了相应的表项,那么它就交换该数据包,而不需要中断 RSP。如果没有找到相应的表项,它就把该数据包放入下一个所配置的交换路线(最优交换,然后是快速交换,再后是进程交换)中去排队。使用分布式交换方式时,访问列表被复制到VIP,使得VIP可以依据访问列表来检查数据包而无需RSP干预。

注意:最优交换和分布式最优交换从 Cisco IOS软件版本 12.0 开始就不再被支持了。

4.网络流交换

网络流交换(Netflow switching)是基于缓存交换的另外一种形式。通过一种标准的交换机制,处理了流的第一个数据包,于是就创建了网络流缓存。结果,每一个流都和一个输入接口与一个输出接口相关联,并且具有特定的安全访问许可策略以及加密策略。这些缓存也包括了由后续数据包的交换而更新的流量统计信息。

流(flow)被定义为两台主机之间特殊的会话(conversation)。源地址和目的地址、端口,以及IP数据包类型定义了一个流。对于TCP通信来说,会话使用不同的TCP控制消息来开始和结束。对于UDP来说,会话在计数器超时后就被认为中止了。匹配流标记的后续数据包被认为是相同的流的成员,并简单地被交换到输出接口,旁路了依据访问列表的进一步检查、排队等操作。

设计网络流交换的目的,是使它提供一种高效率的机制,通过这种机制来处理扩展或复杂的访问列表时,不必像其他的交换方式一样丧失同样多的系统性能。在网络流交换方式下,能够为每一个流收集详细的记账信息。事实上,信息收集的功能变得如此重要,以至于在新发布的IOS软件中,网络流交换被专门用来实现这个目的,而不再用来交换数据包了。

注意:在同时启用CEF和网络流交换的情况下,CEF为IP数据包提供交换路线,并生成流缓存,而网络流交换被用来向流收集器输出统计信息。这些流信息包括基于每个用户、每种协议、每个端口以及每种类型的服务统计信息。这些信息可被广泛用于各种目的,例如,网络分析和规划、记账以及计费。

5.基于缓存交换方式的缺点

以下是一些基于缓存交换方式的缺点:

· 它们都是流量驱动的(traffic-driven),这在于它们依赖于第一个数据包的接收以生成缓存。这个数据包是在慢速交换路线中被交换的,这就导致了低性能和高CPU消耗。在有大量的、不断变化的流量模式的网络中,例如Internet,处理第一个数据包可能造成系统性能的严重下降。因此,对于 Internet 核心路由器来讲,基于缓存的交换方式具有扩展性问题。作为另外一个例子,网络流交换的效率还依赖于流的长度。如果存在大量的长度较短的流,新表项将会不断被创建,因而导致低效率和低性能。

· 缓存的大小可能增长得比路由选择表还要大,例如,在多条等价路径存在的情况下。结果,快速缓存会消耗大量的内存。

· 如果缓存很大的话,缓存表项周期性的老化也会消耗大量的CPU时间。

· 由于路由抖动导致了无效缓存,因此需要依赖进程交换方式把有效的表项重新置入缓存。当路由表发生变化时,受影响的旧表项必须被变成无效的;在缓存被重建时,此前使用该缓存表项的流量也必须被进程交换。如果存在大量的路由抖动——这在 Internet上是经常发生的——将会出现数量庞大的无效缓存,降低了基于缓存的交换机制的效率。这样还会导致系统缓冲区的争夺和控制流量的丢失,这些因素也会促使网络不稳定。

· 基于缓存的交换在中断级别上不能做到基于每数据包的负载分担。因为基于缓存的交换完全是基于目的地址的,因此其负载分担只能是以每个目的地址为基础的。

在前面章节的讨论中,虽然基于缓存的交换机制相对进程交换而言提高了转发的性能,但是它们的性能是不确定的。进程交换和基于缓存的交换都是数据驱动的(data-driven),或者说是需求驱动的(demand-driven)。换句话说,只有当数据包进入路由器的时候交换组件才会被布置到位,一旦这些数据包不被路由器转发,交换组件就会被清除。如果存在大量的不可预知流量模式的数据包,交换性能就会显著地下降。显然,在 Internet 的级别上,这些交换路线是不可扩展的。

创建 CEF 是为了避免基于缓存交换机制所固有的问题。它的设计最好地适应了频繁变化的网络态势和流量特征,这些都是由于不断增长的较短持续时间的流所产生的。典型地,这些较短持续时间的流与基于Web的应用和交互式TCP会话相关联。

CEF具有以下几个优点:

· 可扩展性(Scalability)——CEF是拓扑驱动的(topology-driven),并与路由选择表紧密相关。当激活了分布式 CEF(Distributed CEF)模式时,CEF 在每一块线卡(line card)上也提供了全部的交换能力。CEF支持硬件辅助的(hardware-assisted)转发方式,这是在高容量的线卡上,提供线速交换(line rate switching)能力所必需的。

· 增强的性能——CEF的CPU密集程度比路由缓存机制的CPU密集程度低。更多的CPU处理能力可以专注于第3层服务,例如,处理BGP更新。

· 弹性(Resilience)——在大型动态网络中,CEF提供了更好的交换一致性和稳定性。在这样一些网络中,由于路由选择的变化,快速交换缓存表项会频繁地失效。这些变化导致路由器使用路由选择表进程交换流量,而不是使用路由缓存快速交换流量。由于 CEF 查找表包含了存在于路由选择表中所有已知的路由,因此它消除了路由缓存的维护需要,并使快速交换/进程交换转发不再适用。CEF能够比典型的按需缓存机制更有效地交换流量。

注意:IP RIB 中所有路由的表项不管是否被使用,它们都需要被维护,因而 CEF可能比其他交换方式需要更多的内存。

CEF是拓扑驱动的交换机制,它的转发表和路由选择表是紧密关联的。无论何时路由选择表发生变化,CEF转发表也将被更新。在表项被创建的时候,数据包被交换到更慢的交换路线上。CEF把路由缓存的功能分割成两部分:

· 转发信息库(Forwarding Information Base,FIB);

· 邻接表(ajdancency table)。

1.FIB

FIB 包含了来自于路由选择表的所有 IP 前缀。如果不同的路由选择表被维护着,例如在MPLS VPN 环境中,那么每个 VPN 都有自己的 FIB。FIB 不是数据驱动的。更确切地说,它是通过路由选择表来创建和更新的。FIB 子系统负责确保所有的递归路由(是指那些没有与直接下一跳相联系的路由)被解析。

为了增强一致性和减少查找时间,FIB被组织成一个被称为mtrie的多路(multiway)数据结构。在 mtrie 数据结构中,树结构用来定位所要找的数据,但是数据本身存储在其他地方。相反,mtree数据结构在树结构本身中存储了实际的数据。例如,在最优交换的mtree缓存中,用来转发数据包的MAC头的数据就是实际存储于mtree中的。

Cisco路由器通常使用两种类型的mtrie结构:

· 8-8-8-8——这种格式也被称为 256-way mtrie,因为 4 个八位组的 IPv4 地址被映射到 4个8bit的结构中。因此,一条前缀的最大查找次数是4次。这种格式用在大多数Cisco路由器中。

· 16-8-8——这是一个3级的mtrie,它的根级有65536个表项。因此,一条前缀的最大查找次数是3次。换句话说,第一次查找解析了前面的两个八位组,接着最多再需要2 次查找就可以解析最后的两个八位组。这种格式只用于 Cisco 12000 系列路由器。

mtrie 的每一级都被称为一个节点(node)。最后的节点被称为叶节点(leaf)。叶节点指向邻接表(adjacency table),或者当到达相同目的地的多条路径存在时,指向另一个负载分担的结构。IP FIB 的内容可以使用 show ip cef命令来显示。

下面列举了一些FIB表项:

· 附接的(attached)——这种前缀被配置为可以通过接口直接到达,不需要由IP下一跳来创建邻接关系。这种前缀是指路由器本地接口所属的网络。

· 连接的(connected)——这种接口是由 IP address address mask 配置命令来配置的。所有连接的FIB表项都是附接的,但不是所有附接的表项都是连接的。

· 收到(receive)——这种前缀是一个 32 位掩码的主机地址,它是路由器始终接收到的主机地址之一。每个接口通常有3种这样的地址:实际的接口地址、全0的子网和全1的广播地址。

· 递归的(recursive)——当前缀的输出接口不能通过路由选择协议或静态配置指定时,它就被标记为递归的。当找不到递归FIB表项的下一跳IP地址时,这个递归FIB表项也许就不能被解析。因此,递归标记实际上与下一跳地址,而不是与 FIB 表项相关联。

2.邻接表

邻接表被创建,以包含所有连接的下一跳地址。邻接节点(adjacency node)是指通过链路层一跳就可以到达的节点。一旦邻居变成了邻接的关系,用来到达那个邻居的链路层帧头——被称为MAC字符串或者MAC改写字符串——就会被创建,并且被保存在邻接表中。例如,在以太网段上,帧头信息就是目的地MAC地址、源MAC地址和以太类型(EtherType),并按以太网的定义来排列。

例 2-6 显示了以太网的 MAC 头。在这个例子中,00044EB31838 是目的地 MAC 地址, 0003E4BB2000是源MAC地址,0800是IP的以太类型。

例2-6 邻接信息

一旦路由被解析,它就会指向一个邻接的下一跳地址。如果在邻接表中发现了一个邻接,那么与这个邻接相对应的一个指针就会被缓存到FIB单元中。如果存在到达相同目的地的多条路径(也就是说,存在多个下一跳或者邻接),那么每一个邻接的指针都会被增添到负载分担的结构中去。在CEF中,基于每数据包的负载分担在中断级别上是有用的。

除了上述情况,还存在几种异常邻接的类型。当前缀被增加到FIB表中时,需要异常处理(exception handling)的前缀被缓存为特殊的邻接。下面列举了一些特殊的邻接:

· Null——这种邻接针对那些指向 Null 0 接口的、要被丢弃的数据包。

· Glean——这种邻接针对那些通过广播网络附接的目的地,但是其广播网络又没有对应可用的MAC改写字符串。可以设想路由器直连到一个包含几台主机的子网的情形。路由器的FIB表维护着这个子网的前缀,而不是单个的主机前缀。这个子网前缀就指向一个 glean 邻接。当数据包需要被转发到一台特定的主机时,为这个特定的前缀就需要收集(glean)邻接数据库。这将导致额外的查找成本。

· Punt——如果数据包不被 CEF 支持,那么它们就会被转发给下一级慢速的交换路线来处理。

· Drop——是指要丢弃这种数据包,因为这些数据包不能被 CEF 交换,或者不能被踢给(punt)其他交换路线处理。

· Discard——类似于 Drop 邻接,但是只应用于 Cisco 12000 系列路由器。

图2-5中显示了CEF的所有组件之间的关联关系。

图2-5 CEF 的组件

3.分布式CEF

为了增强扩展性, FIB 也可以被分发到Cisco 7500和12000系列路由器的线卡上。事实上,分布式 CEF(Distributed CEF,dCEF)是12000系列路由器(吉比特交换路由器,Gigabit SwitchRoouter,GSR)惟一支持的一种交换机制。路由处理器(routeprocessor,RP)——7500路由器中的RSP或12000路由器中的GRP——使用IP路由选择表的信息创建主FIB表,在线卡被启动、插入或清除时,主FIB表被完整地重新置入到该线卡中。当线卡与RP同步后, RP只向单个线卡发送增量更新。只有路由选择拓扑发生变化时更新才会被发送。

当dCEF激活时,线卡会维护FIB和邻接表的一份相同的拷贝。这样线卡会在端口适配器之间执行快速转发,这就消除了 RP 在交换操作中的任务。dCEF 使用进程间通信( Inter-Process Communication,IPC)来确保路由处理器与线卡之间的FIB和邻接表的同步。IPC提供了一种可靠的和有序的消息交付机制。这种交付机制是一种简单的滑动窗口(sliding-window)协议,窗口大小为1。

图2-6显示了dCEF的组件。

图2-6 dCEF 的组件

注意:在 Cisco 12000 系列路由器上,dCEF是被默认启用的,它不应该被关闭;否则,数据包就会被丢弃。GSR线卡上不支持CLI关键字distributed,因为它是默认的。依赖于实现方式,线卡内的转发可以由软件,也可以由硬件来完成。

即使IPC对于CEF来说,是一种可靠的通信机制,但在有大量的更新期间,RP与线卡之间的数据库也可能失去同步。CEF的不一致可能导致转发问题。从Cisco IOS软件版本12.0(15) S,12.0(14)ST1和12.1(17)起,CEF不一致的检查器(checker)就已经被实现了。这个特性是默认启用的,但可以由 no ip cef table consistency-check命令来关闭。另外,可以通过命令ip cef table consistency-check typetype[period seconds] [count count]来更改检查器的各种参数,其中,type是指被修改的一致性检查器的类型,seconds是指多长时间扫描一次FIB表,而count是指多少数量的前缀被发送给RP。

一致性检查器有4种类型:

· lc-detect——线卡为某些地址转发不了数据包,于是把这些地址发送给 RP。如果 RP检测到它有相关的表项,那么就检测到了不一致,因此输出一个错误消息。RP向线卡发回信号,以确认不一致的前缀。

· scan-lc——线卡周期性地扫描自己的FIB表(默认的是60秒,但这个参数可以被配置),并把后续n条前缀发送给RP。n当前是100,但可以被配置。RP将执行精确查找工作。如果它发现任何前缀遗漏了,它就会报告不一致性的消息。针对线卡的信号机制和前面描述的一样。

· scan-rp——这是scan-lc的反面,由RP进行扫描。这一次线卡会将任何确认不一致的消息通知给RP。

· scan-rib——RP周期性地扫描IPRIB以确保表项也存在于RPFIB表中。这种检查器也可以运行在非分布式CEF的机制中。

在所有的情况下,只有RP才报告错误消息。一致性检查这种基础设施总是在检测机制里保留了统计信息,同时也记录了确认的不一致性的发生次数(当前是4)的详细信息。可以使用命令show ip cef inconsistency来显示不一致性检查的结果。你可以使用下面的方法来清除不一致性:

· 如果一条前缀从线卡上遗漏了,使用 clear cef linecard slot。

· 如果一条前缀从 RP 上遗漏了,使用 clear ip route*。

· 如果要重置一致性检查器,使用 clear ip cef inconsistency。

注意:重置路由选择表和CEF表可能会引起短暂的数据包丢失。

4.负载分担

CEF有两种负载分担方式:

· 基于每会话的负载分担(per-session load sharing)——这种方式通常会被称为基于每目的地的负载分担,虽然这样叫不太正确。这种形式的负载分担是路由器的默认行为,不需要专门去配置。一个会话就是指一路具有相同源和目的IP地址的流量。

· 基于每数据包的负载分担(per-packet load sharing)——基于每个数据包的基础进行负载分担。这种方式可以在路由器的接口配置模式下输入命令 ip cef load-sharing per-packet 来激活。为了使基于每数据包的负载分担正确地工作,必须在所有的输出接口上配置这个命令。

(1)基于每会话的负载分担

基于每会话的负载分担允许路由器使用多条路径分发流量。对于一个给定的源——目的主机对,即使有多条路径可用,路由器也会保证数据包取道相同的路径。而对于导向不同的源——目的地址对的流量,则往往取道不同的路径。基于每会话的负载分担在激活 CEF 的时候默认地也被激活,这是大多数情形中选择的方式。由于基于每会话的负载分担依赖于流量的统计分发,因而在源——目的对数量增加的情况下变得更有效率。基于每会话的负载均衡(balancing)能够确保导向给定的源——目的对的数据包按序到达,因为导向相同主机对的所有数据包都被路由到相同的链路(或多条链路)上。

对于导向给定的源和目的地址的每一个会话,都会指定一条活动的路径。每一条路径运载的会话数量相等。路由器运行一个使用源和目的地址、活动路径数量和路由器 ID 等参数的散列(hash)函数,把会话分配到这些路径上。16个散列桶从0到15编号。根据路径的数量和每一条路径的权重,路由器把会话均匀地填充到分配给每条路径的桶中。

例2-7中,从0到15的16个桶被均匀地填充了3条等价的路径(0到2)(这个例子没有使用15号桶。)

例 2-7 3 条路径的负载分担

不等价权重的负载分担也是可能的。路由选择协议以不同的流量分担计数来分配权重。当前,IOS支持每条前缀最多8条路径。

基于每会话的负载分担在流量偏态分布时存在潜在的问题。换句话说,如果所有的路由器使用相同的散列函数,那么流量可能总是使用相同的链路。Cisco IOS 软件版本 12.0(11)S2和以后的版本里集成了一种新的算法,它允许每一台路由器有惟一的ID。这个ID可以自动地被生成,或者使用可选关键字id固定下来。最终的目标就是使每一台路由器上的散列函数都是完全不同且相互独立的。

ip cef load-sharing algorithm universal [ id ]

如果要察看 ID,可以使用命令 show ip cef detail。例子 2-8 显示了输出的一个快照。

例 2-8 CEF 详情

(2)基于每数据包的负载分担

基于每数据包的负载分担使得路由器可以把连续的数据包发送到不同的路径上,而不必关心个别的主机或用户会话。它使用轮转的(round-robin)方法来确定每一个数据包取道哪条路径到达目的地。基于每数据包的负载分担确保了在多条链路上更加均衡地分布流量。

当大量数据通过单个会话的多条并行链路时,基于每数据包的负载分担显得更有效率。在这种情况下,基于每会话的负载分担将会过载其中一条链路,而其他链路几乎没有什么流量。启用基于每数据包的负载分担方式,能使你为同一个繁忙的会话交替选择不同的链路。

虽然基于每数据包的负载分担方式的路径利用率比较好,但是对于给定的源——目的主机对而言,数据包可能取道不同的路径。这会引起数据包的重新排序,这对于某些数据流量类型可能是不合适的,这些数据流量必须要依赖于数据包依次到达目的地,例如 IP 语音流量。

表2-3中比较了Cisco路由器上可用的不同的交换方式。

表2-3 比较Cisco路由器对穿越数据包的交换路线的支持

注释:* 包括没有在这里指定的、所有其他的路由器平台。

注释:** 对于一个平台,在不同的IOS版本下,默认的交换路线可能不同,这依赖于硬件的支持和被交换的协议的类型。

注释:*** 从IOS版本12.0开始,以后的版本就不再支持最优交换和分布式最优交换了。

注释:**** 只是为了收集流量的统计信息;而不是用于数据包的交换。

下面的几条命令可以显示接口使用的交换路线以及流量是如何被交换的:

· show ip interface

· show interface statistics

· show cef interface

· show interface switching

在中断级别上交换数据包所使用的 CPU 周期部分可以通过命令 show process cpu 显示。下面的例子提供了一些示例命令的输出。

例2-9显示了在接口级别上启用了哪种交换路线。在这个例子中,快速交换和CEF都被启用了。

例 2-9 命令 show ip interface的输出示例

例2-10显示了每个接口上CEF的状态。在这个例子中,CEF已经被启用了,但基于每数据包的负载分担没有被启用。

例 2-10 命令 show cef interface的输出示例

例2-11显示了接口交换的统计信息。在这个例子中,所有的数据包都是被进程交换的。

例 2-11 命令 show interface statistics 的输出示例

例2-12中显示的命令给出了更详细的信息,并列出了每一种协议的相关信息。这条命令列出了3种类型的协议:IP、CDP以及其他协议。在这个例子中,所有数据包都是被进程交换的。

例 2-12 命令 show interface switching 的输出示例

本案例研究的目的是为了演示不同组件之间的相互依赖性,这些组件都使用了BGP内存,这里特别关心 BGP Router 进程。本案例研究也建立了一个简单的方法,即基于一定数量的前缀和路径来评估所需要的BGP内存。这里使用了实验手段,来确定BGP组件与它们的内存耗费之间的种种关系。BGP消耗的总体内存是BGP网络(前缀)、BGP路径、BGP路径属性、IP NDB、IP RDB,以及 IP CEF 所使用的内存总和。最后将提供一份 Cisco 的 Internet 路由器上BGP内存使用的合理评估。

为了模拟 BGP 内存的使用,将使用 Cisco 12012 路由器和 4 个网络仿真工具。GSR 是被测试的设备,它运行 Cisco IOS 版本 12.0(15)S1。网络仿真工具能够模拟出 BGP 和 OSPF 会话。图2-7显示了测试拓扑图。

图2-7 测试网络的拓扑图

GSR运行了OSPF和BGP。它的GRP处理板有128MB的DRAM内存,例2-13和例2-14显示了它的版本和相关的配置。

例 2-13 命令 show version 的输出

例 2-14 GSR 的运行配置

(待续)

每个测试工具被分配了不同的AS号,从65001到65004。所有被通告的前缀都有24位的掩码(/24),并含2~6个C类网络。所有其他的BGP配置都用默认设置。

注意:在这个例子中,没有考虑路由映射、过滤列表、团体,以及路由反射等参数。例如,如果使用了入站温和重配置功能,那么就会消耗更多的内存。

为了在测试结果中提供内存使用的合理分布与前缀数量,模拟了11对BGP网络和路径组合,这显示在表2-4中。

表2-4 测试网络和路径的组合

对于每一个网络/路径对,这里收集了对 BGP RIB、IP RIB 和 IP CEF 结构的内存分配,也收集了反映 BGP Router进程、IP CEF 表、BGP 表和 IP 表中的内存使用情况。对于 BGP RIB来说,这些数据反映了 BGP 网络、BGP 路径和路径属性的内存使用情况。对于 IP RIB 而言,这些数据是有关 NDB 和 RDB 的数据。IP CEF的内存数据既包括了 FIB 结构,也包括了用来存储BGP网络的mtrie。

对于每一个组件,根据相关性,我们对照BGP网络或路径来标出内存使用情况。这里运用了线性回归来获得那个组件的评估模型。线性模型可以表示成下面的形式:

其中,y表示被评估的某种组件的内存使用量,x表示网络表项的数量或路径表项的数量,b表示直线的截距(当x为0时y的值),或者说是本案例中的评估偏差,a表示这条线的斜率,它标志了内存消耗对前缀和路径变化的敏感性。对于每一个线性模型来说,回归计算的结果就是a和b的值。

每个回归相对于实际数据的精确度可以通过R2 ,即判定系数(coefficient of determination)来表示。从数学上讲,R2是平方和的比率,因为回归是在所有平方的总和之上的。它也被称为相关系数(correlation coefficient)的平方。R2 的值在 0~1 之间,0 表示最差的相关性或没有相关性,而1表示最好的相关性或者完美符合。

根据前面章节讲述的方法,可以做出多个评估公式。下面的章节将从BGP被启用前内存的使用开始讲述。

1.在BGP被启用前的空余内存

在系统启动后但还没有配置任何路由选择协议前,GRP处理板上128MB的DRAM内存里可自由分配的内存是99.8MB,如例2-15所示。这时的内存主要是由IOS映像文件扩展到DRAM内存中所消耗的。这时,其他的进程使用了12.3MB,而剩下87.5MB的空余内存。

例2-15 内存使用汇总

当启用了OSPF并处理了442条OSPF路由后,空闲的内存就下降到了86.4MB,如例2-16和2-17所示。

例 2-16 IP RIB 的内存使用汇总

例2-17 进程的内存使用

在使用的1.1MB(13.4减12.3)的内存中,OSPF直接使用了大约390KB,如例2-18所示。剩下的内存被其他已经存在的进程消耗了。

例 2-18 OSPF 进程的内存使用

2.BGP网络的内存使用

图 2-8 显示了在 BGP RIB 中,用来存储所有 BGP 网络表项的内存的使用情况。这里根据网络表项(以Actual显示的)的数量绘制了内存使用情况,这些是实际的测量值。通过图中呈现的一条回归线可以直观地比较实际使用的内存量和模型计算出的内存量。这里的回归线就是:

图2-8 BGP 网络的内存使用

其中,R2为 0.996。在这个例子中,网络表项与路径表项之间的内存使用的相关性是可忽略的(没有显示这个数据;从现在开始,仅仅提及比较重要的回归)。

3.BGP路径的内存使用

图 2-9 显示了在 BGP RIB 中,用来存储所有 BGP 路径属性的内存的使用情况。它的回归线是:

其中,R2为1.000。

图2-9 BGP 路径的内存使用

4.BGP路径属性的内存使用

图 2-10 显示了在 BGP RIB 中,用来存储所有 BGP 路径属性的内存的使用情况。它的回归线是:

其中,R2为0.908。

图2-10 BGP 路径属性的内存使用

5.IP NDB 的内存使用

图2-11显示了NDB使用的内存情况。它的回归线是:

其中,R2为1.000。

图2-11 IP NDB的内存使用

6.IP RDB 的内存使用

图2-12显示了RDB使用的内存情况。它的回归线是:

其中,R2为0.996。

图2-12 IP RDB的内存使用

7.IP CEF 的内存使用

图 2-13 显示了 IP CEF 使用的内存情况。它的回归线是:

其中,R2为0.999。

8.BGP的内存使用总计

BGP Router进程使用的内存总量是所有组件使用的内存总和。利用前面讲述的方程式,你可以评估出每一个组件使用的内存。把所有6个组件使用的内存加在一起,你就可以获得一份总体内存的使用评估。

图2-13 IP CEF 的内存使用

举一个例子,假设 BGP RIB 有 103 213 条网络表项和 561 072 条路径表项。那么,表 2-5就显示了对每一个组件内存使用的估算。因而,BGP Router 进程总计使用的内存就是所有这些内存使用估算的总和——81.5MB。

表2-5 内存使用估算举例

表2-6汇总了所有的斜率。

表2-6 回归线的斜率

Cisco IOS软件保持了对3种与BGP有关的结构的跟踪:BGP RIB、IP RIB和IP CEF。BGP RIB用来保存通过BGP接收到的前缀,以及与这些前缀相关联的属性,例如团体属性、AS_PATH属性等等。一个BGP宣告者可以有多个BGP会话,这些会话按照iBGP和eBGP对等体来分,因此每条前缀有可能存在多条路径。每一条惟一的前缀被保存在 BGP 的网络表中,而同一条前缀的所有路径被作为BGP路径表项而保存。每一条前缀(或网络)和路径表项消耗的内存数量根据IOS版本的不同而不同。

命令 show ip bgp summary 的输出可以提供某个 BGP 组件的内存使用情况。在 Cisco IOS软件版本12.0(15)S1中,每一条惟一的前缀使用129个字节的内存,而每增加一条路径将再消耗 36 个字节的内存。例如,如果 BGP RIB 包含 100 条前缀和 200 条路径,那么这些表项总计消耗的内存是(100 × 129)+(100 × 36)= 16,500 字节。

命令的输出也包含了路径属性、团体属性、缓存等的内存使用情况,这依赖于BGP的配置和从对等体接收到的前缀。注意,这些数量少于所估算的数量(如表2-6所示)。这是因为命令show ip bgp summary 输出的内存数量不包含杂项开销。本案例研究的结果是直接从命令 show memory中得出的,它包括了所有的内存使用。

如果在路由器本地启用了 BGP 入站温和重配置功能,那么所有被拒绝的路由依然会被当作仅仅接收(receive-only)的路由而保留,这将导致 BGP RIB使用更多的内存。由于仅仅接收的路由被排除在最佳路径选择之外,因而它们不会影响 IP RIB 和 IP CEF的内存使用。从 IOS 软件版本12.0开始,路由刷新特性就可用了,当入站策略发生变化时,路由器能够动态地更新它的对等体,因此,不再需要入站温和重配置功能了。路由刷新特性在所支持的软件版本中是自动生效的,为了验证是否支持这个特性,可以执行 show ip bgp neighbor 命令。

这个测试没有考虑缓存路由映射和过滤列表所使用的内存。对于一个典型的拥有 10 万条路由和6条不同的BGP路径的Internet路由器来说,这部分内存的使用大约接近2MB,而BGP总计使用大约 80MB 的内存。BGP Scanner、BGP I/O 以及 BGP Router 进程的维护所需要的内存总共大约在50KB以下。

在这个案例研究中,只为BGP估算了静态的内存使用。这里的静态内存指当BGP处于稳定状态时所使用的内存——也就是说,前缀在网络已经收敛后的情形。然后,BGP在收敛期间可能会使用额外的内存。这种类型的内存称为瞬时内存使用(transient memory use)。瞬时内存的大小难以跟踪,而且它会根据一些因素而变化,例如发送和接收更新的方式,BGP Router 进程所处的状态以及IOS版本等。比如,对等体组允许复制一份从对等体组引导路由器(peer group leader)来的路由更新,并把它发送给该组的其他成员,因此维持这些消息只需要较少的内存。更新打包(update packing)是另一个减少发送给对等体更新数据包数量的方法。这些方法和其他一些性能调整技巧将在第3章中详细阐述。

根据 IOS 软件的版本、BGP 和路由器状态,BGP Router 进程处于以下 3 种状态之一,越是后面的状态,功能越强,使用的内存越多:

· 只读(read-only)——BGP从对等体那儿仅仅接受更新。它不计算最佳路径,也不把这些路由安装到路由选择表中。这就减少了瞬时内存的使用。在路由器初始化的启动阶段,BGP典型地就处于这种模式。

· 计算最佳路径(calculating the best path)——BGP 接受更新并运行路径选择进程,这个过程通常会和一些结构的缓存处理相关,因此,会增加瞬时内存的使用。这是典型的过渡模式。

· 读和写(read and write)——BGP接受更新,计算最佳路径,安装这些路由到 IP 路由选择表中,并生成更新以发送给它的对等体。这种状态将需要更多的瞬时内存。这种状态是BGP的常规模式。

在规划容量时,最佳实践(best-practice)的指导原则是:为瞬时内存和其他因素而考虑另外增加 20%的静态内存使用。需要密切观察的第二个数字是系统中可用的最大 DRAM 块的最小值。如果这个数字是20MB或更小,那么就需要增加更多的资源。

BGP RIB中所有的最佳网络/路径表项都会被安装到IP RIB表中,由此引起了NDB和RDB结构对内存的使用。如果一个主网络以固定长度或可变长度被划分了子网,那么在 IP RIB 中就会为这个主网络创建额外的表项。根据 IOS 版本的不同,每条表项使用 1172 字节的内存。子网化表项的内存使用在命令 show ip route summary 中被显示为internal。这个数值是命令 show ip route 中的表项的总数,这是在前缀被划分了子网或可变子网的情况下。在这个测试中,由于只使用了 2~6 个主网络,所以在 IP RIB 中,子网化表项的内存使用小于 7KB。

另一个对 IP RIB 和 IP CEF 中 BGP 内存使用有重要影响的因素是 BGP 负载分担,这个测试中没有考虑它。默认条件下,BGP 只会安装一条最佳路径到 IP RIB 中。如果使用了 BGP 多径特性,那么每条 BGP 前缀的多个表项就可能被安装到 IP 路由选择表中,从而增加了 IP RIB和 IP CEF 的内存使用。

被安装到IP RIB中的BGP前缀还会被安装到FIB表中。给IP CEF分配的内存通常与命令show ip cef summary报告的内存使用是一致的。对于运行dCEF的线卡来说,这只是BGP使用的内存,因为线卡不维护BGP RIB或IP RIB。除了与前缀数量有关外,CEF的内存使用还与前缀长度有关。例如,如果前缀是/16,这条前缀使用的内存就是1KB,紧接着mtrie的根也使用1KB内存。如果前缀是/24,将会再使用另外的1KB。如果前缀长度大于/24,那么再使用1KB。Internet上前缀的分布通常显示9%的前缀长度为/16或更短,83%的前缀长度在/17~/24之间,还有8%的前缀长度大于/24。为了建立一个简单而不失精确性的方法,这个测试所使用的前缀的长度都是/24。

本章以讨论控制层面与转发层面之间的相互关系作为开始;这两个层面都是路由器的基本功能。作为一种路由选择协议,BGP 是控制层面的一部分。但是,转发层面的性能也会影响BGP的性能,因为这两个层面可能会竞争同样的资源,例如CPU和内存。我们讨论了Cisco IOS软件里的 BGP 进程,特别强调了内存使用和这些进程间的相互作用。案例研究提供了一个简单的方法来估算在 Cisco Internet 路由器上的 BGP 内存使用情况。为了给本书余下的章节打下坚实的基础,本章还复习了一些BGP的基本组件。这些内容包括BGP的属性、路径选择、能力交换、iBGP、BGP-IGP路由选择交换,以及RIB等等。

在转发层面上,本章讨论了IOS软件中所有通用的交换路线,特别是CEF。进程交换和基于缓存的交换也作了复习。作为IOS软件中的高性能交换机制,本章对CEF作了详细的介绍,例如它的组件、结构、负载分担,以及它的分布式形式。

本章涵盖以下主题:

· BGP收敛的调整;

· BGP网络性能的特性;

· 案例研究:BGP收敛测试。

图书在版编目(CIP)数据

BGP设计与实现/(美)张(Zhang,R.),(美)巴特尔(Bartell,M.)著;黄博,葛建立译.-- 北京:人民邮电出版社,2012.7

ISBN 978-7-115-28589-8

Ⅰ.①B… Ⅱ.①张…②巴…③黄…④葛… Ⅲ.①互联网络—路由协议 Ⅳ.①TN915.05

中国版本图书馆CIP数据核字(2012)第122130号

版权声明

Randy Zhang, Micah Bartell: BGP Design and Implementation (ISBN: 1587051095)

Copyright © 2003 Pearson Education, Inc.

Authorized translation from the English language edition published by Cisco Press.

All rights reserved.

本书中文简体字版由美国Cisco Press 授权人民邮电出版社出版。未经出版者书面许可,对本书任何部分不得以任何方式复制或抄袭。

版权所有,侵权必究。

BGP设计与实现

♦著 [美] Randy Zhang Micah Bartell

译 黄博 葛建立

审 黄博

责任编辑 傅道坤

♦人民邮电出版社出版发行  北京市崇文区夕照寺街14号

邮编 100061  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

北京鑫正大印刷有限公司印刷

♦ 开本:800×1000 1/16

印张:34.5

字数:768千字  2012年7月第1版

印数:1–3000册  2012年7月北京第1次印刷

著作权合同登记号 图字:01-2012-3993号

ISBN 978-7-115-28589-8

定价:89.00元

读者服务热线:(010)67132692 印装质量热线:(010)67129223

反盗版热线:(010)67171154

相关图书

IPv6技术精要 第2版
IPv6技术精要 第2版
TCP/IP路由技术(第一卷)(第二版)
TCP/IP路由技术(第一卷)(第二版)
MPLS在SDN时代的应用
MPLS在SDN时代的应用
TCP/IP路由技术(第2卷)(第2版)
TCP/IP路由技术(第2卷)(第2版)
TCP/IP路由技术(第1卷)(第2版)英文版
TCP/IP路由技术(第1卷)(第2版)英文版
TCP/IP路由技术(第2卷)(第2版)英文版
TCP/IP路由技术(第2卷)(第2版)英文版

相关文章

相关课程