Internet 路由结构(第2版•修订版)

978-7-115-38335-8
作者: 【美】Sam Halabi
译者: 孙剑孙余强
编辑: 傅道坤王旭丹

图书目录:

详情

本书是BGP理论与实践的权威指南,涵盖了从基于BGP的网络设计,到BGP网络在Cisco路由器上的实现这一过程中所需要的全部知识。本书旨在通过BGP概念以及实践的讲解,来培养读者对路由选择的理解,以便能以一种客观有效的方法设计并实施网络。本书适合网络设计工程师、网络运维人员阅读,同时也是Cisco认证考试人员必不可少的阅读资料。

图书摘要

版权信息

书名:Internet 路由结构(第2版•修订版)

ISBN:978-7-115-38335-8

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 著    [美] Sam Halabi

  译    孙 剑 孙余强

  责任编辑 傅道坤

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

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

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

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315

Sam Halabi with Danny McPherson: Internet Routing Architectures(Second Edition)(ISBN: 157870233X)

Copyright © 2001 Cisco Systems, Inc.

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

All rights reserved.

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

版权所有,侵权必究。


本书是BGP理论与实践的权威指南,涵盖了从基于BGP的网络设计,到BGP网络在Cisco路由器上的实现这一过程中所需要的全部知识。本书旨在通过BGP概念以及实践的讲解,来培养读者对路由选择的理解,以便能以一种客观有效的方法设计并实施网络。

本书主要分为现代Internet、路由协议基础知识、有效的Internet路由设计、Internet路由设备配置等内容,对现代Internet的结构、ISP服务及特性、IP编址及分配技术、域间路由基础知识进行了讲解,并深入探讨了BGP-4的工作机制、功能和属性,以及BGP-4在网络设计中的具体应用。本书最后的附录一部分给出了BGP命令参考、进阶学习指南、BGP出站路由过滤以及多协议BGP等内容。通过本书的学习,读者将会学到如何将自己的网络集成到Internet上,如何构建大规模的自治系统,如何使用BGP-4来控制内部协议的扩展,如何设计稳定可靠的网络,以及如何使用Cisco IOS软件来配置所需的路由策略等知识。

本书适合网络设计工程师、网络运维人员阅读,同时也是Cisco认证考试人员必不可少的阅读资料。


Sam Halabi是Internet服务提供商行业技术专家的先驱之一。Halabi先生近期加盟了一家刚成立的IP组网公司,出任主管市场的副总裁。在Cisco系统公司就职的数年间,他一直领导着IP运营商市场的拓展工作。Halabi先生是复杂路由协议方面的专家,专攻大型IP网络设计。

作为光网络论坛委员会成员和MPLS论坛会员,Halabi在业界的表现有目共睹。

Danny McPherson现任Amber Networks公司CTO办公室架构总监。在此之前,他曾在四家Internet服务提供商中(Qwest,GTE Internetworking,Genuity,internetMCI)担任技术领导职务,负责网络和产品架构、路由设计、对等互连以及其他与业务或策略相关事务。McPherson对互联网工程任务组(IETF)和其他几个标准制定机构贡献颇多,是Internet架构和路由协议领域公认的专家。


Alexei Roudnev是一名软件系统工程师,现就职于Alcatel集团位于美国加州旧金山市的Genesys实验室。作为网络工程师,他曾经在俄罗斯莫斯科市为Relcom Network工作达10年之久,该公司是俄罗斯Internet的创立者之一。Alexei还有9年的UNIX系统软件开发经验。

Abha Ahuja是一名资深网络工程师,现任职于Internap Network Services,致力于网络设计、架构和运行方面问题的解决。加盟Internap前,她曾就职于Merit Network,这是一所业界领先的网络研究机构。她当时所从事的项目有:下一代路由服务器项目,针对全国范围的交换节点进行路由服务器部署;以及Internet性能测量分析(IPMA)项目。在Internet社团中,她长期以来表现活跃,研究兴趣包括域间路由行为及协议、网络运行和性能数据统计以及网络安全。她是一位技艺娴熟的网络工程师,还是公认的捣乱分子、天蝎座人格的典范。


Danny McPherson:献给我的妻子Heather,还有我的两个女儿Kortney和Ashli。你们是我的“基础设施”。


诸多人士的批评和建议使我受益良多。没有他们的帮助,本书几无面世可能。首先,我们要向Abha Ahuja、Shane Amante、Johnson Liu、Alvaro Retana、Alexander Rudenev诸君致谢,感谢他们对本书手稿杰出的技术审稿工作。还要特别感谢Henk Smit、Bruce Cole、Enke Chen、Srihari Ramachandra、Rex Fernando、Satinder Singh、Ravi Chandra、全体思科“BGP Coders”团队,以及所有对本书第二版有所贡献的人们。此外,我们要向Danny McPherson的现任雇主Amber Networks,以及前任雇主Qwest Communications表示谢意,你们的大力支持和持久耐心,对本书品质的保障善莫大焉。最后,我们还要感谢Christopher Cleveland、Tracy Hughes、Marc Fowler、Gayle Johnson以及Cisco Press的其他一干人等,本书得以按期付梓,要归功于你们。


作为发迹于20世纪60年代末期学术实验中的后生小辈,Internet今天还在为身份和成功苦苦争斗。从阿帕网(ARPANET)发展到NFS网再到公众网(ANYBODYSNET),Internet终于不再由单个机构所把持。只要消费得起,它属于任何人。渴望互联的用户多不胜数,更有不计其数尚未接入互联网的公司自惭为世人遗忘。要不断满足组网与互联的需求,网络设计和管理人员背负的压力可想而知。建立并深入对组网,尤其是对路由的理解,已是势所必然。

网络不管是发生故障乃至崩溃,还是运作正常,总会有人惊诧不已。情势如此,缺乏有价值的资料是症结所在。时至今日,设计、管理人员案头论及路由的资料,大半都令人倍感挫折:读时豁然贯通,尝试了又无功而返。本书第一版论述的正是实战背景下的真实路由问题,覆盖面广,易于理解。

本书第二版除了对第一版内容作了详尽更新,还介绍了对BGP协议的近期改进,探讨了围绕互联网号码(地址)分配及注册的新变化,并对科研和教学网络的相关信息有所充实。

本书的主旨是:在网络与全球Internet集成领域,帮助读者成为专家。从概念到实战场景,通过对编址、路由及连通等实际问题的展示,本书着眼于培养读者对路由的理解,使读者能以客观、专业的水准规划和实施大型网络设计。不论读者是Internet接入提供商还是其客户,对于他们网络所面临的路由问题,本书都有充分的预期和论述。

本书适用于需要接入Internet的任何组织。Internet服务提供商及其客户都需要集成网络。围绕网络管理者、集成者以及架构师各个视角的讨论贯穿本书。尽管本书涉及的专业知识层次不一,问题和概念的展开却都是由易到难、逻辑分明。共同的出发点不过是些简单、实际的工作场景,人人都能联系起来。对于路由亦或TCP/IP方面的学习背景不做要求。理解路由所需的基本概念和背景知识都在行文中按需引入,并未视为读者的已知技能。

本书由下面4部分组成。

第1章~第3章对现代Internet作了基本介绍,涵盖了Internet结构、服务提供商以及编址等各方面。即使读者已经对Internet的总体结构有所了解,我们仍然鼓励他们阅读第1章中论及网络接入点(Network Access Points)、路由仲裁项目(Routing Arbiter Project)和网络信息服务(Network Information Services)的部分。对于管理者所面临的路由设计问题而言,这些Internet组件沉积下来的压力依然延续着其实际影响。第2章为评估Internet服务提供商开列了极具价值的评判标准。作为提供商的代表或客户,对此类信息多少应该有些熟悉。第3章讨论了无类别域间路由(CIDR)、VLSM(变长子网掩码)、IPv6以及Internet编址的其他方面。

第4章~第5章覆盖的基础知识有:链路状态路由协议和距离矢量路由协议的各种属性,域间路由协议的必要性及其工作原理。针对这些议题,既有总体论述,又结合了BGP(Border Gateway Protocol,边界网关协议)应用的特定背景——BGP是当今Internet域间路由协议事实上的标准。这部分还对BGP协议的特殊功效及属性做了详尽介绍。

第6章~第10章关注的是BGP协议在实际设计中的应用。第2部分所介绍的BGP属性会在各种典型网络场景中得以实战展示,在实现冗余、对称、负载均衡等设计目标时一显身手。对于域间与域内路由协调运作、大型或快速增长网络的管理以及保持系统稳定等难点问题,也会逐一探讨。

第11章和第12章包含了大量有关BGP属性和各种路由策略的代码实例。在阅读完前面各章后再接触这些实例对读者最为有利,它们应对的正是(本书前几部分论及的)诸多概念和设计目标。读者可将前面各章的文字论述与第11章、第12章的代码实例互为参照,前面章节中会有“配置实例”的示意标记适时出现,阅读时能快速翻至参考页,查看研讨属性或策略的实际例子。

书末附录包括:为进一步阅读提供的附加参考资料,Cisco IOS™命令参考的最新版,因改善BGP命令行界面对IOS™所做修改的相关信息。

技术资料要写得通俗易懂非常困难。技术细节剥离太多就失去意义,若是原汁原味地和盘托出又会令概念模糊不清,读者会不知所措。本书对技术细节的介绍是逐步展开,尽可能以实际场景作为背景。技术含量最为丰富的信息——采用Cisco IOS语言编写的配置范例——放在了本书最后两章,彻底基于前述各种概念和拓扑示例。

尽管最终目标是设计和实现各种路由策略,在投入实际网络应用前,掌握概念和原则却至关重要。本书坚持由一般到特殊、由理论到实践,循序渐进的写作风格,来把握概念与实现两种视角间的平衡。即便在必须进行大段描述的章节,也提供了指向配置实例、常见问题以及场景释疑的示意标记,以便于读者实际操作。

围绕场景的写作手法是本书的一大亮点:所论及的几乎所有协议属性和路由策略,都基于典型网络拓扑加以展示。即便书中场景不见得与读者网络情况完全一致,但其细微处足易于读者参照学习,其通用性又能令读者自行推导,并因地制宜地使用书中所阐述的概念。

对于协议细节和设计相关信息,本书力求毫无保留。同时,我们也意识到:必须建立总体和概念上的理解,此乃第一要务。在演绎基础理论的同时,如何突出实际和设计内容?本书的两大特色对此助益颇多。

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


译者所持《Internet Routing Architectures》(Second Edition)原版书的版权页上赫然印刷着“Tenth Printing Jan.2009(2009年1月第10次印刷)”。可见此书在国外的受欢迎程度。21世纪以前,国内曾出版过此书第一和第二版的翻译版,译者至今还保存着此书第一版的翻译版,红色的硬皮封面,小开本。当年,该书系被称为Cisco“红宝书”。只是光阴荏苒,“红宝书”系列早已风光不再,在翻译此书时,甚至连一点参考价值都没有。

要感谢人民邮电出版社居然有此魄力出版这本发行已逾十载的网络技术书籍。此书好评如潮,不过在这里,译者要唱一下反调。译完此书,译者感受最深的就是中国的一句老话—“外国的月亮不比中国圆”,国外作者未必强于国人,Halabi远非神人。译者甚至认为,本书的两位作者应该重新接受一下写作方面的培训。作者的表达能力给本书的翻译工作制造了极大障碍。依译者之见,且不说翻译成中文,即便对于母语是英语的人,如果不精通BGP,可能也很难读懂本书。所以,译者可以断言,给本书好评的人若不是早已精通BGP的网络专家,就是人云亦云之辈。翻译此书时,许多地方译者并没有直译,也无法直译,而是尽量按照自己对BGP的理解和作者的原意给出译文。译文中词不达意之处在所难免,恳求读者海涵。

译者还要感谢我国的国有企业制度,如果本人不是供职于国有企业,可能早就放弃了此书的翻译。每天下班后,我都会和孙剑就翻译中遇到的问题讨论至夜深,4个月的翻译时间一晃而过。在翻译过程中,我和孙剑都在反思一个问题:从事IT技术图书的翻译工作值得吗?英国作家乔治•奥威尔曾经说过“我坐下来写作一本书时,我并没有对自己说‘我要加工出一部艺术作品。’我之所以要写一本书,是因为我有谎言要揭穿,我有事实要引起大家注意。”我们自然不能和奥威尔相提并论,可我们要说的是:“我们之所以要翻译,是因为我们想降低读者掌握IT技能的成本,仅此而已!”但话又说回来,我们煞费苦心,又有多少人能够辨别出译文质量的好坏呢?

最该感谢的是傅道坤编辑对我的极度信任。我们会把你交给我们的每一本书翻译好,以此来回报你的信任。


感谢本书的合译者孙剑。你也是我所有网络技术书籍的合译者,没有你的审校,译文的水准会下降大半,硬伤也会更多。拖着你下水,让你帮我校对这枯燥无味的一本接一本网络技术书籍译稿,心里一直过意不去。你早就和我说过,你要翻译编程方面的书籍,我一直铭记于心。在我们翻译的《The Linux Programming Interface》图书里,我会助你得偿所愿,让你施展你在编程和翻译方面的才能。

感谢我的父母,特别是母亲,翻译本书时,我焦虑不安,我想这世上也只有你能忍受我的暴躁。我之前翻译的每一本书,你们都会兴高采烈地收藏。我知道,这会让你们很有面子。可除了这点面子以外,我还能回报什么?

再次感谢傅道坤编辑,感谢你保留译文中所有的译者注,翻译过程中,通过撰写译者注(可惜,翻译费用按英文字数计算),我才勉强撑到交稿。能保留这些译者注,是我们翻译的唯一乐趣和最大动力。

孙余强  

sunlengxie@gmail.com

2011年1月8日于安徽合肥

首先,要感谢本书的编辑傅道坤先生。没有你的信任,我根本无缘翻译本书。 还要感谢孙余强同学。去年之于我,颇有些“忧世伤生”的意思。每每踯躅不前时,总有孙同学的鞭策和鼓励。本书翻译进度神速,实在有赖于此。 一如既往,需要感谢我的妻子 ——许渝,对本书翻译工作的支持。 同样一如既往,需要感谢我的儿子 ——孙晓凡:你照亮了我的生活!

孙 剑  

5515159@gmail.com

2011年1月10日于安徽合肥


在本书中,计算机外设和其他设备使用如下图标表示。

在本书中,网络和网络连接使用如下图标表示。


路由问题和解决方案的复杂程度与现代Internet的发展壮大紧密相关。因此,在深入探讨路由协议的细节之前,对普遍观点和背景知识有所了解大有裨益。第1章涵盖了诸如路由仲裁项目(Route Arbiter Project)、网络接入点(Network Access Points)以及网络信息服务(Network Information Services)的历史变迁。对于希望接入全球网络的组织而言,它们依然发挥着极为现实的作用。第2章介绍了与Internet服务提供商相关的普遍问题和网络拓扑问题。第3章阐述了编址和无类别域间路由概念,用以控制IP地址空间消耗。

第1章 Internet之演进

第2章 ISP服务及特性

第3章 IP编址及分配技术


本章包括如下主题。

本章以Internet编址的简史拉开序幕,介绍了传统IP版本4(IPv4)编址和子网划分的模型。从这里,读者可以对Internet地址空间耗尽的相关问题有所了解。然后,我们会深入研究IP编址技术和分配策略,诸如可变长子网掩码(VLSM)、无类别域间路由(CIDR)以及网络地址转换(NAT)。最后,本章收束于对IP版本6(IPv6)的简介。

在任何网络中,编址策略与路由架构都有着最直接和最根本的关系。路由架构和路由器的基本功能之一,就是为自己所引导的流量提供足够多的地址。随着Internet爆炸式的增长,单是地址数量和新编址策略的演进这两项就对路由架构提出了新挑战。对IP编址历史和基础知识的了解无疑会有助于读者快速掌握路由协议概念。

当今在用的Internet编址方案基于Internet协议版本4,一般简称为IP。本节会讨论如下主题。

IP地址是一个独一无二的4个字节值(32位),以点分十进制(以点号连接的4个小于255的数字[dotted-quad])来表示,形式为W.X.Y.Z,IP地址的每个字节都用“.”隔开(例如10.0.0.0)。这个32位的字段由两部分组成:网络或链路号(表示地址的网络部分)以及主机号(标识网段上的主机)。

传统上,都是根据IP地址类别来定义网络和主机边界,总共定义有5种类别(其中3类用于单播寻址):A、B、C、D、E。表3-1所示为不同类别的地址空间以及其各自功能。

表3-1 IP地址类别及功能

地址
类别

地址范围

高阶
位数

网络
位数

主机
位数

功能

A

0.0.0.0~127.255.255.255

0

7

24

单播

B

128.0.0.0~191.255.255.255

10

14

16

单播

C

192.0.0.0~223.255.255.255

110

21

8

单播

D

224.0.0.0~239.255.255.255

1110

 

 

多播

E

240.0.0.0~255.255.255.255

1111

 

 

预留

请注意,只有A、B以及C类地址用于单播。D类地址用于多播,E类地址空间则为预留。每种类别中,都预留了若干地址,用于特殊用途。表3-2列出了其中的一部分。

表3-2 特殊功用的IP地址

地址范围

用途

0.0.0.0

未知网络;常用来表示默认路由

10.0.0.0~10.255.255.255

预留以作私用(RFC 1918)

127.0.0.0~127.255.255.255

预留为loopback/本机地址

172.16.0.0~172.31.255.255

预留以作私用(RFC 1918)

192.168.0.0~192.168.255.255

预留以作私用(RFC 1918)

255.255.255.255

受限广播

通常将这种基于类别编址(寻址)的方案称为有类模型。取决于所需的网络数与主机数之比,不同的地址类别适用于不同的网络配置。随着本章的深入,各种地址类别的完整内涵会愈发清晰。以下几节会着重介绍各个类别的基本定义。

A类编址

IP地址的最左边1位固定为0表示A类网络。IP地址的第1个字节(位0~位7,从最左边的那1位开始)表示网络号,其余的3个字节(位8~位31)表示该网络上的主机号。124.0.0.1便是一个A类网络地址的例子,其中124.0.0.0代表网络号,主机号为1。如图3-1所示,如此表示可以得到128(27)个可用的A类网络号。然而,0.0.0.0并非有效的网络号,因此A类网络地址只有127(27–1)个可能的网络号。

图3-1 A类地址的通用格式

网络一经定义,该网络中的首尾两个主机地址就要行使特殊职能。首地址(如上例的124.0.0.0)用来表示网络号,尾地址用来表示本网络的定向广播地址(124.255.255.255)。因此,每个A类网络的主机数为16777214(224–2),而非16777216(224)。

B类编址

IP地址的最左边2位固定为1和0表示B类网络。地址的前2个字节(位0~位15)表示地址的网络部分,其余2个字节(位16~位31)表示该网络中的主机号。如图3-2所示,如此表示可以得到16384(214)个可用的B类网络号,每个网络拥有65534(216–2)台主机。172.16.0.1就是一个B类地址的例子,其中172.16.0.0为B类网络,1是该网络的主机。

图3-2 B类地址的通用格式

C类编址

IP地址的最左边3位固定为110表示C类网络。前3个字节(位0~位23)表示网络号,第4个字节表示该网络中的主机号。如图3-2所示,如此表示可以得到2097152(221)个网络号,每个网络有254(28–2)台主机。192.11.1.1便是一个C类地址例子,其中192.11.1.0是网络号,主机号为1。

图3-3 C类地址的通用格式

D类编址

IP地址的最左边4位固定为1110就表示D类网络。D类地址空间为多播而预留,用来标示多播组地址。

E类编址

IP地址的最左边4位固定为1111就表示E类网络。当前,E类地址空间为实验用途而预留。

最基本的IP子网划分和可变长子网常为人们所误解。本节会简要介绍子网如何划分,下一节会讨论变长子网掩码(VLSM)。

子网或子网络是指A、B、C类网络的子集。为了更好地理解子网划分的原理,让我们先来仔细观察一下还没有被划分为子网的IP地址。如前所述,IP地址由网络部分和主机部分组成——表现为一个静态的双层分级编址模型(网络和主机)。IP子网划分引入了具有网络掩码或子网掩码概念的第三层级别。网络掩码起位掩码(bitmask)作用,其中各位(bit)置1,部分与有类IP网络号的使用位相对应,其余与子网号相对应。

在图3-4中,子网掩码255.0.0.0 应用于网络10.0.0.0。该掩码的二进制表现形式是一串连续的1,紧跟一串连续的0。全为1的部分表示IP地址的网络号,全为0的部分表示地址的主机号。这样,子网掩码就提供了一种机制,将主机10.0.0.1的IP地址分割成了网络号和主机号,前者为10,后者为1。

图3-4 基本的网络掩码

A、B、C类地址各自都有原配掩码(natural mask),创建这种掩码,是依据各类地址中网络和主机部分的确切定义。A、B、C类地址的原配掩码如下所示。

通过将IP地址的网络和主机部分相分离,则可以很容易地根据掩码来划分子网。如果没有子网掩码,网络号的用途会非常有限。每个物理网段,例如以太网令牌环网,或FDDI网段,通常都会与一个或多个网络号相关联。如果不进行子网划分,像10.0.0.0这样的A类网络仅供一个物理网段使用,而这个物理网段上的主机数却有1 600万台之多,如图3-5所示。

图3-5 未划分子网的A类地址空间

利用掩码可以将地址的网络部分延伸到主机部分,从而把一个大型网络划分为多个小型子网。子网划分技术在削减单个网络中主机数量的同时,大大提高了子网数。

在图3-6中,将255.255.0.0的掩码应用于网络10.0.0.0。这就将IP地址10.0.0.1划分为三部分:以10表示的网络号,以0表示的子网号,以1表示主机位。掩码255.255.0.0借用部分主机地址空间,并将其应用于网络地址空间。于是,有类网络10(classful ten-network)从一个单一巨型网络一变而为256个较小的子网,子网范围为10.0.0.0~10.255.0.0。同时,网络中每子网的主机数也从原先的16777214减为65534。

图3-6 基本的子网划分

注意:


在本例中,10.0.0.0表示零号子网。某些“古董级”路由器软件不允许使用零子网地址空间,默认情况下,IOS也不允许使用零子网。要想在IOS中使用零号子网,需配置ip subnet-zero命令

术语可变长子网掩码(VLSM),是指可以为一个网络配置不同掩码。VLSM的基本意图有二:首先是在将网络划分为多个子网时提供更大的灵活性;此外,还能以最优方式在子网间分配数量可变的主机地址空间。若是没有VLSM,就只能将一种子网掩码应用于一个网络。这样一来,所需的子网数一旦确定,就会严格限制主机数。即便选定了某个掩码可以获得足量的子网数,每个子网中可分配的主机数也未必就够。反之亦然,就算选定了某个掩码,获得了足量的主机数,但在子网数方面可能又无法得到保证。VLSM提供了按可变数量(数量不等)的主机来分配子网的能力,从而使得网络管理员能更为合理地利用地址空间。

举例来说,假设现有一C类网络192.214.11.0,并需要将其分为3个子网。其中一个子网需要100台主机,另外两个子网各需要50台主机。不考虑一头一尾两端的限制,即0(网络号)和255(定向广播地址),理论上有256个主机号可用,从192.214.11.0~192.214.11.255。如下所示,没有VLSM,就无法划分出所需的子网。

为了确定网络192.214.11.0“旗下”可用的子网选项,首先需要识别出网络掩码:本例中该传统C类网络掩码为255.255.255.0(前3个字节全是1)。可以利用255.255.255.X形式的若干子网掩码将C类网络192.214.11.0划分为多个子网。掩码从最左边第一位开始,必须连续为1,余下的则连续为0。

注意:


最初,掩码不必是一组连续的1,紧跟连续的0。例如,有些实现就曾经以“中间位”来标识地址的主机部分,用低位来标识子网。这种灵活性为网络管理员带来的益处寥寥无几,还使路由选择的复杂度大为增加。人们因而对规范做了更新,只允许掩码起始于一组连续的1。

表3-3列出了可能的掩码,将256个可用地址分割为更多子网。

表3-3 可能的C类子网

最后一个字节

二进制表示

子网数

主机数

128

1000 0000

2

128

192

1100 0000

4

64

224

1110 0000

8

32

240

1111 0000

16

16

248

1111 1000

32

8

252

1111 1100

64

4

注意:


主机数一栏包括了网络号和定向广播地址。

VLSM诞生之前,传统网络只能用单个连续的子网掩码进行划分。在本例中,可以选择使用子网掩码255.255.255.128将上述地址划分成2个子网,每个子网有128台主机;或者,可使用子网掩码255.255.255.192将该地址划分为4个子网,每个子网有64台主机。但以上两种选择都无法满足需求:一个网段有100台主机,而另外两个网段各有50台主机。

使用可变长子网掩码,就能满足上述需求。还是以网络192.214.11.0为例。首先,利用掩码255.255.252.128将该网络地址划分成两个子网,每个子网都有128台主机。这两个子网分别是该C类网络的上下两半部分,分别由192.214.11.128(.128~.255)和192.214.11.0(.0~.127)来表示。接下来,利用掩码255.255.255.192对网络192.214.11.128做进一步的子网划分,又得到了2个子网——子网192.214.11.128(.128~.191)和子网192.214.11.192(.192~.255),每个子网各有64台主机。

图3-7和图3-8分别描述了该网络的划分过程(请注意:在主机数中计入了网络号和定向广播地址)。

图3-7 将C类地址划分成3个子网的示例

图3-8 使用VLSM把网络空间分割为大小不等的子网

当然,并非所有路由协议都能支持VLSM。路由信息协议版本1(RIP)和内部网关路由协议(IGRP)在路由更新消息中都不携带子网掩码,因而都不能正确处理以可变长子网掩码来划分的网络。如今,尽管诸如OSPF、EIGRP、RIP版本2以及IS-IS之类支持VLSM的路由协议已经部署开来,但在适应VLSM上,网络管理员仍有困难。大多数利用RIP-1和IGRP来构建的早期网络,其地址分配方式并不合理,无法以最优方式集结为连续的地址块。相反,这种网络的IP地址都是分散的,管理员不得不对主机重新编址,令其符合新的编址方案。重新编址可谓是相当麻烦,网络管理员往往也将其视为不可能完成的任务。新老编址方案的共存是一大挑战,网络管理员们采用了大量策略以及静态路由来应付这种情况。

人们对IP地址需求的持续增长,给有类编址模型带来了沉重压力。大多数公司之所以申请B类地址,是由于其在网络数和主机数之间较为均衡,能够最大限度地满足需求。A类地址则太过“慷慨”,一个网络便可容纳1 600万台主机;而C类地址又太过“吝啬”,每个网络所能容纳的主机数太少。时至1991年,事态已然明朗,B类地址消耗并无减缓迹象,必须采取措施来阻止其消耗。

这些措施包括采用创造性的IP地址分配技术,并鼓励那些无需具备全球Internet连通性的公司使用私有地址。其他措施则催生了像ROAD(路由和编址工作组)及IPng(下一代IP委员会)这样的工作组和委员会。1992年,ROAD工作组提出,采用无类别域间路由(CIDR),以摆脱有类IP编址技术。与此同时,IPng 委员会正在致力开发一种新的改进型IP编址方案——使用IP版本6来最终解决IPv4编址所面临的地址使用问题。

应对IP地址空间耗尽问题的措施可分为下列4类。

IP地址需求量的增长,伴随人们对IP地址空间耗尽问题的关注,需要转变只由一个中心注册机构来分配IP地址的流程。最初,IANA和IR(Internet注册机构)完全控制了IP地址的分配。IP地址开始是按序分配给各个组织,并未考虑各个组织的地理分布,以及这些组织与Internet的对接方式和地点。这种地址分配方法的效果无异于老鼠打洞——零散的或小规模地址块将IP地址空间弄的“千疮百孔”,也毁掉了大量连续的网络地址块。

后来,在分配IP地址时就另辟蹊径,先将大量的连续地址块分配给各个管理机构(比如服务提供商),这些服务提供商再从自己的地址块中依次为客户分配地址。一般来说,这种沙漏式的(funnel-down)地址分配方法,也预示着该地址分配方案在可控性和层次化上都更进一步。在某种程度上,这类似于电话号码的分配方案——区号与地区级电信分公司关联(提供商网络),局向号与电信分公司支局关联(小型提供商网络),电话号码尾数则与客户关联(主机)。

A类网络号属稀缺资源,对A类网络号的分配是严格受限的。尽管还会继续分配A类地址空间,但是目前都是基于子网来分配的,不会再以整个有类边界来分配了。B类地址在分配方面也同样受到了严格限制,也要基于子网来分配。而C类地址则往往是由上级提供商直接分配。表3-4总结了当前C类地址空间的分配情况。

表3-4 C类地址分配情况汇总

组织需要

地址分配

地址数少于256

1个C类网络

地址数少于512而大于256

2个连续的C类网络

地址数少于1024而大于512

4个连续的C类网络

地址数少于2048而大于1024

8个连续的C类网络

地址数少于4096而大于2048

16个连续的C类网络

地址数少于8192而大于4096

32个连续的C类网络

地址数少于16384而大于8192

64个连续的C类网络

某些地区性的Internet地址分配机构,例如,美国Internet编号注册中心(ARIN),已开始考虑是否直接将公网IP地址直接分配给终端用户网络。要从ARIN直接获得IP地址空间,网络至少要拥有16个C类地址,或4 096台主机,用户还须说明其正当理由。即便理由正当,仍然鼓励网络管理员向自己的服务提供商申请此类规模的地址空间。

在ARIN Web站点(http://www.arin.net/)可以找到用户申请IP地址的指南、现行地址分配策略、申请模板以及其他相关信息。

现在来说一下地址空间在地理上的分配,全球分为4大区域:欧洲、北美和非洲撒哈拉以南地区、环太平洋地区,中/南美洲地区。表3-5总结了为这几大区域预留的IP地址空间。分配区域跨地区则表示有网络号在实施该方案前已被分配出去。

表3-5 各个主要地理区域的地址空间分配情况

地址空间

分配区域

分配时间

61.0.0.0~61.255.255.255

APNIC—环太平洋地区

1997年4月

62.0.0.0~62.255.255.255

RIPE NCC—欧洲地区

1997年4月

63.0.0.0~63.255.255.255

ARIN

1997年4月

64.0.0.0~64.255.255.255

ARIN

1999年7月

128.0.0.0~191.255.255.255

不同的注册机构

1993年5月

192.0.0.0~192.255.255.255

跨区域

1993年5月

193.0.0.0~195.255.255.255

RIPE NCC—欧洲地区

1993年5月

196.0.0.0~198.255.255.255

不同的注册机构

1993年5月

199.0.0.0~199.255.255.255

ARIN—北美地区

1993年5月

200.0.0.0~200.255.255.255

ARIN—中美和南美地区

1993年5月

201.0.0.0~201.255.255.255

Reserved—中美和南美地区

1993年5月

202.0.0.0~203.255.255.255

APNIC—环太平洋地区

1993年5月

204.0.0.0~205.255.255.255

ARIN—北美地区

1994年3月

206.0.0.0~206.255.255.255

ARIN—北美地区

1995年4月

207.0.0.0~207.255.255.255

ARIN—北美地区

1995年11月

208.0.0.0~208.255.255.255

ARIN—北美地区

1996年4月

209.0.0.0~209.255.255.255

ARIN—北美地区

1996年6月

210.0.0.0~210.255.255.255

APNIC—环太平洋地区

1996年6月

211.0.0.0~211.255.255.255

APNIC—环太平洋地区

1996年6月

212.0.0.0~212.255.255.255

RIPE NCC—欧洲地区

1997年10月

213.0.0.0~213.255.255.255

RIPE NCC—欧洲地区

1999年3月

216.0.0.0~217.255.255.255

ARIN—北美地区

1998年4月

近年来,全球IP路由表规模不断增长,导致路由器的处理能力和内存分配趋于饱和。增长率预测和统计数据表明,在1991年~1995年期间,每隔10个月路由表的规模就会翻一翻;自1998年后,增长更趋显著。图3-9所示为路由表规模的增长情况。

图3-9 Internet路由表规模的增长情况

如果没有任何规划,在1995年路由表的规模就会增长到近80000条路由。而2 000年初的实际数据表明,路由表规模仅为76000条左右。路由表规模增速放缓要归功于上节探讨的IP地址分配方案,以及CIDR技术的运用。

CIDR迈出了发展性的一步,摆脱了传统的有类IP地址(即A、B、C类网络)。对CIDR来说,IP网络的表示形式是:一个前缀——即网络的IP地址,紧跟一个“/”,最后再紧跟一个数字,该数字与“/”前网络地址的网络掩码相对应,用来表征最左侧的连续有效(置1)位数。例如,带有/16的网络198.32.0.0,记为198.32.0.0/16。/16表示从最左侧开始计数的掩码位数为16。这等同于网络掩码为255.255.0.0的IP网络198.32.0.0。

当某个前缀掩码边界所含位数少于该网络原配掩码位数时,就称其为超网(supernet)。例如,C类网络192.32.1.0原配子网掩码为255.255.255.0,与CIDR标记/24相对应。而192.32.0.0和255.255.0.0的表示方法同样可以记做198.32.0.0/16,两者的掩码位数都小于其原配掩码(16<24);因而将这样的网络称为超网。图3-10描绘了这一地址方案。

图3-10 基于CIDR的编址方案

这一表示方法提供了一种机制,可以轻易将198.32.0.0/16旗下所有的明细路由(比如198.32.0.0、198.32.1.0、198.32.2.0等)归并为一条路由通告,人们称之为聚合路由(aggregate)。

以上提及的术语很容易引起混淆,尤其是聚合路由、CIDR以及超网之类的术语经常交替使用。一般来说,上述术语都可用来表示:将一组相邻IP网络汇聚为一条路由通告。确切地说,CIDR由<前缀/长度>标记来表示,超网的前缀长度总是短于原配掩码,而聚合路由则表示汇聚到一起的路由。

通常,将作为聚合路由或CIDR地址块子集的所有网络称为明细路由,因为这样的路由为网络定位提供了更详细的信息。与聚合路由相比,多数明细路由的前缀长度要更长一些。

相对于传统的有类路由进程域,支持CIDR的路由进程域被称为无类路由进程域(classless)。CIDR描绘了一具崭新而更具层次化的Internet架构,其中各域的IP地址都取自于其直接上级。在路由传播方面,极大地节省了网络资源,尤其是在靠近叶或末梢(stub)网络的位置执行路由聚合时。叶或末梢网络是全球性网络的末端,因而也不会再向其他网络提供Internet接入。支持众多末梢网络的ISP会将自身子网进一步细分为更小的地址块,再提供给客户。路由聚合允许ISP通告一个IP网络,通常以超网的形式,而非单独通告多个零碎的子网,从而使得路由的传播和路由策略更为高效,也保障了路由通告的稳定。图3-11所示为路由汇聚的功效。

图3-11 有类编址Vs.CIDR编址

本例中,分配给ISP3的公网地址块为198.0.0.0~198.1.255.255(192.168.0.0/15)。ISP3随之从该地址块中为ISP1和ISP2分配了2小块地址。ISP1的地址范围为198.1.0.0~198.1.127.255(198.1.0.0/17),ISP2的地址范围为198.1.128.0~198.1.255.255(198.1.128.0.0/17)。采用同样的方式,ISP1和ISP2在各自的地址范围中为各自的客户分配地址块。图3-11左例所示为不使用CIDR的情形:ISP1和ISP2通告所有来自客户的子网,ISP3则会将所有路由通告给外部世界。这导致了全球IP路由表规模的急速增长。

图3-11右例所示为应用了CIDR的同一场景。ISP1和ISP2针对各自的客户子网执行路由聚合,ISP1通告聚合路由198.1.0.0/17,ISP2通告聚合路由198.1.128.0/17。ISP3以同样的方式对自己的客户子网(ISP1和ISP2)执行路由汇聚,并且只向其对等网络通告聚合路由198.0.0.0/15。这会极大地降低全球IP路由表规模的增长速度。

正如读者所见,路由聚合的执行位置越靠近网络叶节点,成效就越显著,这是由于聚合子网中的大多数都部署于客户网络。在网络架构的更高层再执行路由聚合,比如在ISP3,会进一步提高效率,因为AS3学自下游客户的网络数减少了,需要处理的也就少了。

如果每个客户只通过单条链路接入提供商——这也被称为单宿主连接方式(single-homing),并且假设客户的IP地址取自于提供商的CIDR地址块,那么执行路由聚合的效果最佳。不幸的是,现实并非总是如此。例如,如果客户的IP地址并非来自于其提供商的地址空间,这就出问题了。此外,一些客户(可能自己就是提供商)需要同时连接到多个提供商,即所谓多宿主(multihoming)场景。以上情形都会使聚合更趋复杂,灵活度降低。

路由选择的最长匹配原则

路由设备将数据包路由至任何目的地时,总是遵循最长匹配这一基本原则:为转发数据包,路由器在面对两条通往同一网络但长度不同的前缀(路由)时,总会选择掩码位数较长的那条前缀。让我们举例说明,假定一台路由器的路由表中有以下两条路由。

198.32.1.0/24 via path1(路径1)

198.32.0.0/16 via path2(路径2)

在本例中,当路由器试图将流量交付给主机192.32.1.1时,会设法匹配拥有最长前缀的那条路由,即选择路径1来交付流量。图3-12描述了路由选择的最长匹配原则。网域C收到了2条路由更新198.32.1.0/24和198.32.0.0/16,并选择路径1来转发目的地址为198.32.1.1的流量。

图3-12 遵循最长匹配原则

若路径1因某种原因而不能使用,网域C会利用路由表中下一条与目的地址最为匹配的路由来转发流量,在本例中会选择路径2来交付流量。若网域C从网域A和B分别收到等长掩码的相同路由更新时,网域C会任选其一,或者同时选择两条路径,这取决于网域中运行的具体路由实现所提供的负载均衡技术。

最长匹配原则意味着:对于连接到多个网域的目的网络,必须总是由这些网域明确宣告其路由,也就是说,以最为具体的非聚合形式来通告。如图3-12所示,因为网域B没有显式通告路由198.32.1.0/24,由客户发往该主机(198.32.1.1)的流量必定遵循最长匹配原则,一直优选路径1,即与网域A互连的路径。这一路由配置必然会令网域A不堪重负。

本地网络聚合路由中的非明细路由

为了防止路由环路,路由选择规则特别规定:当数据包的目的地址匹配本地生成的聚合路由时,该网络绝不能遵循非明细路由转发该目的地址的数据包。当流量在网元(网络设备)之间“打转”时,便会发生路由环路,流量也绝不会抵达其最终目的地。该规则的一个特例是默认路由0.0.0.0/0。当目的地址落在自己所通告的聚合前缀范围内时,该网络就不应该遵循默认路由去转发相应的流量。正因如此,对于处理聚合路由的路由协议来说,应该总是为聚合路由本身保留位桶(bit bucket)(按Cisco的说法,这叫Null0路由)。发送到位桶的流量将会被丢弃,从而预防潜在的路由环路。

提示:


在配置默认路由的同时,利用位桶来避免路由环路。

图3-13所示为ISP1将本网域中的路由聚合为单条路由198.32.0.0/13。

图3-13 遵循本地网络聚合路由中的非明细路由转发流量,势必会导致环路

现假定ISP1与其客户Foonet(网络198.32.1.0/24所在地)之间的链路发生故障。此外,还假定ISP1设有一条指向ISP2的默认路由0.0.0.0/0,用来转发目的地址不为ISP1所知的流量。目的地地址为198.32.1.1的流量(由ISP2所发)遵循ISP1通告的聚合路由送达ISP1,此时,(因ISP1与Fonnet之间的链路故障)而遵循默认路由原路返回ISP2。这样,流量就会在ISP1和ISP2之间来回打转。为了防止这样的路由环路,需要在ISP1的路由器上安装一条聚合路由192.168.0.0/13的空条目(null entry)。这条null路由条目会令路由器丢弃所有目的地址匹配聚合路由的数据包,避免因目的网络不可达转而去匹配非明细路由

一旦使用不当,路由聚合会导致路由环路或路由黑洞(black holes)。当流量抵达并停留于非既定目的地,且无法被继续转发时,就会产生路由黑洞。随着读者学习了多种地址分配方案,并了解了这些方案如何与路由聚合交互之后,这样或那样的路由选择难题才会愈发突出。

单宿主场景——地址取自提供商地址空间之外

一个网络能否聚合路由,如何聚合路由?前面讨论了选路原则,再结合网络地址空间性质以及网络的连接方式(单宿主或多宿主连接),答案已经依稀可见了。以下几节会讨论几种具体场景。

在这一单宿主场景中,客户连接到单个提供商,且IP地址与提供商完全不同。当客户更换了提供商并保留了先前提供商的IP地址时,就会发生这样的情况。在这种情况下,提供商通常会鼓励或迫使客户启用新的网络地址空间。若客户拒绝重新编址,新提供商则无法聚合客户的IP地址。此外,原提供商也无法像以前那样进行有效的地址聚合,因为自己的地址空间被“钻了个洞”。客户使用原提供商地址空间的后果是,需要在全球Internet路由表中安装更多的路由。

以后的章节中会对本场景做深入讨论,但目前,网络管理员一定要有这样的认识:只要是以单宿主方式连接到提供商,路由选择方案越简单越好。在单宿主的情况下,设置一条指向提供商的默认路由,再让提供商回指一条静态路由(目的网络为本方地址空间),往往是手边最省事的办法。只有在拥有了到提供商的多条连接,出现链路冗余问题时,才应该考虑更加复杂的解决方案。

KISS(Keep It Simple,Stupid[尽量简单])原则是每个网络架构师、设计师、工程师以及管理员都应该奉行的原则,最简单的解决方案通常也是最佳解决方案。

多宿主场景——地址取自某一提供商地址空间

在本场景中(如图3-14所描绘的情形),客户连接多个提供商。客户的网络规模不大,只需从其中一个提供商获取IP地址,或客户仍在使用单宿主连接时所配置的IP地址。请仔细观察图中那2个ISP(ISP1和ISP2))及它们各自的客户:Onenet、Twonet、Stubnet。表3-6列出了与每个网域(包括提供商)相对应的聚合路由的IP地址范围。

表3-6 客户和相应提供商的IP地址分配列表

网域

地址范围

聚合路由

提供商

IP地址的提供者

ISP1

198.24.0~198.31.255.255

198.24.0.0/13

 

 

Onenet

198.24.0.0~198.24.15.0

198.24.0.0/20

ISP1, ISP2

ISP1

Stubnet

198.24.16.0~198.24.23.0

198.24.16.0/21

ISP1

ISP1

Twonet

198.24.56.0~198.24.63.0

198.24.56.0/21

ISP1, ISP2

ISP1

ISP2

198.32.0.0~198.39.255.255

198.32.0.0/13

 

 

请注意,Onenet和Twonet的地址都取自ISP1的地址范围,又以多宿主的方式连接ISP1和ISP2(如图3-14所示)。

图3-14 通告错误的聚合路由导致了路由黑洞

通告聚合路由可不能有丝毫大意。客户和ISP都必须关注聚合路由所覆盖的IP地址范围。除非路由的聚合方通告的网络是被聚合方网络的超网,或双方达成了协定,否则任何一方都不得聚合他方路由。接下来,读者会看见由于聚合了Onenet和Twonet的路由,ISP2是如何导致路由黑洞的。

提示:


路由黑洞是错误地聚合了他人路由而导致的。

如图3-14所示,只要ISP2通告一条汇聚了Onenet和Twonet网络的路由更新(198.24.0.0/18),就会形成路由黑洞。例如,对于作为ISP1客户的Stubnet而言,其IP地址空间被包括在了这条聚合路由198.24.0.0/18中。假如ISP2通告了这条聚合路由,发往Stubnet的流量便会遵循最长匹配原则而选用聚合路由198.24.0.0/1,并最终流入ISP2,形成路由黑洞。正因如此,ISP2必须明确通告其每个下游客户网络的地址范围,这些网络并不属于ISP2自身的地址空间,却是ISP1地址空间的子集(在本例中,ISP1和ISP2都要明确通告Onenet的网络198.24.0.0/20,以及Twonet的网络198.24.56.0/21)。除此以外,ISP2还必须通告其自身的地址空间198.32.0.0/13。

图3-15所示为正确通告聚合路由的方式。现在,ISP2已显式通告了Onenet和Twonet的聚合路由。这样,发往Stubnet的流量就绝不会误入ISP2了。

图3-15 正确通告聚合路由,防止路由黑洞

请注意,图3-15中ISP1也显式通告了Onenet和Twonet的聚合路由。假如ISP1只通告非明细聚合路由198.24.0.0/13,那么发往Onenet和Twonet的所有流量会遵循最长匹配原则,而优选更为精确的聚合路由(198.24.0.0/20和198.24.56.0/21),这样的流量也就只能由ISP2来单独承载了。

多宿主场景——地址取自不同提供商地址空间

对大型网域而言,很有可能会根据地理位置,从不同的提供商获取地址。以图3-16为例,Largenet分别从ISP1和ISP2获取地址。对于这一设计,每个提供商都可以聚合自己的地址空间,不必列出另一提供商地址的精确范围。ISP1会通告聚合路由198.24.0.0/13,ISP2会通告聚合路由198.32.0.0/13。以上两者都是分配给Largenet IP地址块的超网。

图3-16 地址取自不同提供商的多宿主环境

图3-16所示设计的主要缺点是,无法维护通往多宿主网域的备用路由。ISP2只通告属于自己的地址块,不会通告Largenet取自ISP1的地址块。只要ISP1出现问题,聚合路由198.24.0.0/13丢失,发往Largenet 198.24.0.0/20的流量就会受到影响,原因是ISP2没有通告198.24.0.0/20。这一推理同样适用于Largenet取自ISP2的地址198.32.0.0/20。如果通往ISP2的链路中断,发往198.32.0.0/20的流量必然会受到影响。想弥补这一缺憾,ISP1和ISP2必须分别通告198.32.0.0/20和198.24.0.0/20。

多宿主场景——地址不从提供商地址获取

在如图3-17所示的场景中,客户采用了与提供商ISP1和ISP2完全不同的地址范围。在此情形,ISP1和ISP2除了通告各自的地址范围(198.24.0.0/13和198.32.0.0/13)之外,还要通告精确的聚合路由(202.24.0.0/20)。这一设计的缺点是,Internet上的所有路由器都必须针对新引入的地址范围设置明细路由。如果这样的设计出现的太多,全球Internet路由表的规模也就可想而知了。

图3-17 地址取自ISP地址空间之外

路由聚合的建议

总而言之,每个获取了地址范围的网域都有独有的权利(和义务)来聚合自己的地址。执行路由聚合时,网域应该在精确的基础上尽可能地聚合自己的路由(即便在多宿主环境下也是可行的)。

场景不同,设计也就不同。对路由聚合而言,没有“万能钥匙”。建议单宿主客户从自己的直连提供商处获取单块连续的地址空间,并且尽可能地配置指向提供商的默认静态路由,从而避免由复杂而又多余的配置所带来的潜在问题。若单宿主客户执意更换提供商,就应该规划向新提供商地址空间迁移。对于多宿主客户,服务商在为其分配地址时,应以聚合尽量最大化作为指导原则。一旦聚合影响了冗余,即便要付出通告明细路由的代价,也应首先确保冗余。

在过去几年中,CIDR的引入对抑制全球Internet路由表规模的迅猛增长帮助极大。边界网关协议版本4(BGP-4)成为Internet上域间路由的首选协议,这很大程度上要归功于其在应对路由聚合和域间路由传播上的高效表现。继续阅读本书,更多示例会揭示CIDR在控制流量行为和稳定性方面的重要作用。

关于CIDR、Internet路由表规模的当前和历史情况,以及其他趣闻的更多信息请参考附录A。

要想放慢IP地址的分配速度,就要识别不同的连通性需求,并据此分配IP地址,这是重中之重。

绝大多数组织的连通性需求不外乎以下两种。

公网连通性

公网连通性是指组织内部的主机能够同时访问Internet和internal(内联网)主机。在此情形,主机就必须配置对组织内外都具有全局唯一性的IP地址。要求公网连通性的组织必须向其提供商申请IP地址。

私网连通性

私网连通性是指组织内部的主机只需访问internal主机,无需访问Internet主机。只需私网连通性的主机示例包括银行ATM机、零售店收银机以及任何其他无需连接公司之外主机的机器。私网主机的IP地址需在组织内唯一。为满足这种连通性需求,IANA专门预留了以下三块IP地址空间,并将其称为“私有互联网地址(private internets)”。

与上述地址用途以及其他预留网络号有关的其他信息,可参阅RFC 1918。

任何企业都可以从上述地址范围中挑选地址,无需获得IANA或Internet注册机构的准许。配置了私有地址的主机可以与组织内的任何其他主机通信,但是如果没有网关代理设备的“帮助”,这样的主机就无法访问组织之外的网络。原因是,从内向外发送的数据包所携带的源IP地址对组织以外的网络来说不具备唯一性,因此外部世界的网络无法将回程流量送回内部网络。因为公司只要构建私有网络,大都会启用相同的私网IP地址,故而可以减少对全球唯一的公网IP地址的需求。

配置了私网地址的主机可以和配置了公网地址的主机共存。图3-18显示了这样一个环境。

图3-18 私网连通的一般环境

公司可以选择为绝大多数主机配置私有地址,并仍然为某些特定网段上的主机配置公网地址。配置了公网地址的主机可以照常访问Internet。对于那些使用私有地址但仍要访问Internet的公司来说,他们有义务去执行路由过滤,以阻止将私有地址泄露到Internet。无论如何,服务提供商都应该对来自客户的入站路由施以策略——只接受来自公网地址空间的路由。

上述做法的缺点是,如果有一天公司决定让所有主机访问Internet,那么就必须对网络重新编址——使用新的公网地址替代私网地址。随着引入像DHCP(动态主机配置协议)这样的新型协议,这项任务也变得颇为简单。DHCP提供了一种向使用TCP/IP协议簇的主机传输配置参数的机制(包括IP地址)。只要支持DHCP,主机就能够从中央服务器动态获取新IP地址。

另一种方案是:安装一台堡垒(bastion)主机,在公网和私网之间担当网关。如图3-19所示,主机A配置了私网地址。若主机A想要对公司外部网络执行Telnet操作,该主机可以首先登陆主机B,然后再从主机B上执行对外的Telnet操作。现在,发往公司外部世界的Telnet数据包的源地址是主机B的IP地址,这个地址是全球唯一的公网地址。第三种方案是启用网络地址转换器。

图3-19 配置了私有地址的主机访问Internet资源

网络地址转换

借助于网络地址转换技术(NAT),公司就可以从私有地址空间过渡到公网地址空间。NAT技术能够在IP地址无须重新编址的情况下让私有网络连接到Internet。当内部主机需要与Internet上的目的网络通信时,可在网域边界放置NAT路由器,该路由器会将私网地址和公网地址相互转换。

如图3-20所示,主机A和B分别配置了私网地址10.1.1.1和10.1.1.2。

图3-20 网络地址转换示例

若主机A和B想要访问公司以外的网络,NAT设备会根据自身NAT表中预定义(或动态)的映射来转换数据包的源IP地址。由主机A所发的数据包抵达外部目的网络时,数据包的源地址已被替换为128.213.x.y。外部主机对数据包中地址的转换一无所知,并以128.213.x.y这一公网地址为目的地来发送回程流量。NAT设备会将外部主机所发回程数据包的目的地址(128.213.x.y)再转换回内部主机的私网地址。

对NAT设备的深入讨论超出了本书的范围,这主要是因为NAT设备处理的情况许多属于极端情况(corner case),或是非常复杂。胡乱使用公网地址作为私网地址的企业就是其中一例。在这种情况下,地址注册机构可能已将该公司所滥用的公网地址分配给了其他公司。分配给公司的公网地址数量少于内部主机实际数量是另外一例。在这种情况下,就必须使用NAT将私网地址映射为一小块公网地址。

并不总是需要部署专用设备来行使NAT功能,网络中的路由器软件一般都支持NAT功能。Cisco公司早已将NAT功能集成进了Cisco互联网络操作系统(IOS)。

IP版本6(Ipv6)亦称为下一代IP(Ipng),是对现有Ipv4实现的重大改进。

IPng提案于1992年7月在波士顿举行的IETF(Internet工程任务组)会议上发布,随后成立了若干专门的工作小组。IPv6旨在解决诸多问题,主要包括IP地址耗尽、服务质量能力、节点自动配置以及认证和安全性能等。

IPv6尚处于实验阶段。对于那些在IPv4架构中投入颇多的公司和管理员来说,迁移到一个崭新的架构绝非易事。针对IPv6刻意去攻克的所有主要问题,只要IPv4的实现还能不断地提供工具和技术(尽管看似笨拙)加以应付,对许多公司来说,采用IPv6的愿望就不会那么强烈。何时会迁移到IPv6还尚未可知。本书只是略微提及IPv6编址方案的部分内容,并与IPv4进行比较。

相较于IPv4的32位,IPv6的长度为128位。这应该能够提供充足的地址空间,以应对Internet的地址耗尽和扩展性问题。128位的地址转换为2的128次方,地址数量可谓是无穷无尽。

IPv6地址类型由一个名为格式前缀(Format Prefix(FP))的可变长度字段来表示,该字段起始于地址的最左边一位(见图3-21)。

图3-21 IPv6前缀和地址格式

表3-7罗列了最初对IPv6前缀的分配方案。IPv6定义了多种地址类型。这里只讨论基于提供商的单播地址,以及用于公司的与IPv4一起使用的本地地址。

表3-7 IPv6前缀的分配

描述

前缀格式

预留

0000 0000

未分配

0000 0001

为NSAP预留

0000 001

为IPX预留

0000 010

未分配

0000 011

未分配

0000 1

未分配

0001

未分配

001

基于运营商的单播地址

010

未分配

011

为地理单播地址预留

100

未分配

101

未分配

110

未分配

1110

未分配

1111 0

未分配

1111 10

未分配

1111 110

未分配

1111 1110 0

本地链路地址

1111 1110 10

本地站点地址

1111 1110 11

多播地址

1111 1111

基于提供商的单播地址

基于提供商的单播地址与IPv4公网地址类似。其格式如图3-22所示

图3-22 IPv6:基于提供商的单播地址格式

对基于提供商的单播地址各字段的描述如下所示。

IPv6公网地址融入了IPv4编址方案的CIDR功能。IPv6地址按照分层体系结构定义,如图3-23所示,每个实体都从上一层实体获取自己的地址块。

图3-23 IPv6地址分配层级

本地使用的地址

本地使用的地址与在RFC 1918中定义的IPv4私有地址类似,分为以下两种类型。

图3-24描述了上述两种本地使用地址的格式。

图3-24 本地使用地址的格式

本地使用的地址只具有本地意义。这也就是说,本地链路地址只作用于特定的网段,本地站点地址只作用于特定的站点。

没有连接到Internet的公司可以轻易分配属于自己的地址,而无需从公网地址空间中申请前缀。若该公司稍后决定连接到全球Internet,那么该公司在获取了注册机构ID、提供商ID、用户ID之后,再加上自己早已分配好的本地地址,就可以访问Internet了。较之于IPv4编址方案中以公网地址替换所有私网地址,或者使用NAT表来完成地址转换,这是一个重大改进。

IP地址和编址问题是域间路由的基本要素。IP编址定义了相关信息的位置,但是没有给出如何访问这些信息。因此,主机之间需要机制来交换与目的地址有关信息、计算最优路径以抵达给定的目的地址。当然,这样的机制就是路由选择。

本章总结了深入学习Internet路由技术之前应具备的所有基本概念。下一章会介绍域间路由的基础知识,这些内容都构建与于本章论及的编址、全球网络以及网域的概念之上。在第5章以及后面的内容中,会对路由协议做全面深入的介绍,尤其是BGP及其实施细节。

问:VLSM与子网划分有何不同?

答:没有什么不同。VLSM是对基本子网划分的扩展,通过利用不同长度的子网掩码对相同的A、B、C类地址进行子网划分。

问:为什么需要VLSM?

答:分配IP地址时,VLSM更为高效。在IP地址数量有限的情况下,VLSM为分配足量的主机和子网提供了更多的灵活性。

问:CIDR和超网之间有何不同?

答:无类别域间路由是一种机制,可以让网络通告超网路由,以及有类网络号正常范围之外的子网路由。超网只是种表示方式,允许前缀的掩码位数短于其原配掩码,超网就是这样创建的。

问:是有类模型导致了全球路由表规模的增长吗?

答:不。路由表规模的增长是由于连接到Internet的组织越来越多。有类模型只是未能提供可扩展的解决方案来应对这一局面。

问:在使用像RIP-1和IGRP那样的老式路由协议的网络中,在决定是否要升级到支持VLSM和CIDR的新路由协议前,应该考虑什么问题?

答:只要认为实施VLSM和CIDR能有助于对地址空间的有效利用,并能够带来优良的路由聚合能力,就应该进行升级。可能需要考虑的一个问题是,新协议可能需要硬件具备额外的内存和处理能力,而当前的硬件是否能够支撑新协议的运行呢?当然,这要取决于所要升级的具体协议。对于新老路由协议的共存问题也需要认证考虑。因为网络升级往往都是分阶段实施的,所以将会面对新老两种协议并行的情况。而老式的有类路由协议不能处理VLSM或CIDR,因此,在网络升级(割接)期间,为了保障网域内的连通性,可能需要大量配置静态路由。

问:可以聚合本方路由表中的任何路由吗?

答:只能聚合自己管辖的路由。聚合不属于本方网域的路由会导致路由黑洞。

问:如果换掉了提供商,还能保留原来的IP地址吗?

答:为了让路由聚合更为合理,推荐的做法(有时是必须这么做)是:把旧IP地址归还给原来的提供商,从新提供商那里重新获取地址。要问清楚提供商的路由策略。

问:公司内有些主机需要访问Internet,有些主机不需要。可以只为某些主机配置私网地址吗?

答:是。可以在同一网络中同时使用公网和私网地址。但是,在向提供商通告路由时,只能通告合法的公网地址。

问:公司需要接入Internet,但公司主机并非全部配置了公网地址。若该公司不愿重新编址,应该怎么办呢?

答:可以使用网络地址转换(NAT)将非法地址映射为提供商分配的合法地址池地址。

1.RFC 791,“Internet Protocol(IP),”http://www.isi.edu/in-notes/rfc791.txt

2.RFC 917,“Internet Subnets,”http://www.isi.edu/in-notes/rfc917.txt

3.RFC 1878,“Variable Length Subnet Table for IPv4,”
http://www.isi.edu/innotes/rfc1878.txt

4.RFC 1519,“Classless Inter-Domain Routing(CIDR),”
http://www.isi.edu/innotes/rfc1519.txt

5.RFC 1918,“Address Allocation for Private Internets,”
http://www.isi.edu/innotes/rfc1918.txt

6.RFC 1541,“Dynamic Host Configuration Protocol,”
http://www.isi.edu/innotes/rfc1541.txt

7.RFC 1631,“The IP Network Address Translator,”
http://www.isi.edu/innotes/rfc1631.txt

8.RFC 1884,“IP Version 6 Addressing Architecture,”
http://www.isi.edu/innotes/rfc1884.txt

 对于新版本的IOS,这条命令是默认开启的。——译者注

 本例中的默认路由0/0。——译者注

 这种地址类型如今已不复存在,此类地址如今已更名为Global unicast(全球单播)地址,以“001”打头,记为2000::/3。——译者注

 但该地址块目前已被重新预留,当然,这遭到了多方反对。——译者注


本章包括如下主题。

要实施高吞吐量的Internet连接,冗余、对称和负载均衡是每个网络工程师必须面对的关键问题。Internet服务提供商(ISP)和其客户都需要对流量进出各自AS的过程充分加以控制。

要实现冗余,通常的做法是以多条电路接入一个或多个AS,进而得到多条传递流量的备用路径。对称是指从某个出口点流出AS的流量,(其反馈流量)还能从同点返回。负载均衡是指在多条链路上合理分担流量的能力。要想将三者合而为一,以实现最为理想的路由选择解决方案,难度之大可想而知。

不可能事事都政由己出。在Internet上,对于穿越任何AS流量的操纵和控制掌握在多家提供商手中。沿途的任何提供商都能引导流量。多个实体间的协作才是均衡流量之道。

如何将冗余、对称和负载均衡发挥到极致,这对每个网络来说都是永恒的设计问题。然而,具体的解决方案则取决于每一特定网络的配置和需求。本章会在具体的网络配置背景下探讨此类共性设计问题。虽然读者不能照搬配置示例,但配置示例中所展现的共性问题和实施方法,仍然可以作为读者分析和设计路由选择需求时的参考模型。

在深入研究具体的网络场景之前,读者首先需要建立起某些关于冗余的基本概念,并熟悉相关定义。

尽管无论哪家公司或提供商都不愿意自己的网络中断,不过网络连通性问题总是会因这样或那样的原因纷至沓来。连通性问题取决于诸多因素。一条接入Internet的链路会涉及路由器、CSU/DSU、电源、电缆连接、物理接入线路以及众多运维人员——每个因素对链路的影响都各不相同。任何时候,人为失误、软硬件故障或自然灾害(比如恶劣的天气或电力中断)都有可能会导致网络中断。

正因如此,对网络来说,冗余是不可或缺的。然而,最为关键的是必须在冗余和对称之间找到平衡。在网络设计方面,冗余和对称似乎是天生的冤家:网络的冗余程度越高,流量的进出点就越不可预测。若某客户有多条连接——一条接入San Francisco POP(呈现点),另一条接入New York POP——从San Francisco“出发”的流量,(其反馈流量)很可能会从New York“回家”。要是再新增一条到Dallas POP的链路,肯定会让网络连通性更为可靠,但也同样给流量对称制造了更多的麻烦。因此,网络管理员在实施路由策略时必须权衡取舍。

除了可靠性因素之外,地理方面的压力也迫使公司必须实现网络冗余。许多现代化的公司都是那种国际性、全国性或跨国性的大公司。这些公司的自治系统是跨越多个不同物理位置的逻辑实体。对于一个拥有跨越多个地点AS的公司来说,既可以从单提供商购买服务,也可以从位于不同区域的不同提供商购买服务。如图7-1所示,AS1位于San Francisco的办事处连接到ISP1的San Francisco POP,New York办事处连接到ISP2的New York POP。在这种情况下,访问Internet的流量可以就近选择POP,采用较短路径抵达目的地。

图7-1 地理位置不同的多宿主连接方案

对于一个网络来说,冗余指的是除了主用链路以外,还有一条“后路”也能传递进进出出的流量,这会转化成需要保存在路由表中的额外路由信息。为了避免额外的路由开销,默认路由正是给自己网络留“后路”的实用工具。主链路故障时,默认路由可以为我们的网络开启后路(备用路由)。下一节会定义默认路由的方方面面,并展示如何在最简单的路由场景中应用默认路由。

按默认路由转发流量是一项非常强大的技术,既能将路由器必须学习的路由条数降至最低,又能在发生故障或连通性中断时为网络提供冗余。Cisco把默认路径称为最后求助网关(gateway of last resort)。理解默认路由如何运作非常重要。默认路由配置得当,可以省心省力;可一旦配置有误,则会让网络工程师深陷泥潭。

根据定义,默认路由是IP转发表中的一条路由,一旦数据包目的网络无法与路由条目匹配,路由器就启用之。换言之,路由器在依仗IP转发表中的精确路由条目无法转发数据包时,默认路由就成了最后一根救命稻草。

动态学得的默认路由

众所周知,默认路由往往以网络/掩码组合0.0.0.0/0.0.0.0来表示(也可以0/0来表示)。默认路由可以在路由器之间以动态通告的方式来交换。任何系统只要通告这种路由,就是向其他系统表明:“我是你们的最后求助网关”。图7-2所示为默认路由的动态通告。

图7-2 默认路由的动态通告

动态默认路由(0/0)既能通过BGP也能通过IGP学得,这取决于网域间所运行的路由协议。出于冗余并尽量避免潜在故障的目的,应该从多个源接收默认路由。在BGP中,可为默认路由赋予本地优先值,以令主备用默认路由分别具有不同的优先级。若主用默认路由失效,备用默认路由会取而代之。

图7-2左例所示为单台路由器通过两条链路将AS1和AS2互连。若AS1只愿意从AS2接收最少量的路由,那么AS1可以只接受默认路由0/0。在本例中,AS1从两条链路学得0/0,并为从主用链路学到的0/0路由设置了本地优先值100,为备用链路学得的0/0路由设置了本地优先值50。正常情况下,这台路由器的最后求助网关一定会被设置为1.1.1.1。

在多路由器的场景中(如图7-2右例所示),只要AS1内运行了IBGP,上述行为也同样适用——利用在IBGP路由器间交换的本地优先值,来确定主备用链路。

提示:


请参见第12章的“动态学得的默认路由”一节。

静态设置的默认路由

为了避免不可预料的流量转发行为,许多网络管理员都会选择对动态学得的默认路由进行过滤。因此,对AS来说,可以静态设置属于自己的默认路由0/0。通过静态的方式设置默认路由可以更好地控制路由选择的行为,原因是管理员可以亲手定义自己的最后求助网关,而不是任由外部实体强行设定。

提示:


请参见第12章的“静态设置的默认路由”一节。

管理员可以设置静态默认路由令其指向:

图7-3所示为前两种情况。左图所示为路由器将自己的默认路由0/0指向IP地址1.1.1.1,右图所示为路由器将自己的默认路由0/0指向以太网接口。对于后一种情况,路由器还需额外的操作,以推断出应将流量转发给以太网段上的具体设备(下一跳路由器)。这样的操作往往是:路由器以发送ARP(地址解析协议)数据包的方式,来确定下一跳路由器的物理地址。

图7-3 静态设置的默认路由

一个系统还可以根据从另一个系统学到的网络号来设置自己的默认路由。图7-4所示为AS1从AS2动态学到路由192.213.0.0/16。若AS1将自己的默认路由指向192.213.0.0/16,那么网络192.213.0.0/16便会自动成为AS1的最后求助网关。该方法利用递归路由查找去发现下一跳网关的IP地址。在本例中,经过递归路由查找,AS1确定网络(路由)192.213.0.0/16学自下一跳1.1.1.1,流量也会被相应地转发到下一跳网关1.1.1.1。

图7-4 设置指向网络号的默认路由

如果默认路由所指向的网络消失,默认路由也会自动消失,这一点十分重要。对于Cisco的实现来说,静态定义的默认路由存在的依据是,其所指向的路由条目必须存在。例如,若默认路由指向了某个网络号,但该网络已不可访问(与该网络相关的路由在路由表中消失),那么这条默认路由也会从IP路由表中消失。这一行为在配置了多条默认路由的情况下必不可少——可让一条默认路由作为主用,另一条作为备用,主用路由一旦失效,备用路由取而代之。

选择“默认路由所指向的网络”时,应尽量选择靠近Internet的上游网络(离本AS越远越好),因为这样的网络能够反映出:本AS到NAP或其他提供商之间互连的整条链路(而非局部)的状况。若为本方提供服务的AS只有单条链路通往NAP,这一点就非常重要。如图7-4所示,AS1在设置默认路由时,可以选择将其指向前缀128.213.11.0/24或超网192.213.0.0/16。将默认路由指向128.213.11.0/24,只能令默认路由本身依赖于部分环节(从AS1到AS2),而非直到NAP的所有环节(从AS1直到AS3)的稳定性。若AS2和AS3之间的链路故障,AS1仍然会向AS2发送流量,而不会遵循备用默认路由将流量发送给其他提供商(假定AS1还连接到了其他提供商)。更为合理的选择是,将默认路由指向超网192.213.0.0/16,原因是这一超网的存在能够更全面反映出从本AS到NAP的整条链路,而不再对任何中间环节有所依赖。

选择“默认路由所指向的网络” 时,应尽量避免选择精确的子网。子网的翻动可能会造成本方路由表中的默认路由“时有时无”。最好将默认路由指向能够全面反映出提供商整体稳定性(而非特定链路稳定性)的主要聚合网络或超网。

可以同时配置多条静态默认路由。其中一个方法就是,设置多条静态默认路由,令它们分别指向多个不同的网络(出于稳定性的考虑,应尽量指向聚合网络),并利用BGP本地优先属性为学到的聚合网络设定不同的优先级。这种做法适用于单台路由器通过多条链路连接提供商,或AS内多台边界路由器运行IBGP的场景。图7-5所示为这两种场景。以上两种场景也与图7-4所示的场景类似,唯一的差别就在于,客户(AS1)是手动设置自己的默认路由,而不依赖于提供商通告默认路由0/0。在本例中,客户(AS1)会为从上下两条链路学到的路由128.213.0.0/16分别设置本地优先值100和50。这样的话,上下两条链路分别为主备用链路,若主用链路故障,下面那条链路会取而代之。

图7-5 指向多个网络的静态默认路由

设置静态默认路由的另一种方法需要使用Cisco距离参数(如第6章中的表6-1所述)来建立优先级。由于路由器之间不会交换距离参数,因此这种方法只适用于单台路由器通过多链路连接提供商的场景。

若为两条静态默认路由分别赋予不同的距离值,路由器会优选距离值较低的那条路由。若距离值较低的那条路由失效,路由器会选择使用另外一条默认路由。若为两条静态默认路由配置了相同的距离值,根据由网络设备的底层交换模型所提供的机制,流量会在两条默认路径上负载均衡。

图7-6所示为设置多条静态路由时,距离参数的运用。AS1通过2条链路接入AS2,并自行手动设置指向AS2的默认静态路由。AS1通过将两条静态默认路由的距离值分别设置为50和60,从而分别选定了主备用链路。如果主用链路发生故障,流量会切换到备用链路。

图7-6 指向多条连接的静态默认路由

读者需要理解:如果一条路由与路由器接口相关联,在接口故障之后,这条路由也一定会失效。例如,默认情况下,用来封装接口的Cisco HDLC协议会在链路上交换KEEPALIVE消息。在指定时间间隔内,如果没有收到KEEPALIVE消息,接口的线协议会down。路由器也会删除相应的路由条目。话又说回来,对于像帧中继或ATM这样的虚电路,路由器之间并不交换KEEPALIVE消息。这也就是说,如果虚电路故障,接口仍会处于激活状态,相关的路由条目也就不会失效。

对称是指从给定出口点发送出去的流量,其反馈流量还能从相同点返回。如果AS只有一个流量出入口,那么流量对称是自然而然的事。然而,在需要冗余并存在多条路径的情况下,流量总是趋于不对称。流量一旦不对称,无论是提供商还是客户都会发现无法对进出AS的流量做有效控制。从东海岸离开AS的流量,其反馈流量最终可能会在“饱览沿途美景”后从西海岸返回,回程流量在抵达流量的发送者之前,还会“招摇过市”,穿越AS内的多台路由器。这往往就是由第6章所述的最近出口点路由所导致。

其实,流量不对称并不像听起来那么糟。在某些情况下,视乎所运行的应用程序以及整体的物理网络拓扑(针对链路的速度及站点间的跳数),流量不对称也是能够接受的。一般而言,客户和提供商都希望离开AS的流量,其反馈流量能够从靠近出口点的地方或从原点返回,以期尽量降低不测情况下所引发的潜在延迟。再说,客户也会让流量在本地网络内传递的距离尽可能长,以避免在对等网络中发生的延迟和拥塞。

为了实现流量对称,就应该明确一条主用链路,并尽力让大部分流量在该链路上传输。尽管本书会介绍几种通过定义策略来实现流量对称的方法,但在实战中,不对称的流量还是屡见不鲜,而这通常也不会造成重大问题,理解这一点对读者来说非常重要。

负载均衡是指让多条链路共同承担数据流量的能力。一个关于负载均衡的常见误解是,将其等同于负载的平均分配。即便承载流量的网络是由单个实体管理,平均分配负载也难得一见。在绝大多数场景中,流量在沿途还要多次转手,流量的平均分配就愈发难上加难了。负载均衡意在高效利用为实现冗余所布设的多条链路,达成流量分布模式。要想达成这一模式,就必须弄清所需负载均衡的流量,对流入和流出的流量都需加以关注。

切勿孤立地看待流量。应该把流量一分为二来看待——入站流量和出站流量(inbound and outbound)。对自治系统来说,入站流量是接收自其他AS的流量;出站流量是要发送给其他AS的流量。

假定读者连接到了两个ISP,并且与ISP1相连的链路流量过载。读者应首先在脑海中闪现:是什么样的流量过载,出站流量还是入站流量?是从AS1接收的流量,还是发往AS1的流量?

流量的出入站模式与本AS通告自身路由,以及从其他AS学习路由的方式息息相关。AS向外通告本方网络的方式会影响入站流量,接收外部AS路由更新的方式则影响出站流量。流量和路由之间的关系,是本书后续内容的基础,请读者务必完全理解。从现在起,只要本书提到采取措施以影响入站流量,这实际指对出站路由通告施以BGP策略,因为本方通告的路由会影响其他AS如何向本方“路由”入站流量。同理,只要提到采取措施以影响出站流量,这实际上是指对入站路由通告施以BGP策略,因为本方如何“路由”出站流量受所学路由的影响。图7-7所示为出入站流量的运作方式。

图7-7 

正如读者所见,将出站流量送达NetA时所采用的路径,取决于本方从哪条链路学到NetA这条路由。由于从NY和SF都可以收到路由NetA,本方的边界路由器在转发目的地址为NetA的出站流量时,可以选择NY或SF链路。

反过来,目的地址为本地网络NetB和NetC的入站流量所采用的路径,则取决于本方如何通告这两个网络的路由。如果只在NY链路上通告网络NetC,目的地址为NetC的入站流量就会采用NY链路。同理,如果只在SF链路上通告网络NetB,目的地址为NetB的入站流量就会采用SF链路。尽管,这一方案看似对流入AS的流量起到了优化作用,但在通告这两个网络时并未考虑冗余。

截至目前,读者应当对总体现状有所认识:冗余、对称以及负载均衡这三个设计指标间既相互关联,又暗伏冲突。如何才能在多条链路分担流量的同时,仍然能够实现流量同点进出AS的要求呢?当多条链路分别终结于自治系统内的多台路由器时,上述要求则更难达到。第6章所述的路由属性是一种工具,只要运用得当就能实现人们梦寐以求的冗余、对称以及负载均衡。为了达到预期的设计目标,选择并配置相应的属性和路由过滤是网络管理员的职责所在。

本节呈现了几种具体场景及相关配置,以期实现冗余、对称、负载均衡三者间的完善、统一。本节所列举的场景以及相应的设计解决方案可能有点儿以偏概全。然而,由这些场景及解决方案所揭示出的原理可以应用与其他场景,并且有助于读者理解和实现更理想,更高效的设计。

在呈现场景时,我们遵循的是由易到难这一原则。请注意,在许多情况下,客户和提供商只是相对而言,这是因为提供商也可以是另外一个提供商的客户。两者之间的主要区别就在于:客户只有连接到提供商才能具备Internet连通性,而客户自己不为其他客户提供Internet连接。提供商则提供Internet连接服务,但自己也可以是其他提供商的客户。

取决于客户是否需要从提供商接收最少量(或不接收)路由、部分路由、完整路由或以上情况间的排列组合,我们对以下几节中的场景做了进一步划分。对于客户接收最少量或不接收路由(亦称为默认路由)的情况,读者可以假设客户仍会学习0/0路由,或几条让客户自己去设置静态默认路由的聚合路由。部分路由一般包括提供商的本地路由以及隶属于提供商的客户的路由。完整路由则是指现有的所有Internet路由——2000年初这一数字约为75000条。在客户需要从同一提供商接受默认路由和部分路由,或从一个提供商接受部分路由而从另一个提供商接收完整路由等情况下,就需要对以上几种场景加以组合。

单宿主客户的站点通过单链路接入提供商,以访问Internet,如图7-8所示。

图7-8 简单的单宿主站点示例

这样的客户往往通过配置一条指向提供商的默认路由,就能充分享受Internet服务了。此外,提供商也要安装一条指向客户的静态路由以访问客户。这种方法既廉价又高效。从技术上讲,提供商和客户都无需运行BGP。因此,客户路由器不必学习任何Internet路由。这显著降低了设备的内存消耗和处理负担。在这种情况下,路由对称也不成问题,因为流量只能从单点进出。

单宿主站点通常只能依赖于接入Internet的单条连接。客户也没有申请备份链路。如果链路发生故障,在恢复之前,客户只能忍耐。显而易见,这种连接方式无法满足关键性应用的数据通信需求。无备用链路的单宿主站点不适于承载要求高级别可靠性的应用。还需关注的是,在这种情况下,采用标准的静态+默认路由的配置能够更进一步得简化复杂性。

多宿主连接到单提供商是指客户从同一提供商申请了多条接入Internet的链路。对于这种情况,本节假定使用BGP作为路由协议。当然,并非所有情况都需要使用BGP,但BGP所带来的灵活性是无与伦比的。此外,对于这样的场景(多宿主连接到单提供商),客户很有可能使用的是私有AS号,因为也没有必要去申请正式AS号。如第6章所建议的,参考RFC 2270可以获得更多有关私有AS号的信息。

我们会在后续各节讨论以下主题。

只设定默认路由加主备链路

在本场景中,客户配置指向提供商的默认路由,不接受部分或完整路由。客户可以针对两条链路分别配置默认路由。如图7-9所示,客户将其中的一条链路作为传输流量的主用链路,如果主用链路失效,另一条作为备用链路取而代之。如果为客户提供接入的提供商多于两个,客户也可以设置分别具有不同优先级的多条默认路由。

图7-9 基本的多宿主连接单提供商场景

提示:


请参见第12章的“只设定默认路由加主备链路”一节。

以下两节,我们会讨论对出入站的流量的控制。

客户的出站流量

在图7-9所示的场景中,客户使用单台路由器分别连接到提供商的多个机房,并设置了具有不同距离值的多条默认路由。主用路由的距离值较低。此外,客户要想设置默认路由,也可以从提供商处动态学习0/0默认路由,或少许聚合路由。客户可以利用本地优先值在默认路由间取舍。

如图7-9所示,假定从NY学到的默认路由优于从SF学到的默认路由。在正常情况下,客户会使用NY链路作为主用链路,将SF链路作为备用链路。

对于出站流量来说,负载均衡只能说是可望而不可及,原因是所有流量只会通过主线路发送,备用线路只是为了防止不时之需。

当然,客户路由器在内存使用量和处理器资源方面的节约,也足以弥补不能实现负载均衡的遗憾了。

客户的入站流量

客户可以通过BGP将自己的网络通告给提供商。提供商可以通过两条路径向客户发送流量。无论提供商选择哪条路径发送流量,都会对客户的入站流量产生影响。通常,提供商的正常行为(假定提供商收到路由的所有BGP属性全都相同)是:将流量从自己距离客户最近的出口点发送出去。如果发往客户的流量离NY链路较近,就会通过NY链路流入客户的AS。如果离SF链路较近,就会从SF链路流入。

以上所有因素都在客户的控制范围之外。想要“逆转”以上因素的影响,客户可以通过通告其路由的不同度量值,来控制入站流量从指定链路上流入。根据客户通告的度量值,提供商就能够引导发往客户的流量。如图7-9所示,客户在NY和SF链路上分别以度量值50和100来通告自己的路由。这样的话,提供商发往客户的流量会选择NY这条路由。

默认路由、主备链路外加部分路由

除了客户可以从提供商接收部分路由以外,本场景与“只设定默认路由加主备链路”场景相同。图7-10所示为这一网络环境。

图7-10 接收部分路由的多宿主/单提供商场景

由于提供商为客户提供了更多的路由信息,因此在选择流量的出口点方面,图7-10所示的方法可以给客户提供更大的灵活性。现在,我们开始讨论出入站流量的模式。

提示:


请参见第12章的“默认路由、主备链路外加部分路由”一节。

客户的出站流量

请考虑客户1通过两台单独的路由器连接到提供商的情况。客户可以根据自己从提供商处接收的部分路由中的每一条,来选择出站流量所采用的路径。一般情况下,客户会为收到的不同路由设置不同的本地优先值来完成上述需求。可以根据AS路径、前缀或同时基于两者来设置本地优先值。如果根据AS路径来设置,那么本地优先值会作用于某特定AS所含的所有前缀。在需要以前缀为基础来做出路由决策时,也可以根据前缀来设置本地优先值。如图7-10所示,根据某个AS的物理位置,或是与提供商AS相关的多条前缀,客户1可以选择使用SF链路来转发目的地址为客户2和客户3(C2和C3)的流量,使用NY链路来转发目的地址为C4和C5的流量。客户1可以使用以下方法来实现上述需求。

当BGP表中出现通往同一目的网络的多条路由(通过外部和内部BGP学得)时,客户1会选择NY链路发送目的网络为C4和C5的流量(路由C4和C5的本地优先值为300,大于SF链路的200)。同理,客户1会选择SF链路发送目的网络为C2和C3的流量(路由C2和C3的本地优先值为300,大于SF链路的250)。对于目的地址为C2、C3、C4和C5以外的流量,客户1会选择NY链路来发送(所有其他路由的本地优先值为250,大于SF链路的200)。

由客户1发出的目的地址未知的所有其他Internet流量,会以主备默认路由的方式,遵循默认路由来发送。默认路由0/0既可以通过两条链路从提供商处动态获悉,也可以静态配置指向提供商的某个网络(请见本章的“设置默认路由”一节)。可以使用本地优先值来确立主备用默认路由。根据为路由C2、C3、C4和C5设置本地优先级的方式,客户1会使用NY链路来发送匹配0/0路由的所有其他流量(所有其他路由的本地优先值为250,大于SF链路的200)。

还有一种与此截然不同的方法,则无需在客户站点做如此繁琐的配置,那就是提供商向客户通告路由的度量值。在第6章的“MULTI_EXIT_DISC属性”一节,我们对此进行了讨论。只要提供商通告路由的度量值能够反映出从其AS入口点到其他客户网络(例如C2、C3、C4、C5)的相对距离,客户1就能够相应地对自己的出站流量进行负载均衡。发往C4和C5的流量会“走”客户1的NY链路,发往C2和C3的流量会“走”客户1的SF链路。对于离开C1 AS的其他流量,则要根据C1从每条链路上所学路由的度量值来选择链路。对C1来说,尽管这种方法几乎不用配置,但因为C1的流量发送路线要完全依赖于提供商所通告度量值的精确度,故而具有不确定性。读者还能记得这种被称为最佳出口点(best-exit)的路由选择方案吧?最理想的效果可能需要以上两种方法相结合来获得。

客户的入站流量

在不同链路上通告不同的度量值,客户就能够影响入站流量。有些提供商鼓励客户在通告自己的BGP路由时,将IGP度量值作为BGP度量值一并通告。这样,提供商就可以使用离目的网络最近的链路向客户交付流量。如图7-10所示,客户已决定手动设置路由的度量值,以迫使以下流量行为生效。

当BGP表中出现通往同一目的网络的多条路由时,提供商会使用NY链路发送目的地址为W和Z的流量(路由W和Z的MED值为200,小于SF链路的300)。同理,提供商会使用SF链路发送目的地址为X和Y的流量(路由W和Z的MED值为250,小于SF链路的250)。对于目的地址为X、Y、W和Z以外的其他流量,提供商会使用NY链路发送(所有其他路由的为250,小于SF链路的300)。

RFC 1998定义了影响入站流量的另一种方法。尽管我们在这里不会对此方法再加以探讨,但仍然鼓励读者仔细研究这份RFC所推荐的方法。

默认路由、主备链路外加完整和部分路由

对于多宿主连接到单提供商的客户,可以从与提供商的所有连接链路上接受完整路由,或者也可以采用从一条链路上接受完整路由,从其他链路上接受部分或不接收路由(默认路由)。在上一节所讨论的技术在这里同样有效——利用本地优先来控制客户的出站流量,利用度量值(RFC 1998所推荐的方法)来控制入站流量。此外,如果客户和提供商之间能够交换内部路由的度量值,那么还能在一定程度上实现负载均衡。

警告:


处理出站流量时,操弄与某些精确路由相匹配的流量从特定出口流出,这种做法非常危险。若出站流量遵循IGP默认路由而指向客户BGP路由器,随之再遵循BGP默认路由,被引导至另一台BGP路由器,那么就很可能会发生路由环路。换言之,使用默认路由器时,路由进程域内的所有路由器必须“行为”一致,尤其是在故障发生期间。现在,读者可能会对这段描述一头雾水,但在学完下一章之后就会豁然开朗了。

自动负载均衡

前面所讨论的场景可能本就非常直观,但负载均衡的任务可算是比较抽象,因此需要仔细规划。对于由EBGP所学、源于同一AS且目的网络相同的多条路径,Cisco IOS软件支持单台路由器上的动态负载均衡。这也就降低了配置的难度。

注意:


与路由协议一样,负载均衡的实际效果也取决于路由器所启用的底层数据包交换模式。虽然对交换(switching)技术的深入讨论超出了本节的范围,但我们仍强烈建议读者掌握各种交换模式。

在图7-11所示的示例中,单台路由器(NY)通过两条链路接入其提供商,并同时从两条链路上接收相同的路由更新。

图7-11 从两个源接收相同路由的路由器

Cisco路由器会在本地IP路由表内保持最多6条通往相同目的网络的BGP路由。然而,在将EBGP路由更新通告给IBGP对等体时,路由器只会针对特定目的网络传递单条最佳路由。路由器会自动改变这条最佳路由的下一跳地址,在本例中就是NY路由器自身的IP地址,NY路由器在通告路由时并不会通过IBGP会话来传播路由的EBGP下一跳地址。请注意,只有配置了动态负载均衡的情况下,BGP路由器才会自动改变路由的下一跳。

默认情况下,(在转发流量时)Cisco路由器会针对每个目的地(主机IP地址)逐一执行负载均衡。这种逐个目的地负载均衡是以轮询(round-robin)方式来执行的。一条路径(接口)会“锁定”发往某台主机的流量,另一条路径(接口)会“锁定”发往第二台主机的流量,依此类推。

以图7-11为例,假定客户1获得了通往192.213.10.0/24的两条相同路由。要是不能自动进行负载均衡,BGP进程只会优选其中的一条路由,让路由器发送流量。修改BGP属性让多条路径承担流量是网络管理员的职责所在。

提示:


请参见第12章的“BGP多路径负载均衡”一节。

有了自动负载均衡,BGP便能维护两条目的网络为192.213.10.0/24的“路线(路由)”,一条走SF链路,另一条走NY链路。如果客户所发流量的目的地址为192.213.10.1~192.213.10.6,那么客户网络的出站流量会根据轮询的原则分解到这两条链路上。目的地址为10.1的流量会走SF链路,10.2的流量会走NY链路,10.3会走SF链路,10.4会走SF链路,依次类推。

注意:


如前所述,默认情况下,BGP只会在IP路由表中安装一条通往每个目的网络的最佳路由。可是,如果从同一邻居AS学到了多条路径,就可以使用BGP多径(Multipath)特性在IP路由表中安装多条路由。可以使用router配置命令maximum-paths,令路由器在路由表中安装多达6条通往单个目的网络的路径。第12章会描述与BGP多径有关的配置信息。

注意:


只有在同一台路由器上处理接收自同一提供商的相同路由时,这种方式的负载均衡才能生效。在从多提供商接收路由的环境中,这样的负载均衡就无能为力了。

共享多条路径的两台路由器间的负载均衡

如图7-12所示,在某些情况下,出于备份或提高带宽的目的,两台路由器间会共享多条物理链路。虽然对于出站流量,自动负载均衡使用起来得心应手,但对于本方的入站流量,则需求助于对路由度量值的操纵,以期影响提供商的出站流量。

图7-12 共享多条路径的两台路由器间的负载均衡

要在图7-12所示的环境中对流量做负载均衡,方案之一是实施动态负载均衡。这只不过是前述自动负载均衡场景的特例。然而,动态负载均衡会给路由器带来额外的开销。每台路由器都要从另一台路由器接收重复的路由更新消息。在通告完整路由的情况下,每条链路都要传播大约70000条路由更新消息。相反,在图7-12所示的场景中,利用静态路由来实现负载均衡是一种更可取的做法。

在正常运作时,BGP会为所学的每条前缀保留最优的下一跳。如表7-1所示,RTA收到两条通往NetX的相同路由。

表7-1 RTA的BGP表——RTA会将目的地址为NetX的流量向10.10.10.2转发

目的网络

下一跳

NetX

10.10.10.2(最优路由)

NetX

11.11.11.2

BGP会挑选最优路由,并将其安装进IP路由表。在本例中,BGP所选路由的下一跳为10.10.10.2。表7-2所示为RTA的IP路由表,通过链路1就能够将数据包转发给下一跳10.10.10.2。正如该配置所示,所有目的地址为从RTB所学网络(路由)的流量都会通过链路1来发送。因此,根本没有实现负载均衡。

表7-2 RTA的IP路由表——通过链路1来转发目的地址为NetX的流量

目的网络

下一跳

NetX

10.10.10.2

10.10.10.0/24

链路1

提示:


请参见第12章的“共享多条路径的两台路由器间的负载均衡”一节。

要想实现更为智能化的负载均衡,就要通过将一下跳设置为虚拟地址而非物理链路地址,并以此来“糊弄”BGP。然后,再通过将该虚拟IP地址(下一跳地址)映射为多个直连接口的IP地址,从而利用IP路由表去执行实际的负载均衡。如图7-13所示,RTB配置了一个loopback接口(虚拟接口),并为该接口分配了IP地址,RTA可以利用该地址去建立BGP邻居连接。以这种方式,可以将loopback接口IP地址和非物理链路接口IP地址用作为路由的下一跳。无论是IGP还是静态路由都可以不依赖于BGP,用来在链路间执行负载均衡。

图7-13 横跨多条链路的单条BGP会话

如表7-3所示,RTA会从邻居12.12.12.12接收路由更新,并会通过下一跳12.12.12.12转发目的地址为NetX的流量。

表7-3 RTA的BGP表——RTA会将目的地址为NetX的流量向12.12.12.12转发

目的网络

下一跳

NetX

12.12.12.12

表7-4所示为RTA的路由表。RTA可以通过链路1和链路2将数据包转发给下一跳12.12.12.12。要想将数据包发送到网络12.12.12.0/24(12.12.12.12),RTA既可以通过IGP,也可以在链路1和链路2上各指一条静态路由来实现。现在,这台路由器可以实现负载均衡了。在本场景中,由于要执行递归路由查找,负载均衡的实现是基于逐个网络而非逐个目的地址。现在,发往由RTB所通告网络的流量在多条链路上以轮询方式实现了负载均衡。

表7-4 RTA的路由表——RTA会通过链路1或链路2来转发目的地址为NetX的流量

目的网络

下一跳

NetX

12.12.12.12

12.12.12.0/24

链路1

12.12.12.0/24

链路2

连接到多个提供商的客户被视为以多宿主连接到不同提供商。冗余和地理方面的限制是这些客户多宿主连接到不同提供商的真正原因。在本场景中,我们会在个案基础上,反复讲解流量的出站行为。对于所有个案,流量的入站行为都是相同的,我们会在本节的末尾加以介绍。

在以下几节中,我们会介绍与多宿主连接到不同提供商有关的主题。

只设定默认路由加主备链路

对于本例,客户可以遵循默认路由将流量送达提供商。两条链路一主一备。有关情况如图7-14所示。

图7-14 多宿主连接到两个提供商

通过静态设置路由或者两个提供商对默认路由的动态通告,客户可以设置或学到通往两个提供商的默认路由。客户可以利用管理距离或本地优先值来优选其中的一条默认路由。设置默认路由的一个良方是,将默认路由指向从两个提供商接收的同一网络。客户可以根据从提供商处接收的网络来配置默认路由0/0,并利用本地优先值来优选其中的一条默认路由。若因连接某提供商的链路故障,主用默认路由失效,备用默认路由会取而代之。客户可以与提供商协商,并要求其仅通告一条明细路由,或客户可以在本方过滤除那条所需明细路由以外的所有路由更新。

如图7-4所示,该客户将默认路由指向自己从两家提供商接收的网络192.213.0.0/16。NY和SF链路分别为主备链路。为此,客户为从NY链路接收的路由192.213.0.0/16设置了最高本地优先值200。

默认路由、主备链路外加部分路由

一旦在上一节所讨论的网络环境中添加部分路由的接收,出站流量的行为势必会发生改变。图7-15所示为这一新网络环境。客户可以从一个或同时从两个提供商接收部分路由。此外,客户还必须接收或配置指向两个提供商的默认路由,并会优选其中的一条作为主用。

图7-15 多宿主连接到两个提供商并接收部分路由的客户

通过从提供商接收部分路由,在向自己的直连提供商转发流量时,客户可以无需知晓所有Internet路由而做出最佳路由决策(对于某些大型提供商来说,即便是部分路由,数量也十分可观)。如图7-15所示,BGP会做出正确的选择,客户自然会选择离目的网络最近的链路(最短的AS路径)转发相应的流量。对于其他所有Internet路由,主备链路(主备默认路由)这一基本原则仍然适用。客户可让默认路由指向接受自两家提供商的某个特定的网络,并利用本地优先来选择其中的一条链路作为主用。

默认路由、主备链路外加完整和部分路由

在多宿主连接到不同提供商的情况下,除非客户有意成为提供商,并准备将完整路由再传递给自己的客户(担当穿越AS),否则不必从一家或同时从两家提供商接收完整路由。有关情况如图7-16所示。

图7-16 多宿主连接到两个提供商并接收完整和部分路由的客户

取决于是否需要高效的负载均衡,客户可以从一个或同时从两个提供商接收完整路由。在从两个(多个)提供商接收完整路由的情况下,客户可以利用本地优先属性来确定通过哪个提供商转发目的地址为相应网络的流量。可以根据AS、前缀或团体字串信息来做出流量的转发决策。在某些情况下,客户可能希望从一个提供商接收完整路由,并从另一个提供商继续接收部分/默认路由。这样的话,既省却了在不同链路上管理所收完整路由的麻烦,客户又能通过最佳路径与外部世界通信。读者稍后会了解到,任意由提供商所引起的Internet路由的不稳定,都会极大地消耗路由器CPU资源。

如图7-16所示,客户从NY提供商接收完整路由,从SF提供商接收部分路由。此外,客户还设置了指向SF提供商的默认路由。针对目的地址为SF提供商本地网络及其客户网络的流量,客户会采用SF链路发送,这是因为相应路由的AS路径较短。至于所有目的地址为其他网络的流量,客户会采用NY链路发送,原因是SF提供商只在SF链路上通告部分路由。如果SF链路中断,客户可以通过NY链路访问外部网络。一旦NY链路中断,客户还可以遵循指向SF提供商的默认路由,访问Internet。

提示:


请参见第12章的“多宿主连接到不同提供商”一节。

客户的入站流量

如何将路由通告给提供商会影响到客户自己的出站流量。请注意,在与多提供商互连的场景中,客户向提供商分别通告路由的不同度量值,对自己的出站流量不会有半点影响。这是因为MED是非传递属性。换言之,只有与客户直连的上游提供商才能学到路由的MED值,而提供商之间则不会传递该属性。

为了以动态方式影响提供商的路由选择行为,客户可以在路由的AS路径信息中插入虚构的AS号,以此来操纵AS路径属性,并最终改变路由中AS路径的长度。提供商收到具有不同AS路径长度的相同路由时,会优选具有最短AS路径的路由(假定高优先级的其他BGP属性全都相同)。请注意,在多提供商环境中,由于无法保证只有邻接提供商会从其他提供商接收发往客户网络的流量,故而只影响直连提供商的路由选择行为(比如通告路由的MED)(并以此影响入站流量)是远远不够的。AS路径操纵必须影响从交换点到客户流量路径上所有提供商的路由选择行为,因为就路径长度而言,平衡恰恰是在这里以这样或那样的方式被打破。

图7-17所示为在AS路径信息中利用虚构AS号影响路由选择的方法。客户(AS100)向AS300通告路由时,在路由的AS信息中插入了虚构的AS号。位于NAP的提供商会收到具有不同AS路径长度(“300 100 100”Vs.“200 100”)而目的网络相同的路由,并会挑选由AS200通告的具有最短AS路径的那条路由(假定高优先级的其他BGP属性全都相同)。虚构AS号应该是对生成路由AS的AS号加以重复(在本例中,就是重复AS号100)。

图7-17 利用虚构的AS号去影响提供商的路由选择

某些情况下,为了共同的利益,客户间可能会彼此互连,并且在Internet连接上互为备份。这样的客户全都连接到同一个提供商,并同时以一条私有链路互连。这时,通常会发生以下两种情况。

私有链路作为纯备用链路

如图7-18所示,AS2和AS3都连接到同一提供商AS1。AS2和AS3之间的那条私有链路只作为备用链路使用。AS2和AS3的路由策略相同。

图7-18 私有链路作为备用链路

对于图7-18中所示的备用链路环境,针对AS2出站流量的考量耐人寻味。无论AS3从提供商和AS3接收完整路由,还是接收默认、完整加部分路由的组合,AS2都必须为接收自AS1的路由设置更高的本地优先值(200),这要高于从AS3所收路由的本地优先值(100)。这样的话,AS1总是AS2的首选流量出口点,而那条私有链路只作为备用链路。在接收部分路由的情况下,AS2可以设置指向AS1和AS3的默认路由。为前者设置较高的本地优先级值,AS2就能确保通过提供商发送所有的流量。如果从提供商接收完整路由,从AS3接收部分路由,那么AS2可以保留(动态学习或静态设定)一条指向AS3的默认路由,在直连提供商的链路中断时,这条默认路由会令路由使用那条私有备份链路转发流量。对于从AS3动态学到的默认路由,AS2无需为其设置一个比完整路由(从提供商学得)低的本地优先值

私有链路作为AS2和AS3间的主用链路

如图7-19所示,使用AS2和AS3间的这条私有链路作为主用链路,发送目的地址为AS3本地及其客户网络的流量。AS2仍会使用直连提供商的链路发送所有其他流量。这两条链路(直连提供商链路和私有链路)还应该互为备份。

图7-19 私有链路作为AS间互连的主用链路

假定图7-19所示的网络环境采用的是接收默认、完整以及部分路由的路由策略;以下内容围绕AS2的出入站流量模式做深入探讨。通常,会采用默认的BGP行为来处理本场景的路由策略需求。因为BGP总是优选具有最短AS路径(假定高优先级的其他BGP属性全都相同)的路由,AS2和AS3也总是利用私有链路转发彼此的流量。出于实验的目的,我们会尝试操纵本地优先属性以影响出站流量,从而满足本场景的需求。

提示:


请参见第12章的“同一提供商的客户间设有备份链路”一节。

AS2的出站流量

无论从AS3和提供商接收哪种类型的路由(默认路由、部分路由或完整路由),在为所有不包括AS3的路由更新设置本地优先值时,AS2 的赋值应高于所有其他路由更新的本地优先值。如图7-19所示,AS2为所有非AS3生成的路由(non-AS3-originated)设置了本地优先值300。AS3通过那条私有链路通告给AS2的路由更新(包括了由AS3生成的路由)则被赋予了本地优先值200。提供商通告给AS2的路由(包括了由AS3生成,并由提供商转发给AS2的路由)仍然保留了默认本地优先值100。这也就确保了AS2会采用这条私有链路发送目的地址为AS3本地及其客户网络的流量。

对于所有其他流量,AS2的路由策略是:接收默认路由,或者自行设置指向提供商和AS3的默认路由,但优选指向提供商的默认路由。

AS2还可以只从AS3接收其本地生成的路由,不从提供商接收任何(明细)路由。然后,AS2可以设置(或学习)指向两者的默认路由,并总是优选指向提供商的默认路由。这样,所有发往AS3的流量都会采用私有链路,其他所有流量都会采用直连提供商的链路(其一、明细路由压过默认路由;其二、AS2优选了提供商的默认路由)。一旦AS2直连提供商的链路中断,那条私有链路会承担所有流量的转发。

AS2的入站流量

对于场景4中所讨论的上述所有个案来说,入站流量的行为全都相同——来自Internet的入站流量都会从提供商和AS2之间的那条链路流入,原因是相应路由的AS路径较短;对于源于AS3或其客户的流量,则会选择从那条私有链路流入,这同样因为相应路由的AS路径较短。当然,这也是人们的预期行为。

对于接入不同Internet提供商的多个独立的AS来说,要求通过Internet互联也不是什么稀罕事。只要牵扯到多个提供商,并且这些提供商的客户之间还想实现互相备份,维护起来就非常麻烦。本节是对上一节所讨论问题的拓展——论述了提供商是如何完成这种备份连通性的需求。

如图7-20所示,AS1和AS2分别是ISP1和ISP2的客户。此外,AS1和AS2之间还达成了双边协定——两者之中任何一条主用Internet链路中断,两个AS间的那条私有链路就作为备用链路使用。

图7-20 设有备份链路的不同提供商的客户间

正常情况下,每个AS都不愿成为另一个AS的穿越AS。在图7-20所示的案例中,AS1会要求ISP1设置路由策略,使得ISP1通过ISP2才能将流量送达AS2;同理,AS2也会要求ISP2设置路由策略,使得ISP2通过ISP1才能将流量送达AS1。在本场景中,为使备用链路发挥作用,AS1要把AS2的网络通告给ISP1;AS2也要把AS1的网络通告给ISP2。

提示:


请参见第12章的“不同提供商的客户间设有备份链路”一节。

与主备链路有关的讨论与上一节“情景4:同一提供商的客户间设有备份链路”的内容相同。私有链路既可以作为纯备份链路,也可用于承载2个AS间内部流量的传递。

向客户发送流量时,要想让提供商不将另一个客户作为“跳板”(作为穿越AS),实现起来非常复杂。ISP1必须分别针对由ISP2和AS1所通告的AS2的路由设置本地优先值,令前者高,后者低。这样的话,在正常情况下,ISP1向AS2发送流量时,会首先将流量发送给ISP2。当然,对于ISP2也要部署相同的路由策略。

提供商都喜欢尽量精简自己的网络配置。对于每天都有多个客户在线的提供商来说,为每个客户手工设置本地优先值可谓是耗时耗力。此外,提供商还倾向于根据AS号而不是具体的网络号来设置自己的策略。

有好几种方法可以用来实现所要求的路由策略。第一种是BGP团体属性法,这需要提供商与客户之间进行协商。第二种是AS路径操纵法。AS路径操纵易于实现,但可能不为所有厂家的产品所支持。此外,如果提供商采用了限制性的AS路径过滤器,那么也需要提供商和客户之间进行协商。

团体属性法

团体属性法的确行之有效。提供商要将某些团体属性值映射为相应的本地优先值(即RFC 1918所载)。对于标以特定团队属性值的客户路由更新,提供商会自动分配相应的本地优先值。

出于简化,本场景只是从ISP1的角度来完成路由策略的设置。对于ISP2来说同样适用。对于图7-21所示案例的流量流动行为,至少可以划分为3种模式。

图7-21 团体属性法解决方案

取决于客户到提供商之间的具体连接数,可能还会有更多的流量流动模式,但只需探讨3种基本流量模式。

对于ISP来说,流量的流动模式可被归纳为以下3种。

将路由划分为不同的类别(将流量划分为不同的模式)之后,ISP1会为每种模式分配团体属性值,并将团体属性值动态映射为本地优先值。如表7-5所示。

表7-5 动态映射本地优先值

模式

团体属性值

本地优先值

客户的本地路由

100

客户的穿越路由

400:40

40

ISP路由

400:60

60

ISP1会告知其客户及直连提供商:本AS路由的本地优先值会根据表7-5动态设置。于是,客户就可以在通告路由时,设置相应的团体属性,从而影响ISP1的路由决策。如图7-21所示,AS1会将无团体属性值的本地路由,以及团体属性值为400:40的穿越路由通告给ISP1。ISP2会将自己团体属性值为400:60的路由通告给ISP1。

根据表7-5所总结的本地优先值,AS1会使用自己与ISP间的直连链路,转发目的地址匹配AS1本地路由的流量(此类路由的本地优先值为最高的100)。ISP1会将匹配所有其他路由(包括AS2的路由)的流量转发给ISP2(ISP路由本地优先值为60,大于AS1通告的穿越路由的本地优先值40)。

提示:


请参见第12章的“COMMUNITY属性法”一节。

AS路径操纵法

AS路径操纵法与“情景3:多宿主连接到不同提供商”的“客户入站流量”一节所讨论的方法基本相同。这种方法颇为直截了当,业已证明是影响提供商路由决策的有效方法之一。图7-22所示为使用AS路径操纵法影响路由决策的过程。

图7-22 AS路径操作示例

如图7-22所示,为了避免“压过”AS路径属性,所有路由的本地优先属性均保持其默认设置。有了这一假设,通过对AS路径属性的操纵,ISP1会使用与AS1的直连链路转发目的地址为AS1的流量,使用与ISP2的直连链路转发目的地址为ISP2的流量。根据最短的AS路径,ISP1做出了上述路由决策。

对于目的地址为AS2的流量,ISP1无论通过AS1还是ISP2转发,“路途”都相等。ISP1经AS1到AS2的AS路径为“1 2”;经ISP2到AS2的AS路径为“500 2”。这两个AS路径长度相等。

为了影响ISP1的路由决策,AS1向ISP1通告AS2的路由时,必须在路由的AS路径信息中前置一个额外的AS号,以增加路由的AS路径长度。一般情况下,AS1会重复自己的AS号。这样的话,ISP1经AS1到AS2的新AS路径将会是“1 1 2”,这要长于ISP1经ISP2到AS2的AS路径“500 2”。所以,在正常情况下,ISP1会使用ISP2转发目的地址为AS2的流量。

提示:


请参见第12章的“AS_PATH属性法”一节。

在路由进程域边缘掌控路由选择,可以完全控制自治系统的流量进出。还有一个难题有待解决,那就是当流量离开AS之前,是如何在AS内部流动的呢?并非AS内的所有路由器都运行BGP。由于受到内存方面的限制,只运行IGP的路由器一般不会承载完整的Internet路由表。内部路由器为了将流量发往AS之外的网络,最常用的做法之一就是在AS内运行指向外部路由器的默认路由。只要IGP和BGP策略产生冲突,默认路由就极有可能导致路由环路。下一章会讨论BGP策略与IGP默认路由的交互问题。下一章还讨论了使用策略路由全控路由选择行为的方法——与基于目的地址的传统路由选择不同,策略路由会根据IP源地址来执行路由选择。

问:若静态定义默认路由,令其指向某个经BGP学到的服务提供商网络。若该网络不停地Up/Down,会发生什么情况呢?

答:这条默认路由会“时有时无”。这也就是不应将默认路由指向某个精确网络的原因所在。必须将默认路由指向超网或聚合网络,因为超网或聚合网络不太可能出现翻动情况。

问:在通过BGP学习默认路由0/0和定义静态默认路由之间,应该如何选择呢?

答:对于边界路由器来说,只要静态默认路由指向的聚合网络稳定,以上两种方法也没什么区别。但反过来说,通过BGP学到的0/0会被泛洪给所有IBGP对等体,最终有可能会被通告给其他EBGP对等体。而静态定义的默认路由控制起来则更为容易。

问:某AS分别连接到位于SF和NY的提供商。该AS想让出入SJ站点的流量通过SF链路传递,所有其他流量则由NY链路承载。应当怎样去实现这一流量行为呢?

答:因为连接到两个不同的提供商,就不应该使用MED。对于入站流量来说,唯一的方法就是操纵路由的AS路径(或如RFC 1998中所提出的方法);对于出站流量来说,那就是调整路由的本地优先值。对于发往SJ的入站流量,可以使用AS路径操纵技术,使得在SF路径上通告的所有SJ路由的AS路径长度长于在NY链路上通告的同样路由。真正的问题在于出站流量。只要知晓了SJ用户所要访问的具体目的网络,就可以在SF出口点针对这样的路由设置更高的本地优先值。如果SJ站点所要访问的是任一目的网络,那么为从SF链路接收的所有路由设置更高的本地优先值,会导致SF链路承载所有的出站流量。但这样一来,使用NY链路承载所有其他流量的需求就无法满足了。

策略路由是应对这种情形的另一种方法,启用了策略路由,路由器就可以跟踪数据包的源地址,并据此引导流量。第8章将会描述策略路由。

问:在本AS通告的路由中前置了AS号,并希望借此影响本AS的入站流量,可是却未见成效,为什么?

答:请牢记,路由更新会在多个提供商之间交换。沿途(从流量之源到贵AS之间)的提供商可能会使用本地优先属性“覆盖”了路由的AS路径属性。需要与提供商协商解决。

问:BGP策略非设置不可吗?难道不能让BGP自行“决断”正确路径吗?

答:BGP策略并不是非设置不可。不过,请牢记,BGP(不是链路状态协议)不考虑链路的速度以及用户的流量需求。若BGP自行“决断”的路径也能满足流量的需求,那就无需改变任何BGP属性。

1.RFC 826, “Address Resolution Protocol (ARP),” http://www.isi.edu/innotes/rfc826.txt

2.RFC 1998, “An Application of the BGP Community Attribute in Multi-home Routing,”
http://www.isi.edu/in-notes/rfc1998.txt

 作者的表达太过随意,让我们来打个比方,比如说AS内某用户ping某个Internet站点,ICMP的echo request数据包从AS的A点流出,其反馈流量,即该Internet站点的echo reply数据包也应从A点返回,这样才算流量对称。因此,译者在括号内添加了“反馈流量”。——译者注

 作者的表达极为不严谨,“反馈流量”是必须要加的,否则就形成了环路。——译者注

 原文是“By definition, a default route is a route in the IP forwarding table that is used if a routing entry for a destination does not exist.”译者认为,作者的文字表达能力太差,如果不懂何为默认路由的读者,读完这段文字后估计还是一头雾水,故译文酌改。另外,IP转发表和IP路由表是不是一回事,还很难说。因为,IP路由表属于控制层面,而转发表则应属于数据层面。这里就姑且将IP转发表看作是IP路由表吧。——译者注

 原文是“Default network”,作者的文字表达能力实在令人“赞叹”。——译者注

 原文欠严谨,直译为:对称是指从给定出口点发送出去的流量还能从相同点返回——如发出流量从相同点返回不就成为环路了么?——译者注

 这是因为明细路由压倒默认路由。——译者注

 为什么作者在“流量模式”里提到的尽是“路由”?请读者一定要明白流量和路由的关系——流量属于数据层面,路由属于控制层面。搭建网络的目的,是为了传递流量,对于超大型网络,不可能直接控制流量。因此,必须以控制路由的方式进而控制流量——通告路由是为了吸引流量;学习路由是为了发送流量。流量的发送方向和相应路由的通告方向始终相反,这是学习BGP,甚至是MPLS/VPN所必须建立的基本概念!——译者注

 原文是“MEDs should be used.(应该使用MED)”,译者认为原文有误,酌改。——译者注


相关图书

TCP/IP路由技术(第一卷)(第二版)
TCP/IP路由技术(第一卷)(第二版)
思科ACI部署完全指南
思科ACI部署完全指南
趣学CCNA——路由与交换
趣学CCNA——路由与交换
Cisco局域网交换机配置手册(第2版•修订版)
Cisco局域网交换机配置手册(第2版•修订版)
路由设计的优化
路由设计的优化
Cisco路由器配置手册(第2版)
Cisco路由器配置手册(第2版)

相关文章

相关课程