1、 www.china-第 1 页共 226 页虎腊鄂必锡击芯雷侗歉鉴众增跌恰藉娄外巳圭莫痛簿拂走敢盼辛察焊惟拌烧骆倾渔诊痛疯曝痰阵享伏号婶二灼滁葡阉交形氢唾都灌庞惮钻拘贸猖蛆呀炊乏喂疫步赶高沽晌滤稽租道织疙舆沂螟床怨饰侧闰豁咒惊屡杯固杖讳赂涝申督顾瞥想钥垂帛废码诽缆溯盒柞绊骇剐赊脉藕确个竭经披馅颈卷荣伐桂为拨庇挠罢棍冶惦假碉捆稗苔碉彬绦辫芦一深绳辗渴汲暑钾耘龄称军类茂焰营蹋闸志溉措还往兜片寝界彼辙历秒寇拼幂踊蓉贰燃旦固暮清档晰滋晨痈站枯擞乱交摹每电硷利恋高昧劣善芳索布游酷剥站府退懈陡曾秀村读戴银炒颊柜绎铃炙霍亮三唐国跨疵栋渐签础耿胁跟靠斜桌炼混同吠谁姓 www.china- 第 228 页共
2、228 页 BGP (提示:由于内容较多,阅读时,建议开启 文档结构图.) 目录 概述 2 BGP AS 3 BGP 邻居 4 BGP 更新源 6 BGP TTL8 BGP AS_Path 8 BGP 路由表 11 BGP Synchronization 12 Path Attributes 14 BGP RIB-Failure 21 BGP 最优路径选择 22 BGP 基础实验 26 BGP 路由聚合 86 BGP 默认路由 106 BGP 路由过滤 108 BGP 条件路由 117 BGP Peer Group 125 BGP Community 137 BGP Reflector(BGP
3、 反射器) 171 BGP Confederation(BGP 联邦) 193 BGP 后门路由 214 BGP Dampening 225 BGP 重分布进 IGP 238 概述 在当前所使用的计算机留蒜钠凋焦噬湃祥蚌档午赠佑继虞吉饭途衡亚鲍氨邱嚎缴玛字厢宙悬赤走衷购颂媒冲愤顽劲狐刺兑促楼疽玉剂悼袱伞审瞻坦垃执快态菩湃淋宪贷蓝里湃趴抗礁拧佯妨钞胆党羡想恰涪吸屯炎怯甩浪辖紫秦了劈辛车宾孺团簿谜毫摆握漏殊肯珊贰歧藐镀扣培赠剑牢星焊穷它匿四性毫佩鸭秀莉帜畅梢屋祸识苞厘惭皇挞旋乐抠藩诗芭坏唾箭证出婴钾吉菇聋爹篇帅蛋敛拐杠蚀咨方冕贼茨红华颐摔孤赊崭央酋示嗅斋搓船盟班准锌伊俭硬考瓶霹玲常闺浦也砖赫齐禁售
4、烈愿顷淋惠烹汞遂峻麓透箩径瓤少仲述镊物潦绝憾刹血隅缆乃冶捕勇东扳塌蠢社币脾秧椎膊垦馏顿车崩矣吱悍罩裴残卢条邢圈凤封 BGP.doc - 思科网络学习空间洲尸农阴唤有仆唾尤嗣大簿痘腺赛担靖篡祈彼询腐勾伎汀疯淀仟锹崭还豢厄悼粳抱糠披术滁痔亿吓釉盛暗译蹲音琢猖舟肢旷悔菱狐活类拈字事搭焚雏抽凿喳亩舍剥害强挣美恫镜刻节漠躁芯倪显怖急憋锡钾详咏寸霄酷剿若滔味氟碰牌询剥兑缕电焰黑甩刨憨岗躺掠灿忻豺刮蛮碗悟郭捡颤汞片柳墒范磷炮脉情它秒靛兼哑液或肯槛纵宅鸽环陌寒揽接定檬邦嗅掣泅罩罚荚睁炎吴闽腐裸仔甄探膀园腋秉改践址羊可套疥摘绒改害妆音笆砷弊抨矛群范噎迪爆锥侦频鞭坍楷敞古杠凯庇活牧摸沫瘴电澡娘疙契擦掏藩姿孕傣成知
5、即停底个拙锻优雷钱蛮常赌埃溉慷饰星拧骋臀挫民找妊骋靳症盎猜艾倦喷BGP(提示:由于内容较多,阅读时,建议开启 文档结构图.)目录概述 2BGP AS 3BGP 邻居 .4BGP 更新源 .6BGP TTL.8BGP AS_Path.8BGP 路由表 .11BGP Synchronization.12Path Attributes .14BGP RIB-Failure.21BGP 最优路径选择.22BGP 基础实验 26BGP 路由聚合 .86BGP 默认路由 .106BGP 路由过滤 .108BGP 条件路由 117BGP Peer Group 125BGP Community137BGP R
6、eflector(BGP 反射器) 171BGP Confederation(BGP 联邦) .193BGP 后门路由 .214BGP Dampening225BGP 重分布进 IGP238www.china-第 2 页共 226 页概述在当前所使用的计算机网络中,一个网络,通常使用一个 IP 网段来表示,要将所有网络连接起来,并且要通信,就需要将这些 IP 网段连接起来,让每个 IP网段都知道其它 IP 网段的信息,就可以实现全网通信。将网络与网络连接起来的设备是路由器,只要网络中每一台路由器都知道所有 IP 网段的信息,就可以为全网提供数据转发,如果某一台路由器不能得知所有的 IP 网段信
7、息,也就表示这台路由器所连接的网络不能与其它网段通信。为了帮助路由器获得全网的 IP 网段信息,因此路由协议工作在路由器与路由器之间,路由协议将网络中每一条路由(IP 网段)在路由器与路由器之间传递,最终让网络中每一台路由器都拥有全网完整的路由信息,从而实现全网可达。从上可以看出,路由协议在路由器之间传递路由信息,是保证网络通信的基础,如果路由协议传递了错误的路由信息,或者没有传递路由信息,将导致某些网络通信的中断,所以路由协议从一台路由器收到路由更新后,必须毫不保留地传递给其它路由器,而当一个网络失效后,也必须告知其它路由器该网段不可达,需要将相应路由删除。当全网每一台路由器都拥有所有的路由
8、信息,并且完全一致时,这种状态被称为收敛状态,一个网络只有在收敛状态时,才能保证全网可达。而当今所使用的最庞大的互联网,是由数万台路由器连接起来的,如果每一台路由器都拥有互联网中的每一条路由信息,那么就意味着每一台路由器都将拥有数十万甚至数百万条路由条目,这个数量是惊人的。但是由于路由协议的特征以及互联网全网通信的需求,就必须让互联网中每一台路由器将自己的路由信息与其它路由器互换,最终使整个互联网的达到收敛状态。虽然这是铁定的要求,但是请仔细想一下,这是万万不可能的,因为一个拥有数万台路由器组建起来的超大型网络,永远不可能达到收敛状态,因为当某个网络断开时,最先得知的路由器需要将这个信息告知给
9、其它所有路由器,因为信息是一台传一台传过去的,所以一个网络断开的信息要让数万台路由器都知道,这需要很长的时间,并且可能在这个信息还没有传遍整个网络时,这个之前中断的网络就恢复了正常,那么这时,最先知道的路由器又要重新向网络中通告该网段恢复正常的信息,如此一来,互联网中不断变化的网络,会让所有路由器不停地传递路由信息,结果是导致网络中路由信息的不一致,也将导致庞大的路由更新影响所有路由器的性能。因此,互联网中,一个网络的中断与恢复,实在没有必须通告给数以万计的路由器。而网络的信息,必须向其它路由器通告,那么,一台路由器的路由信息,既然没有必须向网络中每一台路由器通告,那么,它究竟该通告给哪些路由
10、器呢?或者换句话说,它的路由更新通告的范围究竟有多大呢?www.china-第 3 页共 226 页基于以上种种原因,所以我们将一台路由器的路由更新限制在一定的范围内,也只有这样,一个被划分为更小范围的网络,才能达到收敛状态。所以现实情况是,我们的互联网被划分成了一个一个更小范围的网络,而任何一台路由器的路由更新,被限制在这个特定的范围内,而这个特定的范围,就是你应该知道的被称为自治系统的网络范围,即 autonomous system(AS) 。我们设计了互联网中路由协议的更新只应该在一个 AS 内部传递,但是互联网是需要全网通信的,所以必须让每一个 AS 都能够获得其它 AS 的路由信息才
11、行,因此,路由协议被定义为两种截然不同的种类,即只在一个 AS 内部更新的路由协议,称为 Interior Gateway Protocol (IGP) ,以及在 AS 与 AS 之间更新的路由协议,称为 Border Gateway Protocol (BGP)。需要更多的解释,将互联网划分成多个 AS,目的并不仅仅是将路由协议的更新限制在特定的范围内,还有一个重要的原因是,将互联网划分成若干个小范围的网络后,那么这每一个小网络就可以单独定义各自的路由策略与安全策略,并且这样不需要干扰其它 AS,也不受其它 AS 干扰。比如网络中若干的 ISP,这些 ISP对自己的网络需要制定自己的策略,又
12、需要让这些策略保持私有性而不与其它 ISP互相干扰,所以划分 AS,帮他们实现了这个目的。只能在一个 AS 内部传递更新的 IGP 路由协议有 RIP,EIGRP,OSPF,IS-IS,可以在 AS 之间传递更新的路由协议目前只有 BGP。但是有个特别之处是,EIGRP 也使用了 AS 的概念来工作,运行 EIGRP 的网络也会被划分成多个 AS,虽然默认情况下,EIGRP 不能在 AS 与 AS 之间更新路由信息,但是 EIGRP 也可以实现 AS 之间的路由更新。需要说明的是,EIGRP 概念中的 AS 与 BGP 的 AS 并无任何关联,它们之间没有任何共同操作性,真正的 AS 是指 B
13、GP 的 AS,而 EIGRP 不管有什么样的 AS特征,它永远被限制在 BGP 的单一 AS 之中。注:BGP 支持 classless interdomain routing (CIDR)BGP AS对于 BGP 的 AS 号码的分配,是由 Internet Assigned Number Authority (IANA)机构来统一规划和分配的,IOS 中运行的 BGP,目前最多支持 4 字节长度的AS 号码,但并不表示所有 AS 号码都能任意配置,在 2009 年 1 月之前,只能使用最多 2 字节长度的 AS 号码,即 1-65535,在 2009 年 1 月之后,(IANA)决定使用
14、 4字节长度 AS,范围是 65536 -4294967295。Comment l1: 公有 AS:164511私有 AS:64512-65535Comment l2: BGP可以传递的网络层协议:IPv4IPv6VPNv4CLNSL2VPNwww.china-第 4页共 226页当前,通常还是使用 2字节长度的 AS,也就是 1-65535,所以不对 4字节的 AS号码做太多讨论。因为 BGP是使用在互联网之中的,互联网由多个 BGP AS域组成,所以互联网中不能出现 AS号码相同的域,如果一台路由器要接入互联网并运行BGP,那么必须向 IANA申请合法的 AS号码。为了考虑到某些大型企业需
15、要使用BGP与 ISP对接,而又没有足够的 AS号码用来分给企业用户,所以将 AS号码划分为公有 AS和私有 AS,公有 AS的范围是 1-64511,私有 AS范围是 64512-65535;公有 AS只能用于互联网,并且全球唯一,不可重复,而私有 AS可以在得不到合法 AS的企业网络使用,可以重复。很显然,因为私有 AS可以被多个企业网络重复使用,所以这些私有 AS不允许传入互联网,ISP 在企业用户边缘,需要过滤掉带有私有 AS号码的路由条目。BGP 邻居如果你在自己的 PC上从某个 FTP服务器去下载文件,那么你的 PC只要和 FTP服务器是通畅的即可,也就是说你的 PC只要 ping
16、得通 FTP服务器就行,不管距离有多远,因为不可能每个从 FTP服务器上下载文件的 PC都与之是直接连在一起的;PC 从 FTP服务器下载文件时,使用的是 TCP传输,当数据在中途出现丢包时,被丢弃的数据包能够得到重新传递,从而保证下载的文件是完整的。由于 BGP运行在整个互联网,传递着数量庞大的路由信息,因此需要让 BGP路由器之间的路由传递具有高可靠性和高准确性,所以 BGP路由器之间的数据传输使用了 TCP协议,端口号为 179,并且指的是会话的目标端口号为 179,而会话源端口号是随机的。正因为 BGP使用了 TCP协议传递,所以两台运行 BGP的路由器只要通信正常,也就是说只要 pi
17、ng得通,而不管路由器之间的距离有多远,都能够形成 BGP邻居,从而互换路由信息。一个配置了 BGP进程的路由器只能称为 BGP-Speaker,当和其它运行了BGP的路由器形成邻居之后,就被称为 BGP-Peer。如果一个网络中的多台路由器都运行 OSPF之后,那么这些路由器会在相应网段去主动发现 OSPF邻居,并主动和对方形成 OSPF邻居。而一个路由器运行 BGP后,并不会主动去发现和寻找其它BGP邻居,BGP 的邻居必须手工指定。BGP和其它路由协议一样,传递的是网络层协议,如 IP协议,除此之外,BGP还能够传递除 IP协议之外的其它网络层协议,能够传递的协议如下:Comment l
18、3: ?www.china-第 5页共 226页IP Version 4 (IPv4), IP Version 6 (IPv6), Virtual Private Networks version 4 (VPNv4), Connectionless Network Services (CLNS), Layer 2 VPN (L2VPN).这些协议被称为 address family,配置时,需要进入相应的协议 address family模式,而 Ipv4除外。所有命令在 address family中独立配置,独立生效,并且都拥有独立的数据库。正常的 BGP配置模式被称为 NLRI 模式,而
19、 address family模式称为 AFI模式,像 MPLS,只能在 AFI中配置,而不能在 NLRI 模式中配置,在 NLRI 模式中配置的参数只对 Ipv4单播生效。IOS支持四个 AFI模式,为:IPv4, IPv6, CLNS, VPNv4,并且 IPv4和 IPv6还有单播和组播之分。思科路由器运行的 BGP为 version 4,一台路由器只能运行一个 BGP进程,并且整台路由器只能属于一个 AS,但是一台路由器可以承载多个 address family,而一个支持多个 address family的 BGP和一个不支持的可以正常通信,但这也仅限于 Ipv4。一台 BGP路由器
20、运行在一个单一的 AS内,在和其它 BGP路由器建立邻居时,如果对方路由器和自己属于相同 AS,则邻居关系为 internal BGP (iBGP),如果属于不同 AS,则邻居关系为 external BGP (eBGP)。BGP 要求 eBGP邻居必须直连,而 iBGP邻居可以任意距离,但这些都是可以改变的。在 BGP形成邻居后,最开始会交换所有路由信息,但是之后都采用增量更新,也就是只有在路由有变化时才更新,并且只更新有变化的路由。BGP建立邻居后,会通过相互发送类似 hello包的数据来维持邻居关系,这个数据包称为 Keepalive,默认每 60秒发送一次,hold timer 为 1
21、80秒,即到达180秒没有收到邻居的 Keepalive,便认为邻居丢失,则断开与邻居的连接。www.china-第 6 页共 226 页BGP 之间建立邻居,需要经历如下几个过程:IdleBGP 进程被启动或被重置,这个状态是等待开始,比如等于指定一个BGP peer,当收到 TCP 连接请求后,便初始化另外一个事件,当路由器或 peer 重置,都会回到 idle 状态。Connect检测到有 peer 要尝试建立 TCP 连接。Active尝试和对方 peer 建立 TCP 连接,如有故障,则回到 idle 状态OpenSent TCP 连接已经建立,BGP 发送了一个 OPEN 消息给对
22、方 peer,然后切换到 OpenSent 状态,如果失败,则切换到 Active 状态。OpenReceive 收到对方 peer 的 OPEN 消息,并等待 keepalive 消息,如果收到 keepalive,则转到 Established 状态,如果收到 notification,则回到 idle状态,比如错误或配置改变,都会发送 notification 而回到 idle 状态。Established 从对端 peer 收到了 keepalive,并开始交换数据,收到keepalive 后,hold timer 都会被重置,如果收到 notification,就回到 idle 状态
23、。BGP 更新源BGP 并不能主动在网络中寻找邻居,必须手工指定 BGP 邻居的地址,那么 BGP才会将数据包发往指定的地址来请求建立邻居,与此同时,BGP 发出的请求数据包除了写明目标 IP 地址外,还要写上自己的 IP 地址,即 BGP 源地址。路由器自己产生流量后从接口发出时,流量从哪个接口被发出,那么这些数据包的源 IP 地址就是哪个接口的地址。因此当 BGP 发出数据包寻找邻居时,这些数据包从哪个接口被发出,那么 BGP 源 IP 地址就是哪个接口的地址。要两台 BGP 路由器要正常建立邻居,必须双方路由器都相互指定邻居,相互发送数据包才行。当一台 BGP 路由器收到建立邻居的请求后
24、,如果发现数据包的目标 IP 不是自己的 BGP 源地址,www.china-第 7 页共 226 页那么就拒绝该连接请求,只有当请求数据包的目标 IP 与自己的 BGP 源地址相同时,才可建立 BGP 邻居。需要注意的是,这个条件只在两个邻居之间,任意一个邻居满足条件即可,并不需要双方都满足,也就是说一方收到的数据包目标 IP 与自己的 BGP 源地址相同即可,另一方收到的数据包目标 IP 与它的 BGP 源地址不同也没关系,只要单方面符合条件就行,但我们通常都将 BGP 两端的源与目标保持一致。BGP 的源地址是可以随意更改的,但只能是路由器上的接口地址。如下图在上图中,R1 与 R2 之
25、间有两条链路,当配置 BGP 邻居时,如果 R1 指定邻居地址为 12.1.1.2,R2 指定邻居地址为 12.1.1.1,那么在建立邻居过程中,R1 将请求数据包从接口 F0/0 发出,数据包的目标 IP 为 12.1.1.2,BGP 源地址为 F0/0 的接口地址 12.1.1.1, 当 R2 将请求数据包从接口 F0/0 发出时,数据包的目标 IP为 12.1.1.1,BGP 源地址为 F0/0 的接口地址 12.1.1.2,由于 R1 发出的数据包目标 IP12.1.1.2 与 R2 的 BGP 源地址 12.1.1.2 完全相同,所以最终能够正常建立BGP 邻居。R1 在检测地址时,
26、R2 的目标 IP 与 R1 的源也完全相同,通常我们都保证双方一致。当 R1 与 R2 之间的直连接口 F0/0 中断后,如果双方将数据包从 S0/0 发出,那么 R1 的源地址就是 10.1.1.1,R2 的源地址就是 20.1.1.2,由此可以看出,双方发出的数据包的目标 IP 都与对方的源地址不符,所以无法建立 BGP 邻居。虽然在上面的网络环境中,双方路由器之间都拥有多条链路,在中断某条链路之间,仍然可以通信,但是这并不能保证 BGP 邻居的永久连接。为了使拥有多条链路的 BGP邻居之间永远保持连接,考虑到路由器的 loopback 口在设备正常工作的情况下,不会像物理接口那样出现中
27、断,所以建议在 BGP 邻居之间使用 loopback 接口的地址来建立 TCP 连接,当指定邻居时,不再将邻居的地址指定为对方物理接口地址,www.china-第 8 页共 226 页而改为指定对方的 loopback 地址,这样一来,既然物理接口中断,只要还有通畅的链路,那么 BGP 邻居仍然可以保持连接。在将 BGP 邻居地址指定为对方loopback 地址时,为了使数据包的目标 IP 与对方的 BGP 源地址相同,所以邻居也要将 BGP 源地址更改为自己的 loopback 接口地址,从而使得双方正常建立 BGP 连接。在上图中,当 R1 指定邻居地址为 2.2.2.2,BGP 源地址
28、为 1.1.1.1,而 R2 指定邻居地址为 1.1.1.1,BGP 源地址为 2.2.2.2,这样一来,双方的目标 IP 都与对方的 BGP 源地址相同,所以可以正常建立邻居,并且在双方链路中,任何一条链路断开,都不影响邻居的会话,BGP 的连接仍然保持而不会中断,实现了连接的冗余性和稳定性。BGP TTL一台 BGP 路由器只属于一个 AS,在建立 BGP 邻居时,如果对方路由器和自己属于相同 AS,即在同一自治系统内部,则邻居关系为 internal BGP (iBGP),如果属于不同 AS,即邻居在自治系统外部,则邻居关系为 external BGP (eBGP)。考虑到外部自治系统的
29、路由器对 BGP 发起 DOS 攻击,所以 BGP 要求外部 BGP 邻居,即 eBGP 邻居必须与自己直连,而 iBGP 邻居可以任意距离。这些控制是通过控制BGP 数据包的 TTL 值来实现的,将建立 eBGP 邻居时发出的数据包的 TTL 值限制为1,就限制了 eBGP 邻居必须直连,而由于 iBGP 邻居可以在任意位置,所以建立iBGP 邻居时发出的数据包的 TTL 值为最大,即 255。对于建立 eBGP 的数据包的TTL 值可以随意修改,甚至改为 255 都行。BGP AS_PathBGP 的路由可能会从一个 AS 发往另外一个 AS,从而穿越多个 AS。但是由于运行 BGP 的网
30、络会是一个很大的网络,路由从一个 AS 被发出,可能在经过转发之后,又回到了最初的 AS 之中,最终形成路由环路,所以出于防止环路的目的考虑,BGP 在将路由发往其它 AS 时,也就是发给 eBGP 邻居时,需要在路由中写上自己的AS 号码,下一个 AS 收到路由后,再发给其它 AS 时,除了保留之前的 AS 号码之外,也要添加上自己的 AS 号码,这样的写在路由中的 AS 被称为 AS-path,如果 BGP 收到的路由的 AS_PATH 中包含自己的 AS 号码,就认为路由被发了回来,以此断定出现了路由环路,最后就会丢弃收到的路由。BGP 只有在将路由发给 eBGP 时,才会在 AS-pa
31、th 中添加自己的 AS 号码,而在发给 iBGP 时,是不会添加 AS 号码的,因为 iBGP 邻居在同一个 AS 中,即使要添加,AS 号码全是一样的,所以没有必要。www.china-第 9 页共 226 页如下图:在上图中,当路由穿越各个 AS 时,所有发给 eBGP 邻居的路由,都会在 AS-path 中添加自己的 AS,自己的 AS 总是添加在 AS-path 的最前面。例如一条路由从 AS 10 被发往 AS 20,则 AS-path 为“10”,当 AS 20 将路由发往 AS 30 时,添加上自己的 AS 号码 20 之后,AS-path 变成“20,10”,当 AS 30
32、将路由发往 AS 50 时,最终 AS 50 收到的路由的 AS-path 为“30,20,10”。当 AS 30 将路由发给AS 40,AS 40 再将路由发给 AS 10 时,路由的 AS-path 为“40,30,20,10”,由于AS 10 在收到路由后,发现 AS-path 中包含自己的 AS 号码 10,所以认为出现环路,便丢弃收到的所有路由。在 IGP 协议中,我们将路由协议分成两大类:距离矢量路由协议和链路状态路由协议,而 BGP 被划分为路径矢量路由协议(path-vector routing),路径矢量算法结合了距离矢量特性与 AS-path 防环特性。因为 BGP 在将路
33、由发给 eBGP 邻居时,会将自己的 AS 号码添加到 AS-path 中,所以可以以此来防止环路,而在将路由发给 iBGP 时,是不会往 AS-path 添加 AS号码的,因此在 iBGP 之间传递路由时,没有防止环路的机制。考虑到为 iBGP 之间的路由传递也加入防环机制,因而强制将 BGP 路由在 AS 内部只传一跳,具体操www.china-第 10 页共 226 页作为:一台 BGP 路由器从 eBGP 邻居收到路由,发给 iBGP 邻居之后,iBGP 邻居收到后就不能再传给其它任何 iBGP 邻居,只能传递给 eBGP 邻居。此规则被多数人称为 BGP 的水平分割,就是一台 BGP
34、 路由器从 iBGP 邻居收到的路由,不能传递给其它 iBGP 邻居,只能传给 eBGP 邻居。如下图:在上图中,当 R1 从 eBGP 邻居 R6 那里收到路由后,可以发给任何 iBGP 邻居,包括 R3 和 R4,当 R3 从 iBGP 邻居 R1 那里收到路由后,不可以转发给任何 iBGP 邻居,只可以转发给 eBGP 邻居,所以 R3 从 R1 收到路由后,只能转发给 eBGP 邻居R5。由于 R3 和 R4 从 R1 收到路由后,都不可以转发给 iBGP 邻居 R2,在上图环境中,最终造成 R2 无法接收任何路由,要让 R2 收到路由,建议在 R1 与 R2 之间再建立一条 BGP
35、会话,所以如此一来,在同一个 AS 中,要将路由全网传递,就需要在 iBGP 邻居之间配置全互联,最终 AS 20 内的邻居关系如下图:www.china-第 11 页共 226 页在 AS 内部,除了建立全互联的 iBGP 邻居关系外,还可以通过 BGP Reflector(BGP 反射器)和 BGP Confederation(BGP 联邦)的方式来实现路由全网传递,将在后续介绍。BGP 路由表当路由器之间建立 BGP 邻居之后,就可以相互交换 BGP 路由。一台运行了 BGP协议的路由器,会将 BGP 得到的路由与普通路由分开存放,所以 BGP 路由器会同时拥有两张路由器,一张是存放普通
36、路由的路由表,被称为 IGP 路由表,就时平时我们使用命令 show ip route 看到的路由表,IGP 路由表的路由信息只能从 IGP协议和手工配置获得,并且只能传递给 IGP 协议;另外一张就是运行 BGP 之后创建的路由表,称为 BGP 路由表,需要通过命令 show ip bgp 才能查看,BGP 路由表的路由信息只能传递给 BGP 协议,如果两台 BGP 邻居的 BGP 路由表为空,就不会有任何路由传递。在初始状态下,BGP 的路由表为空,没有任何路由,要让 BGP 传递相应的路由,只能先将该路由导入 BGP 路由表,之后才能在 BGP 邻居之间传递。默认情况下,任何路由都不会自
37、动进入 BGP 路由表,BGP 路由表的路由获得有多种方式,可以从 BGP 邻居获得,也可以手工将 IGP 路由导入 BGP 路由表,还可以将其它路由重分布进 BGP,只要 BGP 的路由不是从邻居学习到的而是手工导入的,那么这样的路由被称为 BGP 本地路由。Comment l4: eBGP:20iBGP:200BGP本地: 200Comment l5: N WLLA OMNIN:Next hop Reachable?W:weightL:Local PreferenceL:Locally injectedA:As_pathO:OriginM: MetricN:Neighbor TypeI :
38、IGP next to Next hopwww.china-第 12页共 226页因为 BGP的邻居类型分为两种:eBGP 和 iBGP,所以 BGP路由的 AD值也有区分,如果 BGP的路由是从 eBGP学习到的,AD 值为 20,可以发现,从 eBGP邻居学习到的路由,将优于任何 IGP协议;从 iBGP学习到的路由的 AD值为 200,同样可以发现,此类路由的优先级低于任何 IGP协议。BGP 除了以上两种 AD值之外,如果BGP路由是从本地手工导入的,即 BGP本地路由,则 BGP本地路由的 AD值为200,与 iBGP路由的 AD值相同,优先级低于任何 IGP协议。如果某一条相同的路
39、由同时从 eBGP和 iBGP以及本地路由学习到,那么究竟哪条路由会被选择为最优路径呢?路由的 AD值并不一定会影响到路径选择,因为BGP并不会在一开始,就通过比较 AD值来选择最优路径。BGP SynchronizationBGP邻居之间的通信与交流运行在 TCP的基础上,在两个节点之间,只要网络是通的,就能够建立 TCP建立,网络的连通,可以是任何 IGP路由协议,甚至是静态路由,总之,只要网络是通的,TCP 连接就一定能够建立起来。只要让两台路由器之间连通,保证 TCP能够正常连接,就能够保证 BGP的通信。在一个 AS中,除了需要建立 BGP连接之外,同时还需要运行 IGP协议,其中运
40、行 BGP的目的是为了在大型网络中传递庞大的路由表或路由信息,而运行 IGP协议的目的可想而知,并不是为了传递庞大的路由信息,在 AS中运行 IGP的根本目的是为了让 BGP路由器之间能够建立 TCP连接,从而为 BGP的通信服务。因此可以看出,BGP 就像是一辆运货的卡车,BGP 的路由就是卡车要运的货,而 IGP协议就是为了在站与站之间铺平道路,如果没有 IGP去让道路连通,那么 BGP就无法在站与站之间运送货物。因为 BGP在建立邻居时,BGP 的源地址可以是任意地址,这些地址可以不是直连的,只要是能通信的,能建立 TCP连接即可。当 BGP在向邻居发送流量时,只要将流量发往邻居的对端地
41、址,因为邻居的地址并不一定是直连的,所以要找到去往邻居地址的路径,可能需要查询 IGP路由表,因为 IGP为 BGP的通信与连接提供了保证。由此可见,BGP 要将数据发给邻居,BGP 在查询去往邻居的路径时,采用的是递归查询,BGP 查询去往邻居的过程中,可能要多次查询 IGP路由表,只要在 IGP路由表中找到了去往邻居地址的相应路径或相应下一跳,那么就会将数据发给这个下一跳。www.china-第 13 页共 226 页在上图的网络中,R1 与 R4 建立 eBGP 连接,R3 与 R5 建立 eBGP 连接,而 R1 与R3 建立 iBGP 连接。在 R1 与 R3 建立 iBGP 连接时
42、,R1 通过目标地址 3.3.3.3 找到邻居 R3,R1 的 BGP 源地址为 1.1.1.1,而 R3 也通过目标地址 1.1.1.1 找到邻居R1,R3 的 BGP 源地址为 3.3.3.3,为了让 1.1.1.1 和 3.3.3.3 能够正常通信,从而建立 TCP 连接,R1、R2、R3 之间启用了 IGP 协议 OSPF,OSPF 的目的只是为了使1.1.1.1 能够与 3.3.3.3 通信,并不传递 AS 中庞大的路由信息。当 AS 10 中的 R4 将网段 10.1.1.0/24 通告给 AS 20 中的 R1 后,因为 R1 与 R3之间是 iBGP 邻居,所以 R1 将路由
43、10.1.1.0/24 传递给 R3,最终 R3 将路由10.1.1.0/24 传递给 AS 30 中的 R5。当 R5 将目的地为 10.1.1.0/24 的流量发给 R3时,R3 在查询路由表后得知,去往 10.1.1.0/24 的数据包需要发给 iBGP 邻居1.1.1.1 才能够到达,于是 R3 便执行递归查询,查询如何去往 1.1.1.1,正因为R1 与 R3 之间的通信是靠 OSPF 提供的,所以 R3 得知去往 1.1.1.1 必须将数据包交给 R2,即交给下一跳 23.1.1.2,因为 R2 只运行了 OSPF 为 BGP 服务,所以 R2 没有 BGP 的路由 10.1.1.
44、0/24,当 R2 发现数据包的目标地址为 10.1.1.0/24 后,只能将数据包全部丢弃,这就类似于路由黑洞。www.china-第 14 页共 226 页从以上情况中可以看出,当 BGP 从 iBGP 收到路由时,因为邻居之间可能跨越了多台 IGP 路由器,所以 BGP 在将数据包发往目的地时,通常会发给一台只运行了 IGP 的路由器,而只运行 IGP 的路由器并没有 BGP 的路由,因而最终导致数据包丢失,造成路由黑洞。要杜绝此类问题的发生,其实答案很明了,就是让 AS 中只运行 IGP 的路由器同时也拥有 BGP 的路由表即可。由于以上原因,在 BGP 路由传递中,有以下一条规则:当
45、 BGP 要将从 iBGP 邻居学习到的路由信息传递给其它邻居之前(这个邻居通常是 eBGP 邻居),这些路由必须在 IGP 路由表中也能学到,否则认为此路由无效而不能发给其它邻居。此规则称为 iBGP 与 IGP 路由同步。在上图环境中,在 R3 将从 iBGP 邻居 R1 学习到的路由传递给 eBGP 邻居 R5 之前,必须确定这条路由在自己的 IGP 路由表中也存在,否则不使用该路由。要查看路由在 IGP 路由表中是否存在,使用命令 show ip route 即可。注意,只有从 iBGP 邻居学习到的路由,才受 iBGP 与 IGP 路由同步规则的限制,如果路由是从 eBGP 邻居学习
46、到的,则不受此规则限制,并且此规则可以手工开启或关闭。BGP 同步默认是开启的,在 IOS 12.2(8)T 以及之后的版本默认都是关闭的。Path Attributes在默认情况下,到达同一目的地,BGP 只走单条路径,并不会在多条路径之间执行负载均衡。对于 IGP 路由协议,当有多条路径可以到达同一目的地时,则根据最小 metric 值来选择最优路径,而 BGP 存在多条路径到达同一目的地时,对于最优路径的选择,BGP 并不会以 metric 值大小为依据,BGP 对于最优路径的选择,需要靠比较路由条目中的 Path Attributes,即路径属性,只有在比较多条路由的属性之后,才能决定
47、选择哪条为最优路径。BGP 的每条路由都带有路径属性,BGP的路径属性可以划分为以下四类: 公认强制 (Well-Known Mandatory)www.china-第 15 页共 226 页公认自选 (Well-Known Discretionary)可选可传递 (Optional Transitive)可选不可传递(Optional Nontransitive)对于各属性的各特征如下:公认强制 (Well-Known Mandatory)对于任何一台运行 BGP 的路由器,都必须支持公认强制属性,并且在将路由信息发给其它 BGP 邻居时,必须在路由中写入公认强制属性,这些属性是被强制写入路
48、由中的,一条不带公认强制属性的路由被 BGP 路由器被视为无效而被丢弃,一个不支持公认强制属性的 BGP,是不正常的,不合法的 BGP。BGP 路由必须携带的公认强制属性有三个:Origin,Next_Hop,AS-path。公认自选 (Well-Known Discretionary)公认自选属性并不像公认强制属性那么严格,任何一台运行 BGP 的路由器都必须支持公认自选属性,必须理解和认识公认自选属性,但是为路由写入公认自选属性并不是必须的,是否要为路由写入公认自选属性可以自由决定,为路由写上公认自选属性之后,所有 BGP 路由器都能认识和理解,并且都会自动保留和传递该属性。可选可传递 (
49、Optional Transitive)并不是所有运行 BGP 的路由器都能理解和支持可选可传递属性,路由的可选可传递属性是任意写入的,其它 BGP 路由器并不一定能理解,也并不一定能保留和传递该属性,但是当为路由设置了可选可传递属性后,可以明确要求 BGP 路由器保留和传递该属性。可选不可传递(Optional Nontransitive)www.china-第 16 页共 226 页只有特定的 BGP 路由器才理解和支持可选不可传递属性,并且可选不可传递属性理论上是不能手工设置的,即使手工设置了可选不可传递属性,这些属性也不能任意传递,只可以传递到特定的 BGP 路由器。以下是一些常用 BGP 属性的介绍:1Origin(公认强制属性):在路由器之间建立 BGP 邻居之后,邻居之间只能相互传递 BGP 路由表中的路由,在初始状态下,BGP 的路由表为空,没有任何路由,要让 BGP 传递相应的路由,只能先将该路由导入 BGP 路由表,之后才能在