综述篇 1 BGP 综述 /2 基础篇 7 contents 目录 BGP 基础 /8 BGP 属性简介 /15 深入讨论 19 网络之路 Route to Network BGP 专辑 2008 年第二季度总第 8 期 2008 年第二季度总第 8 期 BGP FAQ/20 团体属性 /44 BG
|
|
|
- 良 茹
- 7 years ago
- Views:
Transcription
1 网络之路 Route to Network BGP 专辑 2008 年第二季度总第 8 期
2 综述篇 1 BGP 综述 /2 基础篇 7 contents 目录 BGP 基础 /8 BGP 属性简介 /15 深入讨论 19 网络之路 Route to Network BGP 专辑 2008 年第二季度总第 8 期 2008 年第二季度总第 8 期 BGP FAQ/20 团体属性 /44 BGP 路由聚合 /51 BGP 路由过滤 /62 RR 联盟及同步/71 BGP 选路解析 /91 BGP Graceful Restart/105 常用 BGP AS_PATH 正则表达式应用 /111 MBGP 扩展 /116 网络应用 127 BGP 网络性能优化浅析 /128 BGP 流量负载分担规划 /131 测试方法 141 BGP 测试工具及测试仪器介绍 /142 BGP 性能测试方法 /153 最新进展 165 BGP 最新发展 /166 BGP 新特性 /183
3 综述篇 [ 综述篇 ]
4 网络之路 ROUTE TO NETWORK BGP 综述 文 / 朱皓 BGP 的出现 要全面了解 BGP, 首先我们要回答以下看上去很简单的问题 : 为什么需要 BGP, 也就是说 BGP 是如何产生的, 它解决了什么问题 带着以上问题, 我们先简单的回顾一个路由协议发展的轨迹 首先路由的实质是描述一个网络结构的表达方式, 路由表其实是一个结果的集合 在早期的 ARPANet 网络时代, 网络规模有限, 路由数量也不大, 因此所有的路由器可以维护整个网络拓扑, 那时候使用的路由协议叫 GGP(Gateway-to-Gateway Protocol) GGP 自然成为第一个内部网关协议 (IGP) 在 1980 年左右 当时的网络管理者遇到了与今天类似的问题 : 网络规模扩大导致的路由数量不断增长 为了解决这种网络规模的增长问题, 提出了自治系统的概念 (AS), 也可以叫做路由管理域 在 AS 内部使用一种路由协议, 然后在 AS 之间使用另一种路由协议 这样做的好处显而易见, 不同的网络可以自己选择 IGP 协议, 然后再通过一个统一的 AS 间协议进行互连就可以了 在 IGP 的发展领域中, 先是 RIP 成为 IP 路由的主流, 后期发展出更高级的 IGP 协议包括 OSPF 和 ISIS, 这些协议自动化程度更高 更智能更可靠 而 IGRP 和 EIGRP 是 CISCO 的私有协议, 也是属于 IGP 的范畴 同一个 AS 的路由器间是有相互信任关系的, 而且这些路由器往往由同样的管理人员维护, 因此 IGP 的自动发现和路由计算信息泛洪处于完全开放的状态, 人工干预的行为是比较少的 不同 AS 互相连接的需求, 推动产生了外部网关协议 (EGP),EGP 的主要目的是在不同的 AS 之间传递路由协议 而不同的 AS 之间往往是直接相连, 大多数 AS 互联行为只涉及少量的边界路由器 (ASBR), 所以 EGP 的设计也非常简单 EGP 的 RFC827 发布于 1982 年, 看上去似
5 综述篇 乎早于 RIP 的第一个标准 FRC1058, 但其实在 RFC1058 之前,RIP 已经被广泛的使用 在当时, RIP+EGP 成为一种标准的路由组合 EGP 被设计的如此简单, 以至于很快就不能满足网络管理的要求 EGP 单纯的发布网络可达信息, 不做任何优选, 也没有考虑环路避免 有人甚至认为 EGP 算不上是一个路由协议, EGP 的众多缺陷, 最终导致被 BGP 所取代 BGP 的第一个 FRC1105 是 1989 年发布的, 和 EGP 相比, BGP 更像是一个路由协议, 具有很多路由协议的特征, 比如解决环路问题 收敛问题 触发更新等等 就像是不同的企业有各自的企业文化和标准, 但是企业间的交往却要遵循统一的行为规范和标准一样 对于 AS 间的路由交互, 也必须有一个统一的标准 BGP 相比 EGP 的众多优势, 使 BGP 成为唯一的外部网关协议, 并广泛的使用在互联网上 综上所述,BGP 是为了替代 EGP 而出现的一个外部网关协议, 它必须能够进行路由优选 路由环路的避免 能够更高效率的传递路由和维护大量的路由 因为 BGP 部署在不具有完全信任关系的 AS 之间, 因此需要 BGP 有丰富的路由控制能力, 并且可以通过一些简单统一的方法对 BGP 进行扩展 BGP 的发展 BGPv1(RFC1105) 定义了 BGP 最基础的一些协议特征 BGP 在 AS 间传递路由, 因此它非常重要 为了保证 BGP 的可靠传输, 使用了 TCP 作为传输层协议 使用 TCP 的好处是显而易见的, BGP 可以利用 TCP 现成的可靠性传输机制 重传 排序等机制来保证协议报文交互的可靠性 对于 TCP 扩展带来的好处也可以被继承, 比如 TCP 的 MD5 认证就可以为 BGP 所用 BGP 是建立在两个不同的 AS 间, 存在信任问题, 所以 BGP 不能通过自动发现, 而是需要手动配置邻居, 使用指定地址建立 TCP 关系 与 AS 外部节点建立的 BGP 关系叫做 EBGP 关系, 与 AS 内部节点建立的 BGP 关系是 IBGP 关系 BGP 最重要的一个概念就是使用 AS 号来解决 AS 间的环路问题, 如果收到某个路由信息携带了自己的 AS 号, 那么说明这个路由是已知路由, 就不再处理它 如果 AS 号重复, 那么说明出现了路由环路 在 BGPv1 中并没有 AS-path 的概念, 这个概念在 BGPv2 中被明确下来 BGP 从 v1 v2 v3 到现在的 v4, 也是不断地进行改良 BGP4+ 则主要是进行了多协议 BGP 的扩展, 也叫 MP-BGP 关于 MP-BGP 的概念不是本季刊的讨论内容 在 AS 内部, 因为没有 AS 号的变化, 防止环路需要采用其他的方法 BGP 规定从 IBGP 邻居学习到的路由不会传递给另一个 IBGP 邻居, 简单地说就是 IBGP 间路由只传一跳, 路由只传递一次当然就不存在成环的问题 同时就要求 AS 内部的所有路由器都要两两建立 IBGP 关系, 这就是 BGP 技术中的 BGP 全连接 全连接在大型网络中是不可想象的, 因此后来衍生出路由反射器和 BGP 联盟两种技术 (RFC1966 和 RFC1965) 路由反射器是在 AS 中指定一个节点作为反射器, 所有的其他节点都与反射器建立 IBGP 关系, 反射器作为一个中间节点, 在其他任何两个 IBGP 间传递路由 所以反射器从理论上讲, 在传递路由的时候, 不应该改变路径属性信息, 否则
6 网络之路 ROUTE TO NETWORK 就破坏了 BGP 在 AS 内部避免环路的原则 但是基于实际应用的角度, 不同的厂商对反射器的功能做了很多特性, 需要 BGP 的部署者谨慎使用 BGP 联盟则是在 AS 内部做了重新规划, 把一个扁平化的 AS 又分为多个私有的 AS, 这样做的好处一方面可以分层的管理一个庞大的 AS, 另一方面通过层次的划分, 自然减少了全连接的需求 BGP 报文采用了 TLV 的结构, 这种结构是非常利于扩展和向下兼容的 所以, 随着网络的发展, 产生了大量关于 BGP 扩展的 RFC, 这更使得 BGP 成为永葆青春的外部网关协议 从最初的 BGPv1 到 BGPv4, 协议报文的种类和格式都做过调整, 但是 BGP 的设计一直以简单明了作为原则 从 BGPv2 开始, 消息种类确定为 4 种 建立 TCP 连接后, 使用 OPEN 消息触发 BGP 关系建立过程, 使用 UPDATE 消息进行路由的发布和撤销, 使用 NOTIFICATION 消息通告出现错误, 使用 KEEPALIVE 消息对 BGP 关系进行保活 可见 BGP 的路由通告是触发更新模式的, 只有更新的时候才发送 UPDATE, 所以, 需要 KEEPALIVE 消息对 BGP 关系进行保活 BGP 状态机也是在 BGPv2 开始被确定为 6 种 1990 年出现的 BGPv2(RFC1163) 是一个重要的分水岭 首次出现了 BGP 路径属性的概念, 而且其中对属性的分类方法沿用至今, 成为 BGP 路由策略的主要手段, 为各种对路由的过滤 标识 选择提供了多种多样的方法 路径属性分为 4 种, 最基本的就是公认必遵属性 顾名思义这类属性必须在发布路由的时候携带, 描述了所发布路由的一些基本信息, 包括 : 下一跳 AS_PATH 和 ORIGIN 下一跳用于路由计算 AS_PATH 用于环路避免,ORIGIN 则用于路由选择 在 BGP 中, 路由信息通过网络前缀的方式进行描述, 被叫做网络层可达信息 (NLRI, 本文后面有些地方使用了 BGP 路由 这个通俗的叫法, 以方便理解 ) NLRI 这个描述更贴切一些, 实际上 BGP 只传递了一些信息, 用于计算出路由, 所以 NLRI 必然是存在于 UPDATE 消息中 在 UPDATE 消息中, 路由信息通过路径属性 +NLRI 的方式表达出来 既然 NLRI 必须附加公认必遵的 3 种属性, 那么一个 UPDATE 只传递相同路径属性的 NLRI 信息, 这样实现就比较简单 公认必遵属性相对应的就是公认可选, 也就是说这些属性必须被所有的 BGP 路由器所识别, 携带与否是可以选择的 其他两种可选可传递属性和可选不传递属性, 很显然, 两种属性考虑到了协议的扩展性, 对于设备不识别的属性, 是可以透传或者忽略的 各种各样的属性, 一方面用于路由选择, 另一方面相当于给路由做了标志, 在不同的节点, 根据这些标志对路由做相应的过滤 修改等操作 也可以根据属性来实现一些 BGP 的扩展特性 正是因为 BGP 使用在不完全可信的路由管理域之间, 所以需要 BGP 具有对路由信息灵活的控制手段, 这是 BGP 最重要的特点之一 网络设备根据 NLRI 中的网络前缀和对应的路径属性, 进行路由计算, 计算有可能需要依赖 IGP 来完成 因为 BGP 关系可以建立在非直连的网络节点, 只要建立 TCP 连接的地址通过 IGP 可达, 就可以建立 BGP 关系并交互 NLRI 信息 另外,NLRI 对应的路径属性中携带了下一跳的信息, 下一跳也要通过 IGP 进行查找, 如果找不到到达下一跳的路由, 那么就说明无法到达发布 NLRI 的 BGP 节点, 因此该 BGP 路由处于 inactive 状态 很显然,inactive 的路由信息是不应该发送给其他任何一个对等体的 所以有必要在全局路由表之外, 保留一个 BGP 路由表, 通过这
7 综述篇 个表, 可以看到 BGP 路由决策的部分结果 在 BGP 实际的使用中, 还有一个同步的概念, 也就是 IGP 路由必须与 BGP 路由同步 前面已经提到 BGP 关系是可以在非直连邻居间建立的, 路由信息可以在 BGP 对等体之间传递, 但是没有配置 BGP 的中间链路节点, 并没有这些 BGP 路由信息 路由归根结底是为转发报文而服务的, 当报文转发到这些中间链路节点时, 会因为没有路由而被丢弃 这个现象很形象的被称为 BGP 黑洞 解决 BGP 黑洞其实很简单, 就是保证如果某个节点没有配置 BGP 的话, 必须可以通过 IGP 获得这些 BGP 路由信息, 这就叫 IGP 路由与 BGP 路由同步 在真实的网络设计中 BGP 黑洞是很少出现的, 因为如果 AS 是一个边缘 AS, 那么 BGP 多数只部署在 AS 连接其他 AS 的边界上 如果 AS 是位于多个 AS 中间的区域, 那么这个 AS 是一个核心区域, 其中所有的路由器都会部署 BGP 并且配置了 FULL-MASH 的 IBGP 关系 所以 BGP 黑洞是很少出现的特例, 因此当前大多数厂商的实现都是默认关闭了这种同步的检查 1991 年 RFC1267 定义了 BGPv3, 一个重要的补充是增加了连接的冲突处理机制, 当两个节点同时发起连接时,BGP ID 大的一方发起的连接会被保留 BGPv4(RFC1771) 最重要的改变是 BGP 终于由有类的路由协议成为一个无类的路由协议 这个改变源于有类地址的枯竭, 为解决这个问题,1993 发布的 RFC1520 定义了 CIDR (Classless Inter-Domain Routing) 而 BGP 作为唯一的 AS 间路由协议, 支持 CIDR 是必然的 最新关于 BGP4 的 RFC 是 4271, 其中对于一些细节进行了进一步的说明, 比如对 NEXT-HOP 属性的处理原则 事件和状态机以及 BGP 的路由决策流程等等 4271 相比于 1771 的变化还是比较多的, 详细情况可以参看 RFC4271 的附录 A BGP 协议基本概念并不复杂, 如果从 BGP 的使用场景和使用特点来看, 理解起来很容易 BGP 的困难主要在于部署时如何适应网络拓扑的要求, 和对路由进行控制, 因为 BGP 控制路由的手段非常多, 而且这些控制都是需要管理员定义和部署 各种特性和控制手段组合在一起使用时, 会互相影响 BGP 的扩展 前面提到了 BGP 的一些基本概念 : 基于 TCP 的可靠连接 触发更新 AS 内和 AS 间防止环路的技术, 通过各种属性实现的路由优选和路由控制策略 消息的类型等等 可以看出 BGP 的各种特征, 都是来源于 BGP 使用的场合, 需求决定了最终的实现, 协议不过是统一了实现的方法而已 关于 BGP 扩展的 RFC 非常多, 多数都是实现了不同的特性, 也有一些是对 BGP 的分析, 甚至是 BGP 部署方面的建议和经验 下面列出的只是关于 BGP 的小部分 RFC 而已 前面提到的 BGP 联盟出现在 RFC1965( 最新版为 RFC5065), 路由反射出现在 RFC1966( 最新版为 RFC4456) BGP 路由扩展团体属性出现在 RFC1997( 最新版本为 RFC4360)
8 网络之路 ROUTE TO NETWORK 路由刷新功能出现在 RFC2918, 路由刷新定义了一种新的 BGP 消息 Route-REFRESH, 使用这个消息可以要求对等体更新某个地址族的路由信息 RFC2439 定义 BGP 路由惩罚机制解决了路由不稳定对网络造成的影响 惩罚机制是通过两个定时器来实现的, 每次振荡会导致一个惩罚值的累加 如果超过某一个固定值, 该路由就不计算不发布, 处于抑制状态 RFC2842 定义了 BGP 携带能力集的方式 ( 最新版为 RFC3392), 通过在 OPEN 消息中的能力集字段, 可以在 BGP 建链阶段完成双方能力的通告, 并决定是否建立 BGP 关系和后续协议报文的处理 RFC2858( 最新版为 RFC4760) 定义了多协议的 BGP, 扩展以支持非 IPv4 的网络层可达信息 目前最重要的 MPLS VPN 技术就是通过 BGP 的多协议扩展, 实现了路由交互 RFC2385 定义了使用 TCP 的 MD5 保护 BGP 连接的方法, 而为了加强 key 的处理, 由 RFC3562 又做了进一步的分析 RFC4724 定义了 BGP GR, 在双主控和控制转发分离的设备上实现协议的平滑重启, 可以保证转发不中断 RFC4781 进一步定义了 MPLS 环境中的 BGP GR RFC1772 描述了 BGP4 在 Internet 上的使用方法, 包括给出了关于拓扑的建议和一些路由处理的过程 RFC4272 是研究 BGP 安全性的一个分析文档 RFC4451 甚至对 MED 属性进行了详细的分析, 给出一些实现的建议 对 BGP 的诸多扩展是为了适应不断发展的网络结构, 包括网络攻击的可能性 由这些 RFC 支撑着的 BGP 毫无疑问已经成为 Internet 上无法替代的一个路由协议, 而且有越来越复杂的趋势 笔者认为对于 BGP 的理解应该是基于应用的, 从上面的一些 RFC 就可以看出来,BGP 的协议文档中很多是来源于应用的实践 在今天的 BGP 技术中, 在 NLRI 上附加了很多增量的信息, 用于实现各种差异化的需求 好在 BGP 的协议基本构架决定了 BGP 是一个拥有良好扩展性和兼容性的路由协议 而且 BGP 技术可以说是一种模块化的技术, 在一个基本的协议构架上, 可以通过各种扩展增加模块以支持各种新的应用, 而且有可能允许不同组件的共存 在最新的草案中, 有一个是关于 BGP 能力集的动态发布 允许在一个已经建立的 BGP 关系上通过 OPEN 消息宣称自己支持新的能力集, 并且如果不支持该能力集, 可以忽略这个消息 并不会影响原有的 BGP 关系或路由通告 对 BGP 的理解过程是一个渐进的过程,BGP 的发展也是如此 还是套用刘宇在 IP 路由技术胶片最后写的那句话做结尾 : Routing is like a box of chocolate,you d never know what you are going to get
9 综述篇 [ 综述篇基础篇 ]
10 网络之路 ROUTE TO NETWORK BGP 基础 文 / 叶翀 概述 在开始之前, 假设让我们来给通信协议画一个简单的素描 抛开对上层协议和复杂应用的支持不谈, 通信协议最基本的功能是运行在两台或多台设备之间, 通过收集 发布 交换一些信息, 来为设备间的通信建立通道, 即实现支撑上层数据互通 为了实现通信协议这个基本功能, 需要解决三个问题 : 单台设备需要收集和存储哪些信息? 设备之间如何交互和通信, 来汇总出完整的信息? 信息汇总之后, 进行怎样的决策, 来得出通信通道? 对如上三个问题进一步分解, 可以得出 : 一 协议发布哪些信息? 协议需要哪些信息? 如何描述和存储这些信息? 二 与谁交换信息? 选择哪一个底层协议作为承载进行通信交互? 动态发现交换对象 邻居, 还是静态配置邻居? 邻居建立过程是怎样的? 三 如何交换信息? 交换信息报文格式如何? 报文格式怎么做可以具备比较好的扩展性? 四 如何从信息中决策出最佳通信通道? 五 其他必要的考虑通过这些问题, 我们将在下文描述 BGP 的简单框架 当然这些仅仅是框架, 它们只是 BGP 协议最基础的部分 BGP 最强大的功能在于灵活的策略和多协议扩展支持, 这些在本文中都没有涉及, 在本刊的其他文章中都会有详尽的介绍
11 综述篇基础篇 信息收集和存储 在 BGP 的前身 EGP 中, 引入一个概念, 叫做自治系统 (AS,Autonomous System) AS 指的是在统一技术管理下的一系列路由器 比如运行 OSPF 的一张网络, 或者运行 ISIS 的一张网络, 都可以作为一个 AS 实际网络中, 自治系统是人工规划的,AS 号由专门的机构分配 通常在 AS 内部运行某种 IGP 协议, 用于 AS 内部的路由学习和管理 ; 而在 AS 的边界运行 BGP, 用于 AS 之间交换路由信息 借助 BGP, 各 AS 可以独立选择自己适合的 IGP 协议, 并通过 BGP 来获得其它 AS 的路由信息 从这个用途来看, 对 BGP 来说, 需要做到以下几点 : 能够支持从各类 IGP( 包括直连路由 ) 引入路由信息 能够从这些数据中决策出最优路由 不论从哪类 IGP 引入, 将最优路由对外发布时, 采用统一的格式路由信息的引入过程不在本文的讨论范围内, 决策过程见本文第 5 节 我们来看看上面三点中信息的收集和存储问题 BGP 需要收集哪些信息, 来支撑下一步的决策? 最基本的是 IP 前缀和掩码 下一跳, 这是一条路由的最简描述, 任何一种路由协议都需要收集这些信息 为了支持路由优选, 需要考虑路由的优先级 ( 至少一种度量 ), 并记录路由的来源 ( 哪个 AS 发布, 什么方式引入 ), 这是我们需要收集的可供下一步决策的最小信息集合 后面我们会看到, 这些其实就是 BGP UPDATE 报文中的主要字段 IP 前缀和掩码对应 UPDATE 中的 NLRI, 下一跳对应 NEXT_HOP, 优先级对应 LOCAL_PREF 和 MED, 路由来源对应 AS_PATH 和 ORIGIN BGP 存储路由信息的数据库叫做 RIB,Routing Information Base 这个数据库分为三个部分 : Adj-RIBs-In, 保存 BGP Speaker 从邻居学到的路由信息, 即初始路由 Loc-RIB, 保存经过决策从 Adj-RIBs-In 选取的路由信息, 即最优路由 Adj-RIBs-Out, 保存 BGP Speaker 发给邻居的路由信息, 即发布路由上面三个数据库, 仅仅是协议关于 BGP 路由管理的概念性设想, 实际实现中, 不要求必须保留路由的三套拷贝 与谁交换信息 初步设想了单台设备需要收集和存储哪些信息之后, 我们来看看设备之间如何通信 考虑到 BGP 用在 AS 之间, 是作为大型网络之间接口的角色存在, 对报文传输的稳定性有很高的要求,BGP 选择了 TCP 作为承载协议, 使用端口号 179 由于 TCP 提供了稳定可靠的传输,BGP 不需要专门的机制来处理复杂的报文分片 重传 确认等细节
12 网络之路 ROUTE TO NETWORK M a r k e r L e n g t h T y p e 图 1 BGP 报文头 在 TCP 之上,BGP 报文头如图 1 所示, 共 19 个字节 承载不同 BGP 协议报文类型通过 Type 字段标识,Length 字段标识 BGP 消息的字节长度, 含 BGP 报文头, 虽然是 16Bit 数, 合法范围只从 19 到 4096 Marker 字段用来探测对端与本端是否 同步 承载协议确立为 TCP 之后, 下一个问题是, 采用普通路由协议的动态发现邻居方式呢, 还 是采用手工静态配置方式?BGP 采用了后者, 只要双方指定地址路由可达, 就可以建立邻居 这么做至少有两个好处 : 1 可以与对端设备用任何 IP 地址建立邻居, 而不限于某个固定的接口 IP 这样, 当两台 设备采用环回地址而非直连地址建立 BGP 邻居时, 即使主链路中断了, 也可以切换到备份链路 上, 保持邻居不断 这种稳定性正是 BGP 作为大型网络路由承载的必要特质 2 可以跨越多台设备建立邻居 当一个 AS 有多个设备运行 BGP 建立域内全连接时, 不必 每台设备物理直连, 只要用 IGP 保证建立邻居的地址可达, 即可建立全网连接, 减少不必要的 链路建设 同一个 AS 内, 设备之间的邻居叫做 IBGP(Interior BGP) 邻居, 不同 AS 间, 设备之间的 邻居叫做 EBGP(Exterior BGP) 邻居 运行 BGP 的设备叫做 BGP 发言者 (BGP Speaker), 相 互之间称作 BGP 对等体 (BGP peer) BGP 用来建立邻居的 OPEN 消息格式如图 2 所示 V e r s i o n M y A u t o n o m o u s S y s t e m B G P I d e n t i f i e r O p t P a r m L e n O p t i o n a l P a r a m e t e r s 图 2 OPEN 消息 10
13 综述篇基础篇 Version: 标识运行的 BGP 版本 如果一个对等体的版本比对方旧, 它会拒绝新版本的连 接, 于是对方降低版本号重新进行协商, 直到双方对版本达成一致为止 My AS: 邻居建立发起者的 AS 号 用来决定双方是 IBGP 邻居, 还是 EBGP 邻居 Hold Time: 对等体通过定期发送 KEEPALIVE 消息通知对端本端还在, 以保持邻居 由于 KEEPALIVE 纯粹是一个通信知会, 不需要携带什么信息, 因此 KEEPALIVE 报文实际上是不带数 据的 BGP 报文头 Hold Time 是设备收到一个 KEEPALIVE 之前允许经过的最大秒数 这个时间或 者是 0 秒 ( 不发送 KEEPALIVE), 或者是至少 3 秒 一般默认 KEEPALIVE 每 60 秒发送一次,Hold Time 为 180 秒 协商时, 采用 OPEN 消息中较小的那个 Hold Time 作为双方的 Hold Time BGP Identifier: 用来标识邻居的 IP 地址 Optional Parameters: 公布对一些可选功能的支持, 如认证 多协议支持等等 建立邻居时,BGP 先尝试与对等体建立一个 TCP 连接 如果 TCP 连接建立成功,BGP 发送一 个 OPEN 消息给对端, 并等待从对端发来的 OPEN 消息 收到一个 OPEN 消息以后,BGP 检查该消 息的所有字段, 如果没有发现错误, 则向对端发送一个 KEEPALIVE 消息并启动 KEEPALIVE 定时 器 收到 KEEPALIVE 消息, 则邻居建立 3 所示 : 当邻居检测到错误需要中断连接时,BGP 发送 NOTIFICATION 消息通知对端, 消息格式如图 E r r o r c o d e E r r o r s u b c o d e D a t a 图 3 NOTIFICATION 消息 相关错误码和含义的列表请参考协议, 这里不展开讨论 综上我们可以得出 BGP 四种消息报文的用途 :OPEN 用来建立邻居,KEEPALIVE 维持邻居, UPDATE 发布路由信息,NOTIFICATION 通知对端检测到错误 BGP 建立邻居采用有限状态机, 共有 6 种状态 BGP 的运行流程就是在这 6 种状态之间根据资源和事件的要求作转换 它们分别是 : 1.Idle BGP 协议初始时是处于 Idle 状态 在这个状态时, 系统不分配任何资源, 也拒绝所有进入的 BGP 连接 只有收到 Start Event 时, 才分配 BGP 资源, 启动 ConnectRetry 计时器, 启动对其它 BGP 对等体的传输层连接, 同时也侦听是否有来自其它对等体的连接请求 2.Connect 这个状态下,BGP 等待 TCP 完成连接 若连接成功, 本地清空 ConnectRetry 计时器, 并向对等体发送 OPEN 报文, 然后状态改变为 OpenSent 状态 ; 否则, 本地重置 ConnectRetry 计时器, 侦听是否有对等体启动连接, 并移至 Active 状态 11
14 网络之路 ROUTE TO NETWORK 3.Active 这个状态下, B G P 初始化 T C P 连接来获得一个对等体 如果连接成功, 本地清空 ConnectRetry 计时器, 并向对等体发送 OPEN 报文, 并转至 OpenSent 状态 4.OpenSent 这个状态下,BGP 等待对等体的 OPEN 报文 收到报文后对报文进行检查, 如果发现错误, 本地发送 NOTIFICATION 报文给对等体, 并改变状态为 IDLE 如果报文正确,BGP 发送 KEEPALIVE 报文, 并转至 OpenConfirm 状态 5.OpenConfirm 这个状态下,BGP 等待 KEEPALIVE 或 NOTIFICATION 报文 如果收到 KEEPALIVE 报文, 则进入 Established 状态, 如果收到 NOTIFICATION 报文, 则变为 Idle 状态 6.Established 这个状态下, BGP 可以和其他对等体交换 UPDATE,NOTIFICATION,KEEPALIVE 报文 如果收到了正确的 UPDATE 或 KEEPALIVE 报文, 就认为对端处于正常运行状态, 本地重置 Hold Timer 如果收到 NOTIFICATION 报文, 本地转到 Idle 状态 如果收到错误的 UPDATE 报文, 本地发送 NOTIFICATION 报文通知对端, 并改变本地状态为 Idle 如果收到了 TCP 拆链通知, 本地关闭 BGP 连接, 并回到 Idle 状态 综上, 我们可以画出 BGP 的有限状态机如图 4 所示 : TCP Failed Active Connect-Retry Timer expiry TCP Failed Connect Connect-Retry Timer expiry TCP Failed TCP Established TCP Established Others Start Others OpenSent Error Idle Receive correct OPEN Error Error KEEPALIVE Timer expiry OpenConfirm Receive correct KEEPALIVE Establieshed Receive correct KEEPALIVE, UPDATE 图 4 BGP 有限状态机 如何交换信息 邻居建立后,BGP 采用 UPDATE 消息来发布路由或撤销路由 UPDATE 消息由三部分组成 : Unfeasible Routes: 之前发布过, 不再有效的路由 12
15 综述篇基础篇 Path Attributes: 路由信息的附加描述, 是 BGP 用以进行路由控制和决策的重要信息 NLRI: 由一个或多个 IP 地址 / 前缀长度组成 其格式如图 5 所示, 一个 UPDATE 消息中可以携带多条路由信息 : 由于 BGP 在报文格式中普遍采用了 TLV(Type,Length,Value) 的形式, 而不是固定长 度固定字段的形式, 使得 BGP 具有非常好的扩展性, 在后期追加新类型支持新业务时, 只需要 定义新的类型编码和值, 报文不需要做任何更改 关于 BGP 属性的具体类型和含义, 请参考 BGP 属性简介 一文 U n f e a s i b l e R o u t e s L e n g t h ( 2 o c t e t s ) W i t h d r a w R o u t e s ( v a r i a b l e ) T o t a l P a t h A t t r i b u t e L e n g t h ( 2 o c t e t s ) P a t h A t t r i b u t e ( v a r i a b l e ) N e t w o r k L a y e r R e a c h a b i l i t y I n f o r m a t i o n ( v a r i a b l e ) 图 5 UPDATE 消息决策过程上面我们描述了 BGP 发言者之间交换哪些信息 决策过程选择路由用于下一步的发布, 应 用本地策略信息库 PIB(Policy Informaiton Base) 来处理 Adj-RIB-In 中的路由 决策过程 的输出是发布到所有邻居 ( 包括 IBGP 和 EBGP) 的路由信息集合, 被选的路由存储在 Adj-RIB- Out 中 决策过程分三步来进行 : 1. 当本地 BGP 发言者接收到 EBGP 邻居发布过来的更新 替代或撤销路由时, 为每一条路由 计算优先级, 并将最高优先级的路由通告到所有 IBGP 邻居 2. 在步骤一完成后激活 负责从到达目的地的所有路由中选择最好的路由, 同时安装每 条选中的路由到相应的 Loc-RIB 如果路由信息携带的下一跳路由不可达, 则将该路由排除在 这个决策过程之外 3. 在步骤二完成后激活 负责根据在 PIB 中的规则, 发布 Loc_RIB 中的路由到 EBGP 邻居的 每个对端 最优路由有三种情况 : 1. 对同一个目的地集合有路由的最高优先级 2. 是到目的地的唯一路由 3. 两条或两条以上具有相同优先级, 必须用更细的法则算出一条最优来 此过程称之为 Tie-Break 一般来说,BGP 计算路由优先级采用如下规则 : 1. 选择具有最高 LOCAL_PREF 值的路由 2. 如果 LOCAL_PREF 相同, 选择从本地 IGP( 含直连路由 ) 引入的路由 13
16 网络之路 ROUTE TO NETWORK 3. 如果 LOCAL_PREF 相同, 且没有本地引入路由, 则选择 AS_PATH 最短的路由 4. 如果 AS_PATH 路径长度相同, 判断 ORIGIN 值,IGP 优于 EGP,EGP 优于 Incomplete 5. 如果 ORIGIN 相同, 优选 MULTI_EXIT_DISC 值较小的 6. 如果 MED 也相同, 依次选择从 EBGP Confederation IBGP 发布的路由 7. 如果发布源也相同, 优选下一跳 IP 在本地路由表中 Cost 值最小的路由 8. 如果下一跳 Cost 也相同, 优选 CLUSTER_LIST 长度最短的路由 9. 如果 CLUSTER_LIST 长度也相同, 优选 ORIGINATOR_ID 最小的路由 10. 如果 ORIGINATOR_ID 长度也相同, 优选 ROUTER_ID 最小的路由 Tie-break 采用如下过程 : 1. 优选 MULTI_EXIT_DISC 值较小的. 2. 优选下一跳 IP 在本地路由表中 Cost 值最小的路由 3. 优选 EBGP 邻居发布的路由 4. 选择 BGP 标识符最小的邻居发布的路由 几点考虑 为优化协议,BGP 还在如下方面做了考虑 : 1. 减少路由振荡大型网络之间, 路有频繁振荡会带来严重的后果 因此 BGP 为尽可能减少路由振荡做了一些考虑 BGP 邻居超时时间很长, 通常是 180 秒 当应用环回地址建立邻居时, 即便链路中断, 只要备份链路能够及时发布切换环回地址路由, 邻居可以保持建立, 不引起振荡 BGP 规定, 如果需要撤销到一个目的地址的路由, 同时更新一个掩码不同的路由, 则应该把他们组合在一个 UPDATE 消息中 这样 BGP 可以一次处理, 不出现路由振荡 BGP 提供路由抑制机制 (Route flap damping), 它为每条路由分配一个动态的度量数字, 用来反馈路由稳定程度 当一条路由出现振荡, 就给他分配一个惩罚值 振荡越多, 惩罚值越高 如果惩罚值超出预设的门限, 该路由就不再对外发布 直到一段时间后惩罚值降低到可重新使用的门限值 2. 节省设备资源 在 BGP 向其他邻居发布路由时, 引入一个介于 0.75~1 的随机因子, 将该因子分别与每对邻居间发布路由的最小时间间隔相乘, 从而得出不同的路由发布最小时间间隔, 以避免路由都挤在一个时间发布占用太多的带宽和 CPU BGP 支持路由聚合, 可根据某些属性进行灵活的聚合, 减少路由发布条目 引入路由反射器 IBGP 要求全链接, 引入反射器后, 每台 BGP 发言者只需要与 BGP 反射器建立邻居,BGP 反射器会把从 IBGP 邻居学到的路由发布给其他 IBGP 邻居, 以节省开销 14
17 综述篇基础篇 BGP 属性简介 文 / 叶翀 属性分类 BGP 属性是 BGP 进行路由决策和控制的重要信息 它可以分为如下两大类四小类 : 1. 公认属性 公认强制 (Well-known mandatory) 公认自选 (Well-known discretionary) 公认属性是所有的 BGP 都必须识别支持的属性 其中, 公认强制属性是 BGP UPDATE 消息中必须包含的必要部分 公认自选则是自由选择的部分 2. 可选属性 可选转发 (Optional transitive) 可选非转发 (Optional non-transitive) 可选属性并不要求所有的 BGP 都识别 如果属性是可选转发的, 那么, 即使 BGP 不能识别该属性, 也要接受该属性并将其发布给它的对端 而如果属性是可选非转发的,BGP 可以忽略包含该属性的消息并且不向它的对端发布 属性详述 常见的 BGP 属性如下 : 1.ORIGIN ORIGIN 标示路径信息的来源, 是公认强制属性 ORIGIN 可以是以下三种值 : IGP: 网络层可达信息来源于 AS 内部 EGP: 网络层可达信息通过 AS 外部学习 INCOMPLETE: 网络层可达信息通过别的方式学习在路由优选时,ORIGIN 中,IGP 优于 EGP,EGP 优于 INCOMPLETE 2.AS_PATH AS_PATH 由一系列 AS 路径组成, 也是公认强制属性 AS-PATH 有两种类型 : 15
18 网络之路 ROUTE TO NETWORK AS_SET: 在 UPDATE 消息中的路由经过的 AS 的无序集 AS_SEQUENCE: 在 UPDATE 消息中的路由经过的 AS 的有序集当 BGP 发言者发布路由给 IBGP 邻居时,BGP 不修改路由的 AS_PATH 属性 当 BGP 发言者发布路由给 EBGP 邻居时, 对 AS_PATH 做如下修改 : 1) 如果 AS_PATH 的第一个路径段是 AS_SEQUENCE 类型, 本地系统应该把自己的 AS 号作为序列的最后一个元素加在后面 ( 放在最左面 ); 2 ) 如果 A S _ P A T H 的第一个路径段是 A S _ S E T 类型, 本地系统应该添加一个新 AS_SEQUENCE 类型的路径段到 AS_PATH, 包括段的内部的自己 AS 号码 AS_PATH 属性主要用来作为路由选路的一种度量 路由经过的 AS 少则优先 它也可以用来避免环路 如果 BGP 发言者从 EBGP 邻居收到一条路由, 它的 AS_PATH 包含发言者自己的 AS 号, 就说明这是条环路路由, 将其丢弃 由于 BGP 发言者发布路由给 IBGP 邻居时, 并不将 AS 号加入 AS_PATH, 如果邻居将路由继续转发, 最终发言者自己再次收到路由时, 将无法判断是否环路路由 因此,BGP 要求 IBGP 对收到的路由不再转发 有鉴于此,AS 内部 BGP 发言者对路由要同步,IBGP 邻居必须逻辑上全连接建立邻居 3.NEXT_HOP 它定义了到达目的地下一跳的设备 IP 地址, 也是一个公认强制属性 NEXT_HOP 中 IP 地址的填写遵循如下规则 : 如果是发布给 EBGP 邻居,NEXT_HOP 填写 BGP 发言者的 IP 地址 如果是发布给 IBGP 邻居, 且路由来自 AS 内部, 则 NEXT_HOP 填写 BGP 发言者的 IP 地址 如果是发布给 IBGP 邻居, 且路由来自 AS 外部, 则 NEXT_HOP 保留原始的 AS 外部邻居的 IP 地址即 NEXT_HOP 指向路由发布者 4.MULTI_EXIT_DISC MULTI_EXIT_DISC 被用来区分同一个邻居 AS 的多个出口, 是一个可选非转发属性, 一般简写为 MED MED 只在 EBGP 发布的路由中产生, 接收者可以向它的 IBGP 邻居转发, 但不允许向它的 EBGP 邻居转发 假设一张网络连接了邻居 AS 的多个出口, 通过发布不同的 MED 给对端, 就可以控制进入网络的流量从 MED 值最小的那个出口进来 如图 1 所示,AS100 的边界路由器向 AS200 的邻居发布 /24 的路由时, 携带的 MED 分别是 10 和 20, 这样从 AS200 访问 /24 的流量会从左边那个路由器流入 AS100 16
19 综述篇基础篇 AS /24 MED= /24 MED=20 AS 100 图 1 MULTI_EXIT_DISC 5.LOCAL_PREF L O C A L _ P R E F 用来通知 A S 内部源发言者通告路由的优先程度, 是公认自选属性 LOCAL_PREF 只在 IBGP 发布的路由中使用, 它不会传递给其他 AS, 除非 AS 建立联盟 假设一张网络连接了两个不同的 AS 出口, 对某些特定业务, 需要控制对应的流量从特定的 AS 出口转发, 那么可以对 AS 边界的路由器应用 LOCAL_PREF,AS 内部的路由器将优选 LOCAL_PREF 高的路由 AS 200 AS /24 LP= /24 LP=100 AS 100 图 2 LOCAL_PREF 17
20 网络之路 ROUTE TO NETWORK 如图 2 所示,AS200 和 AS300 都向 AS100 发布了 /24 路由 通过在 AS100 边界路由器上应用 LOCAL_PREF, 可以控制 AS 内的流量选择左边的边界路由器作为出口 6.ATOMIC_AGGREGATE ATOMIC_AGGREGATE 是公认自选属性 有时 BGP 发言者会收到两条重叠的路由, 其中一条路由包含的地址是另一条路由的子集 一般情况下 BGP 发言者会优选更精细的路由 ( 前者 ), 但是在对外发布时, 如果它选择发布更粗略的那条路由 ( 后者 ), 这时需要附加上 ATOMIC-AGGREGATE 属性, 以知会邻居 它实际上是一种警告, 因为发布更粗略的路由意味着更精细的路由信息在发布过程中丢失了 7.AGGREGATOR AGGREGATOR 是可选转发属性, 它是 ATOMIC_AGGREGATE 属性的补充 如上所述, ATOMIC_AGGREGATE 是一种路由信息丢失的警告,AGGREGATOR 属性补充了路由信息在哪里丢失 它包含了发起路由聚合的 AS 号码和形成聚合路由的 BGP 发言者的 IP 地址 8.COMMUNITY COMMUNITY 是可选转发属性, 它是一组共享相同属性的目的地集合 例如对一组路由应用相同的团体属性值, 从而通过对团体属性进行路由策略来达到对一组路由进行控制的目的 对团体属性的详细介绍请参见本刊 BGP 团体属性 一文 9.ORIGINATOR_ID ORIGINATOR_ID 是可选非转发属性, 用于标识路由反射器 在讨论 AS_PATH 属性时, 我们知道 IBGP 要求邻居全连接, 对于大型网络来说, 两两建立邻居发布路由的开销是巨大的 于是 BGP 提供路由反射器这个角色, 每台 BGP 发言者只需要与 BGP 反射器建立邻居,BGP 反射器会把从 IBGP 邻居学到的路由发布给其他 IBGP 邻居, 以节省开销 通常人工选定一台或多台设备作为反射器, 反射器可以是多台, 形成路由层面的冗余结构 但是这样有一个问题, 就是 AS_PATH 在 AS 内部无法避免路由环路 为了防止引入路由反射器之后出现环路, 增加 ORIGINATOR_ID 这个属性来标识, 反射器在发布路由时加入 ORIGINATOR_ID, 当反射器收到的路由信息中包含自己的 ORIGINATOR_ID 时, 就检测到了环路 10.CLUSTER_ID CLUSTER_ID 是可选非转发属性, 用于标识路由反射器组 很容易猜到, 这个属性也是用来防止环路 18
21 深入讨论综述篇 [ 深入讨论综述篇 ] ] 19
22 网络之路 ROUTE TO NETWORK BGP FAQ 文 / 程锋章 BGP 有哪几种拓扑结构 BGP General FAQ BGP 有三种基本的网络拓扑结构 : 单口 AS (stub AS): 一个 AS 通过单一出口点到达其域外的网络 多归路非过渡 AS (Multihomed AS): 一个 AS 有多于一个到达外部网络的出口点但它不允许业务量通过它过渡 过渡 AS (transit AS): 一个 AS 有多于一个到达外部网络的出口点并且它允许被其他 AS 用于过渡业务量 Provider "A" Transit AS BGP Peers Provider "B" Transit AS AS 60 EBGP IBGP AS 50 TCP Connections Customer #1 AS 100 Stub As Stub As Customer #n AS 120 Multi-Homed AS 110 Customer #2 图 1 BGP 典型拓扑结构 从 BGP 的观点上来看整个 Internet 的拓扑就是由一系列单口 AS 多归路非过渡 AS 和过渡 AS 组成 的连通图 每个 AS 用 AS 号码来识别两个 AS 之间的连接形成一个路径,BGP 保证无循环域间选路路 径信息的汇集形成一棵路径树, 这棵路径树就是到达特定目的地的路由 20
23 深入讨论综述篇 如何学习 BGP BGP 是否很难学无法给出一个确切的说法, 但是可以肯定的是学习和使用 BGP 绝对很过瘾 BGP 在路由协议中的地位是非常高的, 在核心路由器上应用极多, 与之相关的特性如 L2vpn L3vpn 以及路由策略等比较多, 其主要是用来控制路由的发送和接收, 而 IGP 路由协议皆属于其可控制的对象, 良好的 BGP 基础也是学习 MPLS VPN 的重要基础之一 首先对 BGP 协议的设计思想比如防止环路 路由传播 出口流量控制 安全特性等有初步了解, 理解 BGP 协议的基础 TCP/IP routing Ⅱ 对各种报文 属性以及相关应用场景做了非常详尽的阐述, 值得刚开始好好学习 ; 在实际测试中可以先进行基础的配置和属性了解, 然后根据特性进行测试 同时在实际测试中体会我司与友商实现的差异, 有助于深入理解其本质 当然一门协议的掌握还是需要大量的积累和实践, 对于相关 RFC 的了解也必不可少,BGP 相关 RFC 如下 : RFC 4808,Mar 2007 Key Change Strategies for TCP-MD5 RFC 4797,Jan 2007 Use of Provider Edge to Provider Edge (PE-PE) Generic Routing Encapsulation (GRE) or IP in BGP/MPLS IP Virtual Private Networks RFC 4781,Jan 2007 Graceful Restart Mechanism for BGP with MPLS RFC 4761,Jan 2007 Virtual Private LAN Service (VPLS) Using BGP for Auto- Discovery and Signaling RFC 4760,Jan 2007 Multiprotocol Extensions for BGP-4 RFC 4724,Jan 2007 Graceful Restart Mechanism for BGP RFC 4684,Nov 2006 Constrained Route Distribution for Border Gateway Protocol/Multiprotocol Label Switching (BGP/MPLS) Internet Protocol (IP) Virtual Private Networks (VPNs) RFC 4698,Oct 2006 IRIS: An Address Registry (areg) Type for the Internet Registry Information Service RFC 4659,Sep 2006 BGP-MPLS IP Virtual Private Network (VPN) Extension for IPv6 VPN RFC 4632,Aug 2006 Classless Inter-domain Routing (CIDR): The Internet Address Assignment and Aggregation Plan RFC 4486,Apr 2006 Subcodes for BGP Cease Notification Message RFC 4456,Apr 2006 BGP Route Reflection: An Alternative to Full Mesh Internal BGP (IBGP) RFC 4451,Mar 2006 BGP MULTI_EXIT_DISC (MED) Considerations RFC 4384,Feb 2006 BGP Communities for Data Collection RFC 4382,Feb 2006 MPLS/BGP Layer 3 Virtual Private Network (VPN) Management Information Base RFC 4381,Feb 2006 Analysis of the Security of BGP/MPLS IP Virtual Private Networks (VPNs) RFC 4365,Feb 2006 Applicability Statement for BGP/MPLS IP Virtual Private Networks (VPNs) RFC 4364,Feb 2006 BGP/MPLS IP Virtual Private Networks (VPNs) 21
24 网络之路 ROUTE TO NETWORK RFC 4360,Feb 2006 BGP Extended Communities Attribute RFC 4278,Jan 2006 Standards Maturity Variance Regarding the TCP MD5 Signature Option (RFC 2385) and the BGP-4 Specification RFC 4277,Jan 2006 Experience with the BGP-4 Protocol RFC 4276,Jan 2006 BGP-4 Implementation Report RFC 4275,Jan 2006 BGP-4 MIB Implementation Survey RFC 4274,Jan 2006 BGP-4 Protocol Analysis RFC 4273,Jan 2006 Definitions of Managed Objects for BGP-4,This document obsoletes RFC 1269 and RFC RFC 4272,Jan 2006 BGP Security Vulnerabilities Analysis RFC 4271,Jan 2006 A Border Gateway Protocol 4 (BGP-4).This document obsoletes RFC 1771.( 最新的 BGP RFC, 废除了 1771) RFC 4098,Jun 2005 Terminology for Benchmarking BGP Device Convergence in the Control Plane RFC 3913,Sep 2004 Border Gateway Multicast Protocol (BGMP): Protocol Specification RFC 3882,Sep 2004 Configuring BGP to Block Denial-of-Service Attacks RFC 3779,Jun 2004 X.509 Extensions for IP Addresses and AS Identifiers RFC 3765,Apr 2004 NOPEER Community for Border Gateway Protocol (BGP) Route Scope Control RFC 3562,Jul 2003 Key Management Considerations for the TCP MD5 Signature Option RFC 3392,Nov 2002 Capabilities Advertisement with BGP-4.This document obsoletes RFC-2842( 废除了 2842). RFC 3345,Aug 2002 Border Gateway Protocol (BGP) Persistent Route Oscillation Condition RFC 3221,Dec 2001 Commentary on Inter-Domain Routing in the Internet RFC 3107,May 2001 Carrying Label Information in BGP-4(BGP 开始支持标签 ) RFC 3065,Feb 2001 Autonomous System Confederations for BGP RFC 2918, Sep 2000 Route Refresh Capability for BGP-4(BGP 支持路由刷新能力 ) RFC 2545,Mar 1999 Use of BGP-4 Multiprotocol Extensions for IPv6 Inter- Domain Routing RFC 2519,Feb 1999 A Framework for Inter-Domain Route Aggregation RFC 2439, Nov 1998 BGP Route Flap Damping RFC 2385,Aug 1998 Protection of BGP Sessions via the TCP MD5 Signature Option RFC 2270,Jan 1998 Using a Dedicated AS for Sites Homed to a Single Provider RFC 1998,Aug 1996 An Application of the BGP Community Attribute in Multihome Routing RFC 1997,Aug 1996 BGP Communities Attribute RFC 1930,Mar 1996 Guidelines for creation, selection, and registration of an Autonomous System (AS) 22
25 深入讨论综述篇 Internet RFC 1774,Mar 1995 BGP-4 Protocol Analysis RFC 1773,Mar 1995 Experience with the BGP-4 protocol RFC 1772,Mar 1995 Application of the Border Gateway Protocol in the RFC 1771, Mar 1995 A Border Gateway Protocol 4 (BGP-4) RFC 1745,Dec 1994 BGP4/IDRP for IP---OSPF Interaction BGP 的 RouterID 如何配置, 如何自动选择 全局 Router ID 可以在全局模式下通过配置命令 router id 来配置, 如果没有通过命令指 定, 系统会从当前接口的 IP 地址中自动选取一个作为路由器的 ID 号 其选择顺序是 : 优先从 Loopback 地址中选择最大的 IP 地址作为路由器的 ID 号, 如果没有配置 Loopback 接口, 则选取接 口中最大的 IP 地址作为路由器的 ID 号 只有在路由器的 Router ID 所在接口被删除或去除手工 配置的 Router ID 的情况下才会重新选择路由器的 Router ID 为了增加网络的可靠性, 建议将 Router ID 手工配置为 Loopback 接口的 IP 地址 BGP 的 Router ID 可以在启动 BGP 进程后通过 BGP 全局模式下的配置命令 router-id 来指定, 若 未配置则采用全局 Router ID 值 通过 BGP 的配置命令修改 RouterID 会导致已经建立的 BGP peer 会全部重启, 如 : bgp 100 router-id H3C COMWAREV5 平台支持手工配置 BGP 路由的基本使用原则有哪些 BGP 路由往往很多, 但是并不是都会进行转发处理, 大概有如下几条规则 : 1) 多条路径时,BGP Speaker 只选最优的给自己使用, 当然也可以设置负载分担, 负载分担请见本文 ECMP 章节 ; 2) BGP Speaker 只把自己使用的路由通告给相邻体, 也就是说本地 BGP 路由表里面不是最优的路由不会再进行转发处理等操作 ; 3) BGP Speaker 从 EBGP 获得的路由会向它所有 BGP 相邻体通告 ( 包括 EBGP 和 IBGP), 当然路由不会再从原路发送回去 ; 4) BGP Speaker 从 IBGP 获得的路由不向它的 IBGP 相邻体通告 ( 反射和联盟可以解决这个问题 ); 5) BGP Speaker 从 IBGP 获得的路由默认会向它所有 EBGP 相邻体通告 ; 若配置了同步, 是否通告给它的 EBGP 相邻体要依 IGP 和 BGP 同步的情况来决定 BGP 路由协议是如何避免路由环路的 BGP 不同于其他 IGP 协议, 其路由都包含了丰富的路由属性, 并通过路由属性来对路由进行过滤, 其中一个属性为 AS_PATH, 该属性为该路由经过的所有 AS 的序列, 这样对于收到的路由, 通过对 AS_PATH 进行检查, 如果发现自身的 AS 号已经出现在 AS_PATH 属性中, 那么就表示自身发布的路由又重新回到自己所处的 AS 中, 已经出现了路由环路, 这时就会丢弃接收到的路由, 从而避免继续对外发布路由, 导致环路产生 23
26 网络之路 ROUTE TO NETWORK 当然还可以参考上面的 BGP 使用原则, 比如 BGP 从 IBGP 收到的路由不继续往 IBGP 邻居发送, 这也是协议上避免环路的一种方法 ( 反射路由的处理类似, 请参看后续章节 ) 正常情况下 BGP 会丢弃 AS_PATH 中包含自身 AS 号的路由 对于特定情况下导致的 AS 号重复的合理环境, 可以通过如下命令来进行控制 peer { group-name peer-ipv4-address } allow-as-loop [ number ], 其中 number 取值范围为 <1-10>, 默认值为 1, 即允许接收路由的 AS_PATH 中包含一个自身 AS 号 当然, 在向 EBGP 邻居发布时, 也还要在 AS_PATH 最后再加上自身的 AS 号 有哪些原因会导致 BGP 连接建立不起来 有不少原因, 最常见原因如下 : 1) 两边 BGP peer 地址不可达, 一般是底层原因或者缺少可达的路由, 可以使用扩展的 ping 命令检查 TCP 连接是否正常, 由于一台路由器可能有多个接口能够到达对端, 应使用 ping -a ip-address 命令指定发送 ping 包的源 IP 地址 2) 对等体 IP 地址和 AS 配置错误, 常为大意所致 ; 3) OPEN 报文协商失败,OPEN 报文需要协商 BGP 版本 Holdtime RouterID 以及可选项参数 ( 包括各种能力参数 ) 等 ;H3C COMWAREV5 平台实现当接受到不支持的能力参数时候直接进行忽略而不影响建立连接 ; 4) BGP 的 MD5 验证配置错误 ; 5) BGP 的 RouterID 冲突 ; 6) 联盟与非联盟之间的 BGP 连接配置错误 ; 7) 错误报文导致连接中断, 比较少见的如 BGP 的 Marker 值出现错误 ; 8) 还有一些比较特殊的情况, 请参考下文 有哪些排错手段针对 BGP 连接建立不起来的情况 有不少方法, 最常见方法如下 : 1) 首先打开调试开关 deb bgp X.X.X.X all 开关, 确认状态机在哪一步出现错误 ; 2) 如果 BGP 状态始终在 active 状态徘徊, 表示 TCP 建立不起来, 首先排除底层不通和路由不可达的情况 ; 3) 如果 BGP 状态始终在 active 状态徘徊, 其次排除 BGP 的 MD5 验证问题 ; 4) 如果 BGP 状态始终在 active 状态徘徊, 最后特殊配置问题, 比如 IBGP 的 connect-interface 或者 EBGP peer 的 ebgp-max-hop 等, 见下文 ; 5) 如果是 Open 报文协商错误, 通过调试开关,H3C COMWAREV5 平台能够很方便的查看到具体的错误类别和信息, 然后根据错误提示采取具体措施 Open 报文协商时候发现不可识别或不支持的能力怎么办 在实际应用过程中,H3C 设备在与友商设备进行 BGP 能力协商过程中遇到无法识别和支持的能力参数, 比如有的是最新 RFC 规定而我司没有实现的, 有的是友商自定义的能力, 在类似情况处理过程中会忽略无法识别的能力, 打出信息并继续建立邻居 24
27 深入讨论综述篇 在 RFC 2842 中 BGP 协议要求 BGP speaker 在收到的 OPEN 报文中带有一个或多个不认识的可选项参数时, 它会中断 BGP 的会话连接, 然后对方会继续进行 BGP 连接, 此时不带上上述不认识的选项参数 不过此 RFC 已经被 RFC3392(Capabilities Advertisement with BGP-4) 所废除 根据 RFC3392 的要求, 当一个支持能力通告的 BGP speaker 向其 BGP peer 发送 OPEN 消息时, 其消息可以包含称之为能力的选项参数, 该参数列出它所支持的所有能力 : 1) BGP speaker 通过检查从其 BGP 对等体收到的 OPEN 消息中的能力列表来确定对方所支持的所有能力 ; 2) 如果 BGP speaker 支持上述能力列表中的一种能力后直接使用该能力并保持 BGP 连接, 这样不用发送 NOTIFICATION 并再次进行协商 ; 3) 如果 BGP speaker 在收到对方对于本端发出的 OPEN 消息的响应是 NOTIFICATION 并且其 Error Subcode 为 Unsupported Optional Parameter, 此时认为对方不支持先前的能力通告 本端将试图重新和对方建立连接, 此时本端发送的 OPEN 消息中将不再携带对端不支持的能力选项参数 Capabilities Optional Parameter 4) 如果一个 BGP speaker 支持某一特定能力发现对方不支持该能力, 该 BGP speaker 可以向对方发送 NOTIFICATION 消息并终止该会话 ; 此时的 ErrorSubcode 设定为 Unsupported Capability, 该 NOTIFICATION 消息将在 Data 域中包含引起会话中断的能力 而是否发送消息并中断会话, 取决于本端 BGP speaker, 并且一旦中断将不再重新自动连接 BGP Open 报文中有哪些能力参数 BGP 的能力参数类型有两种, 即多协议能力和路由刷新能力 ; 针对地址族的定义就比较多 了, 不同厂商实现也可能不一样 比如根据最新 RFC4761, 针对 VPLS 的能力已经定义为 25/65 (L2vpn 也是 25/65) 具体情况见表 1 表 1 Open 报文中的能力参数 CODE AFI SAFI IPv4 Unicast Multiprotocol(1) 1 1 IPv4 Multicast Multiprotocol(1) 1 2 IPv4 VPNV4 Multiprotocol(1) Label IPv4 Multiprotocol(1) 1 4 MVPN Multiprotocol(1) 1 66 L2vpn Multiprotocol(1) Ipv6 Unicast Multiprotocol(1) 2 1 IPv6 Multicast Multiprotocol(1) 2 2 IPv6 VPNv4 Multiprotocol(1) Label IPv6 Multiprotocol(1) 2 4 VPLS(RFC4761) Multiprotocol(1) Refresh Route Refresh(2) GR Graceful Restart(64) 4-AS 4-AS(65) Dynamic Capability Dynamic Capability(67) 25
28 网络之路 ROUTE TO NETWORK 使用 Loopback 口为什么无法建立 IBGP 邻居 当排除底层原因后, 发现 IBGP PEER 使用 loopback 口建立却无法建立 这是因为 BGP 连接建立首先要建立起两个 peer 之间的 TCP 连接, 而 TCP 连接的源地址缺省是路由器相应的出接口的 IP 地址, 所以必须要指定 TCP 连接的源地址为相应的 loopback 接口地址, 连接才能建立起来,peer X.X.X.X connect-interface 命令的功能就是用于指定 BGP 会话建立 TCP 连接使用的接口 直连 EBGP 使用 Loopback 口为什么无法建立连接 很简单, 上面的例子是 IBGP 邻居关系的建立, 如果使用 Loopback 口建立的是 EBGP 连接, 即使是两个直连接口也需要配置 ebgp-max-hop, 因为两个 loopback 口不是直连接口 一般情况下不推荐使用 loopback 建立 EBGP 邻居, 而一般是使用物理接口地址建立, 比如在 L3vpn 的各种跨域环境中 为什么非直连 EBGP 邻居无法建立 如果是 EBGP 邻居, 双方路由可达, 且 EBGP 连接在物理上不是直连的, 请检查是否配置了 peer 的 ebgp-max-hop 默认情况下,EBGP 邻居不配置这条命令, 如果不是直连, 必须配置 peer X.X.X.X. ebgp-max-hop, 该命令的默认值是 64 有哪些原因会导致 BGP 连接建立成功后再 down 掉 有不少原因, 最常见原因如下 : 1) BGP 连接建立好后, 在协商后的 holdtime 时间内收不到 keepalive 报文, 导致错误代码为 4/0 的错误 ; 2) 收到非法的 Update 报文导致 BGP 为了安全考虑自动中断连接, 并打印错误信息 ; 3) MTU 问题, 路由器会因为一些转发芯片限制或者人为的 MTU 设置, 导致经过多次封装后的 BGP 报文超过 mtu 而被丢弃 ; 4) MTU 和 QoS 设置不当可能导致大的 Update 报文被丢弃, 由于 TCP 的重传机制, 当发送多个大的 Update 报文时, 可能产生大量等待重传的 Update 报文, 从而抑制了 keepalive 报文的正常发送, 当连续收不到 keepalive 报文时,BGP 认为邻居已经 Down 5) 网络拥塞问题 : 网络拥塞可能导致 Keepalive 报文收发失常, 邻居状态不断改变 ; 另外, 如果到达邻居的路由是通过 IGP( 如 OSPF) 发现的, 网络拥塞可能导致该路由丢失, 从而使邻居间的连接中断 6) 设置原因, 导致 TCP179 端口号不可用 当然了,BGP 所支持的操作非常多, 还有很多主动的原因导致 BGP 会话重新启动 : 1) 对端关闭会话, 比如对 peer 配置 ignore 命令 ; 2) 如果配置了路由数目限制 (peer X.X.X.X route-limit), 超过指定数目后也会 down 掉 ; 不同机型其最大值也不一样 3) 远端 AS 改变 ; 4) 修改路由反射器客户机配置 ; 5) 修改对等体 / 组的某些策略或者能力 ; 6) 配置和反配置 BGP 的 Router ID; 26
29 深入讨论综述篇 7) 由联盟改为非联盟, 或反之 ;confederation nonstandard 也可导致 ; 8) 无法识别对端发送的 BGP 报文或者接受到错误的报文 9) 路由更新报文中的必遵属性缺失 为什么使用 network 命令无法将本地路由通过 BGP 发布出去 Network 命令是 BGP 各个视图下很强大的路由引入命令, 能过将各种 IGP 有效路由 静态路由 直连路由等引入 BGP 中发布出去 比如本地存在直连路由或者 IGP 协议路由 /24, BGP 视图下使用 network 命令, 目的是准备把这条路由传递到 BGP 路由表中, 但是查看本地 BGP 路由表里面没有这条路由 使用 BGP 的 network 命令发布路由, 前缀和掩码必须完全匹配才能正常发布 是一个 B 类网段地址, 如果没有 mask 参数的话, 缺省使用 16 位自然掩码, 而上述路由的掩码是 24 位, 所以必须在 mask 参数中配置 24 位地址掩码才能正常发布路由 BGP 配置模式下的 network 命令可以带 mask 参数, 也可以不带 不带 mask 参数的情况下缺省使用路由的自然掩码 在全局路由表中必须具有前缀和掩码都相同的路由, 才能正常发布 Peer Ignore 命令有什么作用 Peer ignore 命令用来人为地停止指定对等体 / 对等体组的激活会话, 并且清除所有相关路由信息, 禁止与指定对等体 / 对等体组建立会话,BGP 邻居将一直抑制在 idle 的状态, 会话一直处于无法建立的状态 如果该命令用来对于一个对等体组, 这就意味着大量与对端的会话突然终止 缺省情况下, 允许与 BGP 对等体 / 对等体组建立会话 在配置 peer ignore 命令之后, 查看 peer 状态如下 : <H3C>display bgp peer BGP local router ID : Local AS number : 100 Total number of peers : 1 Peers in established state : :35:59 Idle(Admin) Public-as-only 在 H3C COMWAREV5 平台中的用法 参看 peer public-as-only 命令用来配置发送 BGP 更新报文时不携带私有自治系统号 举个 例子, 使用策略给发送路由增加属性, 并针对 peer 使能该功能 : route-policy 1 permit node 0 apply as-path 查看对端路由表发现 : [H3C]display bgp routing-table BGP routing table entry information of /24: From : ( ) Original nexthop: AS-path : Origin : igp Attribute value : MED 0, pref-val 0, pre 255 State : valid, external, Not advertised to any peers yet 27
30 B G PFAQ 网络之路 ROUTE TO NETWORK 可以看到私有的 AS 号一个都没有去掉, 为什么了?H3C COMWAREV5 平台目前实现的规格如此, 只要有公有 as 号就不进行私有 as 的删除 如果在策略里面去 1000, 那么 5040 收到的路由 aspath 只有 200 BGP 如何发布默认路由 BGP 可以通过 peer default-route-advertise 和 default-route import 来控制缺省路由发布 Peer default-route-advertise 不需要本地存在缺省路由而直接向 peer 发布缺省路由, 而 default-route import 仅仅表示允许引入本地缺省路由, 意思是必须通过 import 方式引入存在本地路由表里面的 IGP 默认路由, 然后再配置 default-route import 才能使默认路由正确发布 为什么从直连 EBGP 邻居向 IBGP 邻居发布路由时路由会失效 在 BGP 中, 向 IBGP 和 EBGP 邻居发送路由时, 下一跳的处理是不同的 向 EBGP 邻居 ( 即在 AS 间传播 ) 发送路由时,next-hop 均改为该路由器的出口 IP 地址 ( 当下一跳修改前后的地址符合第三方下一跳时, 不做修改 ); 向 IBGP 邻居 ( 即在 AS 内传播 ) 发送路由时,next-hop 是不变的 由于 BGP 向其他 IBGP 邻居转发来自 EBGP 路由时不修改下一跳, 这样的话若 IBGP 邻居所处的设备没有到该下一跳地址的路由, 会导致该 IBGP 收到这条转发自 IBGP 邻居的 EBGP 邻居的路由后下一跳不可达, 导致路由失效 解决方案有多种 : 可以配置 next-hop-local, 这样收到 EBGP 路由再往 IBGP 邻居发送的时候会强制更改下一跳为自己的出接口地址 ; 自治域内所有的设备都配置 IBGP 邻居且要全链接, 通过 bgp 把下一跳也学过去 ; 通过 IGP 协议来保证自治域内的所有设备能够知道所有部的接口地址 为什么相同路由比较时候没有选择 MED 值小的路由 假设一个这样的场景, 三台 AS 号不一致的 MSR 之间分别建立了 EBGP 邻居关系, 其中 RTC 同时收到 RTA 和 RTB 发来的因特网路由 根据 RTC 的要求,RTA 将自己发送给 RTC 的路由设置 MED 值为 50, 而 RTB 将自己发送给 RTC 的 MED 设置为 100 RTC 希望选择 MED 值小的路由作为最佳路由, 从而对相同目的地来说, 把通过 RTA 的链路作为主链路, 而把通过 RTB 的链路作为备份链路 当时在 RTC 上面没有把 RTA 发送过来的路由选为最优, 为什么? BGP 在路由优选过程中考虑若干因素, 包括本地优先级 AS 路径长度 起点类型 MED 值等 在前几项都相同的情况下, 应选择 MED 值小的路由作为最佳路由 需要注意的是,MED 值默认只在同一个 AS 传来的路由之间才具备可比性 为了能够在不同 AS 传来的相同路由之间比较 MED 值, 从而选择 MED 小的路由作为最佳路由, 需要在 BGP 或者 BGP VPN 视图下配置命令 comparedifferent-as-med 28
31 B G PFAQ 深入讨论综述篇 为什么 OSPF 的路由引入到 BGP 中后 cost(med) 需要加 1 在 RFC4577(OSPF as the Provider/Customer Edge Protocol for BGP/MPLS IP Virtual Private Networks) 中有如下描述 : MED (Multi_EXIT_DISC attribute). By default, this SHOULD be set to the value of the OSPF distance associated with the route, plus 1 即 ospf 路由被引入到 BGP 中后 MED 值需要加 1 因为在 PE 上引入到 BGP 中再发布到对端 PE 上 OSPF 还原后就丢失了原来生成者的信息, 这条路由的原来生成者通过其他途径再收到这这条被还原的路由后, 如果进行了计算就会导致环路 MED 加 1, 被还原的路由 cost 会比原路由 cost 大, 能够在某种程度上避免环路 OSPF 多实例下 MCE 能力对 BGP MED 的影响 命令行 vpn-instance-capability simple 的作用并不是使能 vpn 能力, 而是使能了多实例 CE 的能力 ; 同时该能力使 MCE 不去检查 DN 位是否已经被置位 ( 当 DN 位被置位时说明这条 LSA 由 PE 发给 CE, 值得注意的是 DN 位只存在于 3 类 LSA) 比如不配置 vpn-instance-capability 时候, 引入到 BGP 多实例进程中的路由会携带下面类似属性 Ext-Community :<OSPF Domain Id: :0>, <OSPF AreaNum: RouteType: 5 Option: 1>, <OSPF Router Id: :0:0>,<RT: 1:1>, 上述扩展团体属性是 bgp 携带发给对端 PE 设备的, 用来让对端 PE 上的 OSPF 进程还原 LSA 的依据 ; 此时候设备就作为普通的 PE,PE 上 bgp 引入 ospf 路由时,med 的值等于 ospf 路由的 cost 加 1; [H3C]display bgp vpn vpn vpn-a routing-table BGP local router ID : Local AS number : 100 Paths: 1 available, 1 best BGP routing table entry information of /16: Imported route. From : ( ) Original nexthop: Ext-Community :<OSPF Domain Id: :0>, <OSPF AreaNum: RouteType: 5 Option: 1>, <OSPF Router Id: :0:0>, <RT: 1:1> AS-path : (null) Origin : incomplete Attribute value : MED 2, pref-val 0, pre 150 State : valid, local, best, Not advertised to any peers yet 29
32 网络之路 ROUTE TO NETWORK 当配置了 vpn-instance-capability simple 后, 本地路由器就不是 PE 了, 而成了 MCE, 这样所以 BGP 引入 OSPF 路由时, 本地 OSPF 就不会组装这些属性值给 bgp, 只是作为普通的引入, 处理,BGP 路由只会携带扩展团体属性 <RT:1:1>, 而引入的 ospf 路由的其他扩展团体属性则会丢失 ; 而这个时候 bgp 引入 ospf 路由时,med 的值等于 ospf 路由的 cost [H3C-ospf-1000] # ospf 1000 vpn-instance vpn-a vpn-instance-capability simple area network # [H3C-ospf-1000]display bgp vpnv4 vpn-instance vpn-a routing-table Total Number of Routes: 3 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / ? *> / ? *> ? [H3C-ospf-1000]display ospf routing OSPF Process 1000 with Router ID Routing Tables Routing for Network Destination Cost Type NextHop AdvRouter Area /24 10 Transit Routing for ASEs Destination Cost Type Tag NextHop AdvRouter /16 1 Type /24 1 Type /32 1 Type Total Nets: 4 Intra Area: 1 Inter Area: 0 ASE: 3 NSSA: 0 如何实现 BGP 多进程和网络迁移 众所周知, 一个路由器只支持一个 BGP 进程, 有着唯一的 AS 号, 但是在某些特殊情况下 比如网络迁移更换 as 号的时候为了保证网络切换的顺利, 需要一些特性来支持, 具体可以参看 BGP Support for Dual AS Configuration for Network AS Migrations H3C COMWAREV5 平台通过 fake-as 命令为指定 PEER 设置一个假 AS 号来实现, 该特性 只针对 EBGP PEER 有效 该命令用来支持 BGP 邻居可以配置不同于当前由使能 BGP 协议时指 定的自治系统号, 配置 peer { group-name peer-ipv4-address } fake-as [ number ] 命令后, 该 peer 和本地建 peer 关系时, 要用 fake-as 号来代替本地的实际 as 号 示例说明一下, 本地 RTX 30
33 深入讨论综述篇 ( 本地地址 ) 的 BGP 配置如下 : bgp 100 router-id undo synchronization peer as-number 57 peer fake-as 88 那么 RTX 在向 建立连接时的本地 AS 将是 88, 而不是 100 与此同时,RTY( 本地地址 ) 配置 peer 时对应的 AS 号也应该为 88, 而不是 100 相关 BGP 配置如下 : bgp 57 peer as-number 88 实际应用中, 该命令通常和 peer { group-name peer-ipv4-address } substitute-as 结合使用 什么是 BGP 的同步原则 同步的目的是为了防止在某种情况下转发 黑洞 的出现, 起用同步功能后 BGP Speaker 在接收到 IBGP 邻居发过来的路由后都会查看该路由是否已经在 IGP 路由表中, 如果 IGP 路由表中 有这条路由,BGP 路由表才会将这条路由置为有效 ; 如果 IGP 路由表中没有该路由则 BGP 表中的该 条路由是无效的 如果关闭同步功能, 在收到 IBGP 邻居发来的路由更新后不检查 IGP 表是否有该 路由, 而直接将该路由置为有效, 这样的话在以下拓扑中就会出项问题 : AS /24 RTA AS300 RTE EBGP EBGP RTB IBGP AS200 RTD RTC 图 2 BGQ 同步原则在图 2 中,RTC 没有运行 BGP,RTD 关闭了同步功能 /24 从 RTA 始发, 传播方向为 :RTA >RTB >RTD >RTE RTB RTD RTE 收到该路由后将其置为有效, 这时如果 RTE 要转发一个目的 ip 为 的报文的话, 将会通过如下步骤转发 : 31
34 网络之路 ROUTE TO NETWORK step1:rte 将目的 ip 为 的报文发给 RTD; step2:rtd 接到此报文后将向 RTB 转发此报文 (RTB 已使用 next-hop-local), 但由于 RTD 与 RTB 的 IBGP 连接为逻辑连接, 因此去 RTB 的实际下一跳是 RTC, 于是又将此报文转发给 RTC; step3:rtc 收到此报文后查找路由表, 但没有找到匹配项, 因为 RTC 没有运行 BGP, 不知道 的下一跳, 所以此目的 ip 为 的报文在 RTC 处就被丢弃了! RTB RTC RTD 的 IGP 路由表中没有 /24 的路由, 如果开启同步功能的话,RTB 向 RTD 通告该路由时 RTD 不会将此路由置为有效,RTD 也不会向 RTE 通告该路由, 也就避免了上述问题的发生 在实际环境中 AS 转接路径中的所有路由器都运行 BGP, 也就不会出现上述问题, 因此可以将同步功能关闭 在具体实现上 H3C ComwareV5 平台可以支持同步, 默认为不同步 如何实现路由聚合 H3C COMWAREV5 平台有两种聚合方式, 如下 : 自动聚合功能通过 summary automatic 命令在 BGP/BGP VPN 视图下配置, 默认不使能 ; 自动聚合只聚合通过 import-route 命令引入的各协议路由 ( 对从邻居收到的 BGP 路由不生效 ), 且不对缺省路由进行聚合, 同时对参与聚合的 IGP 引入的子网路由会自动进行抑制, 从而减少路由选择信息的的数量 这种方法比较死板, 而且是按照自然掩码进行聚合, 有的时候不能满足需要 手工聚合通过 aggregate 在 BGP/BGP VPN 视图下配置, 该命令携带的参数比较多, 而且聚合时候灵活多边, 可以与路由策略巧妙结合在一起以达到精确控制的目的, 具体使用方法可以参看 MSR 路由器 BGP 聚合路由测试经验小结 aggregate 在手工聚合时候, 如果不设置掩码, 会以自然掩码进行聚合, 这一点尤其要注意 BGP 通过哪些改变来支持 IPv6 根据 RFC2858,BGP4+ 增加 2 个新属性 MP_REACH_NLRI MP_UNREACH_NLRI 用以支持 BGP4+, 在 update 报文中只有 next-hop aggregator NLRI 三个字段与 IPv4 有关 ; 继承了 BGP 的属性以及各种应用规则 目前 BGP4 + 的实现是否和 BGP 完全一致 目前 H3C COMWAREV5 平台全面支持 IPv6 功能, 增加了对 BGP4+ 的支持, 目前重点的特性目前支持 BGP4+ 的团体和反射 单播 组播 路由聚合等功能 BGP4+ 是 BGP 协议的扩展用来支持 IPv6 地址族, 这实际上可以理解为 Multi-protocol Extensions for BGP-4(RFC2238) 针对 IPv6 的应用 但是因为下一跳长度等发生变化, 32
35 深入讨论综述篇 单纯的 IP 地址变化无法满足实际需求 为此, 在 UPDATE 报文中增加了两项 optional nontransitive 的路由属性对对应地址族下的路由进行控制, 分别是 Multi-protocol Reachable NLRI - MP_REACH_NLRI (Type Code 14, 十六进制 :0x0E) 和 Multi-protocol Unreachable NLRI - MP_UNREACH_NLRI (Type Code 15, 十六进制 :0x0F) 其中 MP_REACH_NLRI 用来发布路由,MP_UNREACH_NLRI 用来撤销路由 BGP 路由如何迭代到等价路由 比如现在有两条缺省路由, 一条出接口 NULL0, 一条是迭代到 GE0/1.1 上的 BGP 路由在迭代时候如何处理? 为什么使用 display ipv6 relay-tunnel 查看迭代计数的时候, 只发现基于 Null0 的统计了迭代次数? 在 H3C COMWAREV5 平台实际处理中,BGP 路由都是迭代到缺省路由上了, 而不是直接迭代到 GE0/1.1 上 只不过有两条等价的缺省路由, 所以生成了学过来的每条 BGP 路由, 都多产生一条 Derived 路由, 从而形成等价路由 但实质是迭代到 ::/ 上了, 所以看到的迭代次数 55::/64 仅 1 次 (ipv6 route-static :: 0 55::1 迭代的 ),::/ 次 ( 所有的 BGP 路由 ) 目前 H3C COMWAREV5 平台实现 BGP 迭代到等价路由可以生成 8 条等价路由 BGP 的选路规则 BGP Route Decision FAQ H3C COMWAREV5 平台的选路规则如下 : 首先丢弃下一跳 (Next_Hop) 不可达的路由 ; 若配置了 Preffered-value 值, 优选值高的 ; 优选本地优先级 (Local_Pref) 最高的路由 ; 优选本路由器始发的路由 ; 优选 AS 路径 (AS_Path) 最短的路由 ; 依次选择 Origin 类型为 IGP EGP Incomplete 的路由 ; 优选 MED 值最低的路由 ; 依次选择从 EBGP 联盟 IBGP 学来的路由 ; 优选到下一跳 Cost 值最小的路由 ; 优选 Cluster_List 长度最短的路由 ; 优选 Originator_ID 最小的路由 ; 优选 Router ID 最小的路由器发布的路由 路由优选时候如何比较 AS-Path 在路由优选的时候, 比较的是 AS 的长度 ( 即个数 ), 并不比较其内容, 但是形成等价路由的时候必须要求其内容也一致 所以在进行 BGP 方案部署的时候可以通过使用路由策略来增加路由的 AS-path 或者替代 AS- 33
36 网络之路 ROUTE TO NETWORK path 内容等手段来实现指定路由的优选 负载分担等目的 在实际应用中经常可以碰到类似情 况 EBGP 路由的 LP 属性如何参与决策 从 EBGP 邻居收到的路由不会携带 LP( 本地优先级,IBGP 传递路由会携带此属性 ), 那么路 由如何参与决策? 答案是如果显示为空, 默认以 100 参与路由优选! 为什么在 BGP/BGP 多实例应用中, 没有优选 MED 值最低的路由 MED 属性仅在相邻的两个 AS 之间交换, 收到此属性的 AS 一方不会再将其通告给任何其他第三 方 AS 通过不同的 EBGP 学到的目的地址相同的多条路由时, 在其他条件相同的情况下, 优先选 择 MED 值较小者作为最佳路由 但需要注意的是,BGP 缺省只比较来自同一个 AS 的路由的 MED 属性值 H3C COMWAREV5 平台可 以通过 compare-different-as-med 命令使 BGP 比较来自不同 AS 的路由的 MED 属性值 BGP VPNV4 FAQ 标签分配方式除了传统的 IGP+LDP 之外还有哪些? 除了传统的 IGP+LDP 方式分发标签外,Label BGP 方法也是一种标签分配方式, 并且简单和 方便操作, 在跨域或者 C2C 环境中经常可以使用到这种典型配置, 通过 BGP 来分配标签, 相邻两 台路由器配置如下 : bgp 100 ipv4-family vpn-instance vpn200 peer as-number 200 peer route-policy asbr export peer label-route-capability bgp 200 undo synchronization peer as-number 100 peer route-policy RT2 export peer label-route-capability [RT1-bgp]dis route-policy asbr Route-policy : asbr permit : 0 apply mpls-label [RT2-bgp]dis route-policy RT2 Route-policy : RT2 permit : 0 apply mpls-label 使用 BGP 成功应用标签分配策略, 但是路由还是没有分配标签 如上配置 BGP 已经建立成功, 并且策略应用成功, 但是查看路由应该被选为最优的却不是最 优, 检查路由表又没有相同网段路由存在 : [H3C-GigabitEthernet0/1]dis bgp vpn vpn vpn200 routing-table label * / NULL/1025 * / NULL/1024 *>i / /
37 深入讨论综述篇 Label BGP 分配标签时候还要求其相应的接口使能 MPLS, 这样才能正确的形成下一跳的隧道, 并正确转发 在接口上使能和去使能 mpls 功能是测试 MPLS L3vpn 特性的一种很常见和重要的测试方 法 ; 而基于子接口的测试也是常发现问题的手段之一 最优 为什么优选的 vpnv4 路由插入到 VRF 中后, 唯一但不能形成最优 收到一条 vpnv4 路由, 下一跳可达, 而且在全局 VRF 路由表里中也是唯一, 但是始终无法达到 <H3C>display bgp vpnv4 all routing-table Total number of routes from all PE: 1 Route Distinguisher: 5060:1 Network NextHop In/Out Label MED LocPrf *>i / NULL/ Total routes of vpn-instance vpn200: 6 Network NextHop In/Out Label MED LocPrf * i / NULL/ *> / /3 0 VRF 中的路由在优选的时候, 对于普通 L3VPN,H3C COMWAREV5 平台的实现是必须保证其下一跳 的隧道的存在, 通过使用命令 display tunnel-info all 命令可以查看目的网段 的 隧道是否存在, 如果不存在则不会最优, 请检查标签分配 LDP 或者 BGP 的配置 VPNV4 路由经策略改变扩展团体属性不会生效 比如存在 vpn - a 和 vpn - b, 相应接受 VT 属性为 1:1 和 2:1 在 vpn - a 视图下通过 export route-policy 命令强制改变本 vpn 路由的 VT 属性增加 2:1, 但是 vpn - b 实例不会接受 到这些 vpnv4 路由 H3C COMWAREV5 平台目前实现是通过 vpnv4 获取的路由在刚开始接受时即会检查其 VT 属性然后 决定下发到哪些 vpn 中, 如果是在接受到 VPNV4 路由后再改变其 VT 属性不会影响以前所做的决定 当然, 如果是 VRF 本身获取的路由, 改变其属性会影响到路由下发其它 VRF 中 如何将 VPN 路由发布到其他 VPN 并进行策略控制 缺省情况下, 某个 VPN 路由不会发布到其他 VPN 中, 可以通过在 VPN 实例视图下配置 vpntarget 命令将当前 VPN 实例的路由发布到其他 VPN 实例或将其他 VPN 实例的路由引入到当前 VPN 实例 另外, 还可以使用系统视图 ----IP VPN 实例视图下的 import route-policy export routepolicy 命令, 以比采用扩展团体属性更精确地方式控制发布 VPN 实例路由 路由策略支持哪些过滤规则 BGP Route-Policy FAQ H3C COMWAREV5 平台支持丰富的路由策略来控制路由的接受和发送, 针对 bgp 对等体或者对等 体组有如下方式 : 35
38 网络之路 ROUTE TO NETWORK 1) as-path-acl,as 路径过滤控制列表 ; 2) ip-prefix,ip 前缀列表 ( 支持 IPv6, 即 ipv6-prefix); 3) route-policy, 路由策略 ; 4) filter-policy(advanced acl), 路由应用过滤策略 ; 其中 route-policy 又支持多种控制规则, 比如 : 1) if-match as-path, 匹配 AS 路径列表 ; 2) if-match community, 匹配团体属性列表 ; 3) if-match extcommunity, 匹配扩展团体属性列表 ; 4) if-match cost, 匹配路由 MED; 5) if-match interface,bgp 不支持这种过滤方式 ; 6) if-match mpls-label,bgp 支持, 通过 BGP 分配标签可以代替 IGP+LDP 模式, 在 L3vpn 的 c2c 以及跨域中得到大量应用 ; 7) if-match acl(advanced acl), 匹配访问控制列表 ; 8) if-match ip/ipv6, 匹配下一跳, 可以指定 acl 或者地址前缀列表 ; 9) if-match ip-prefix, 匹配地址前缀列表, 同样也支持 IPv6 路由策略的基本匹配规则有哪些 BGP 号称路由中的王者, 有很大一部分功劳归功于路由策略, 可以说是其左右臂膀之一 针对路由策略的使用, 各个厂商有其各自的规则 H3C COMWAREV5 平台的路由策略配置和使用都相对比较简单, 只要掌握以下几条基本原则, 相关的问题就会迎刃而解 1) 一个 Route-policy 的所有 NODE 之间是 " 或 " 的关系 2) 一个 NODE 内部所有 "if-match" 之间是 " 与 " 的关系 3) 一个 "if-match" 内部的所有参数之间是 " 或 " 的关系简单来说, 一个 Route-policy 可以由多个节点 (node) 构成, 每个节点是进行匹配测试的一个单元, 节点间依据顺序号 (node-number) 进行匹配 每个节点可以由一组 if-match 和 apply 子句组成 if-match 子句定义匹配规则, 匹配对象是路由信息的一些属性 同一节点中的不同 if-match 子句是 与 的关系, 只有满足节点内所有 if-match 子句指定的匹配条件, 才能通过该节点的匹配测试 apply 子句指定动作, 也就是在通过节点的匹配测试后所执行的动作 对路由信息的一些属性进行设置 一个 Route-policy 的不同节点间是 或 的关系, 系统依次检查 Route-policy 的各个节点, 如果通过了 Route-policy 的某一节点, 就意味着通过该 Route-policy 的匹配测试 ( 不进入下一个节点的测试 ) 而对于某些 if-match 子句, 后面可以跟多个同类的并列参数, 这些参数之间是 或 的关系, 即满足其中一个参数的值, 就满足了该 if-match 子句 例如下面的配置 : route-policy 1 permit node 1 if-match cost 20 if-match route-type internal external-type1 route-policy 1 permit node 2 if-match cost 30 36
39 深入讨论综述篇 在 route-policy 1 中配置了两个节点 node 1 和 node 2, 而在不同的 node 中配置了不同的 ifmatch 子句 很容易可以看出, 满足 node 1 的条件是 cost 为 20 并且路由类型为 OSPF 内部或者外部 type1 路 由 即对于 if-match route-type internal external-type1 来说, 由于 internal 和 externaltype1 是同一个 if-match 子句中多个并列参数, 所以它们之间是 或 的关系, 只要类型为 internal 或者 external-type1 的路由均算满足该 if-match 子句 而对于 node 1 来说, 它存在多个并列的 if-match 子句, 它们之间是 与 的关系, 所以必 须同时满足 if-match cost 20 if-match route-type internal external-type1 这两个条件才算正在通过 node 1 的测试 而对于 node 2 而言, 只有没有通过 node 1 检测的情况下才会发挥作用, 否则通过了 node 1 的检测就不再进入 node 2 的检测了 注 : 如果 node 中的 if-match 条件匹配成功且 if-match 的条件是 DENY, 则不论 node 配置的是 permit 和 deny 继续匹配下一个 node; 如果所有的 node 都没有匹配成功, 则按照 DENY 处理 对于 不存在的路由策略默认通过! 匹配了前缀列表, 为什么还是没有对端发送过来的路由 /8??? /8 R1 R2 图 3 BGP 前缀过滤示例 如图 3,R1 上配置如下 : Peer X.X.X.X ip-prefix 1 import ip ip-prefix 1 index 20 permit 很显然, 配置的前缀列表是错误的, 应该是 permit , 当进行前缀控制列表匹配的应该要注意掩码和规则的逻辑关系 为什么给等体配置路由策略 apply community 后, 对端收到的路由属性里却没有任何团体属性? 如图 3,R2 上配置如下 : Peer X.X.X.X route-policy 1 export Route-policy : 1 permit : 0 apply community apply extcommunity rt :0 37
40 网络之路 ROUTE TO NETWORK R1 收到路由后不会具备团体属性和扩展团体属性, 为什么了?BGP 默认是不发送团体属性和 扩展团体属性 ( 当然 vpnv4 默认发送扩展团体属性 ) 的, 所以要想将这类属性发送出去必须针对 指定的对等体或者对等体组设置命令 : Peer X.X.X.X advertise-community, 发送团体属性 ; Peer X.X.X.X advertise-ext-community, 发送扩展团体属性, 两者没有耦合关系 如何使用正规则表达式通过 AS-path 进行路由控制 使用 as-path 控制列表来进行路由控制是比较复杂且难以记忆的控制方法, 主要是正规则表 达式的使用 BGP Reflector FAQ 反射有什么特点, 如何配置 BGP 反射 在一个 AS 内,IBGP 必须要求在逻辑上是全连接的, 但随着网络拓扑的日益复杂,IBGP 的全 网连接开销很大, 为了解决这个问题, 引入了反射机制 路由反射器概念的基本思路是 : 指定 一个集中路由器作为内部对话的焦点 多个 BGP 路由器可以与一个中心点对等化, 然后多个路 由反射器再进行对等化 路由反射器的特点 : 简易理解 移植方便 ( 不用更改现有网络拓扑结 构 ) 兼容性好 ( 不用所有的路由器都支持反射机制, 反射器对于客户来说是透明的 ) 在 RFC2796 中规定 : In addition, when a RR reflects a route, it should not modify the following path attributes: NEXT_HOP, AS_PATH, LOCAL_PREF, and MED. Their modification could potential result in routing loops. 即反射器反射路由时, 不应该修 改 NEXT-HOP,AS_PATH,MED 以及 LOCAL_PRE 属性 同时在反射器上即使应用路由策略修改属性, 新 的属性也不应该应用到被反射的路由上 配置 : H3C COMWAREV5 平台反射器支持普通 BGP BGP4+ VPNV4 BGP VPN, 在指定视图下进行如下 reflector cluster-id peer reflect-client reflect between-clients // 反射器 ID // 指定 IBGP peer 作为反射器客户端 // 默认已配置, 反配置则取消反射功能 什么是冗余反射器和嵌套反射器 反射的配置相当灵活, 除了普通的配置方案外, 为了加强反射技术的健壮性和灵活性, 还可以配置冗余反射器和嵌套反射器 : 由于 AS 域内逻辑结构的改变, 反射器成为路由发布的瓶颈, 一旦反射器出问题, 那么整个域内的路由传递就会受到很大的影响, 在这种情况下, 可以通过配置冗余反射器来解决, 即 : 一个群内存在一个以上的反射器, 各反射器 CLUSER_ID 是一样的, 都与客户进行全连接, 当一台反射器出问题时, 另一台反射器仍能正常工作, 相当于备份功能 冗余反射的概念可以进一步参考下文 38
41 深入讨论综述篇 除此以外, 还可以配置嵌套反射器, 即在一个群内嵌套配置一个反射群, 反射群与该群的 CLUTER_ID 是不同的 嵌套反射器在 VPNV4 用的比较多, 比如 MPLS L3vpn 环境中, 通过多级反射 来分担 PE 的压力 为了避免路由环路, 引用了 originator-id 属性和 cluster-list 属性,originator-id 属性 是由反射器产生的, 它的值是始发这条路由的邻居的 router-id;cluster-list 也是由反射器产 生的, 反射器如果发现 update 报文中有了 cluster-list 属性, 就把自己的 cluster-id 添加到后 面 ; 如果没有, 就创建一个 cluster-list 属性, 把自己的 cluster-id 放到上面, 再向其他邻居 发布 ; 如果发现与本地雷同, 则会丢弃该路由以避免环路 cluster-id 的值可以在反射器上配 置, 如果没有配置, 缺省使用反射器的 router-id 为什么收到携带含有与本地 Router ID 相同的 originator-id 属性路由后会丢失 如图 4,R1 和 R2 为 RR,R3 和 R4 为 RRC,R4 发布一条路由,R2 收到了, 但是 R1 和 R3 都没有收 到 为什么? 发射路由在发送过程中会携带一个 originator-id 属性和一个 cluster-list 属性 其中 originator-id 的值是始发路由器的 ID,cluster-list 的值为沿途反射器的 cluster-id 当客户 机收到反射路由后会检查路由的这两个属性, 如果在收到的路由中的 originator-id 属性中发现 了自己的 Router ID, 就会拒绝该路由 这里原因为 R1 和 R4 的 BGP 进程具备相同的 ID 为什么收到携带含有与本地 cluster-id 相同的 cluster-list 属性路由后会丢失 R1 R2 R3 R4 图 4 BGP 反射示例如图 4,R1 和 R2 为 RR,R3 和 R4 为 RRC,R4 发布一条路由,R2 和 R1 都收到了, 但是 R3 没有收到 为什么? 发射路由在发送过程中会携带一个 originator-id 属性和一个 cluster-list 属性 其中 originator-id 的值是始发路由器的 ID,cluster-list 的值为沿途反射器的 cluster-id 当客户机收到反射路由后会检查路由的这两个属性, 如果在收到的路由中的 cluster-list 属性中发现了自己的 cluster-id, 就会拒绝该路由 所以原因为 R1 和 R2 设置了相同的 cluster-id,r1 收到 39
42 网络之路 ROUTE TO NETWORK R2 反射过来的路由后, 会将路由丢弃而不会转发到 R3 如果 R1 和 R2 具备相同的 cluster-id, 而 R3 还要收到 R4 路由的话, 可以用到前面提到的冗余反射概念, 将 R3 也连到 R2 上, 这样 R1 和 R2 都是 RR 而且具备相同的 cluster-id, 形成冗余反射环境,R4 的路由会直接发射到 R3 上 路由反射遵循哪些原则 反射器的 IBGP 邻居有两类 : 客户和非客户邻居, 反射器同客户一起形成一个群, 群内的客户不应再与群外的 BGP 邻居形成 IBGP 连接 一个 AS 内所有的路由反射器和非客户机构成全闭合网 1) 反射器从非客户收到的路由发向所有客户 ; 2) 由客户收到的路由会发向所有客户以及非客户 ( 包括发送者本身 ); 3) 由 EBGP 邻居收到的路由发向所有客户以及非客户 反射路由的属性不应该被改变 被反射的路由其属性不应该被改变, 比如在测试中经常忽略的联盟属性等都不应该被反射器改变 配置 BGP 路由反射, 可以减少 IBGP 连接, 反射到客户端的路由要在 CLUSTER_LIST 由属性中添加自身的 cluster-id, 但 cluster-id 的配置也不是必需的 当 BGP 配置 reflector cluster-id 后, 即采用所配置值, 当没有配置该值时,BGP 将把 local router id 添加到对应 CLUSTER_LIST 路由属性中 如何配置联盟以及联盟的作用 BGP Confederation FAQ 在 RFC3065 中定义 : This document describes an extension to BGP which may be used to create a confederation of autonomous systems that is represented as a single autonomous system to BGP peers external to the confederation, thereby removing the "full mesh" requirement. The intention of this extension is to aid in policy administration and reduce the management complexity of maintaining a large autonomous system. 可见联盟同反射类似, 都是为了解决大规模网络中 IBGP 全网连接的问题 联盟的概念基于一个 AS 可以被分为多个子 AS, 子 AS 内使用 IBGP 全闭合网, 子 AS 之间以及联盟本身与外部 AS 之间使用特殊的 EBGP 连接 虽然子 AS 之间的路由经 EBGP 交换, 所有的 IBGP 规则仍然适用, 因此对于 AS 外的路由器来看一个联盟就象一个单一的 AS EBGP 下个中继 量度值和本地优先值仍然在内传送 参与联盟的路由器一般遵循如下配置 : confederation id 6500 confederation peer-as 600 // 大 AS 号, 一个联盟内一致, 不能与本地 AS 号相同 // 本地相连子 AS 的 AS 号 40
43 深入讨论综述篇 联盟新增的两个属性 在 RFC3065 中新增加了两个为联盟定制的属性, 即 : 1. AS_CONFED_SEQUENCE: ordered set of Member AS Numbers in the local confederation that the UPDATE message has traversed; 2. AS_CONFED_SET: unordered set of Member AS Numbers in the local confederation that the UPDATE message has traversed 增加这两种属性是为了防止联盟内部的环路 AS-PATH 参数在联盟中如何进行传递 对于 AS_CONFED_SEQUENCE 和 AS_CONFED_SET, 联盟内处理方式大致与 AS_SEQUENCE 和 AS_SET 相同, 同时 : 1. 当路由在联盟内子自治系统间传递时, 不应修改 AS_PATH 属性 2. 当路由在联盟内子自治系统间传递时 : a) 若第一个 AS_PATH 是 AS_CONFED_SEQUENCE,BGP 将自己的子自治系统 AS 号加在最左端 b) 否则, 创建一个 AS_CONFED_SEQUENCE, 包含自己的子自治系统 AS 号 3. 当向联盟外 EBGP 传递路由时 : a) 若第一个 AS_PATH 是 AS_CONFED_SEQUENCE, 将后续的 AS_CONFED_SEQUENCE 和 AS_CONFED_SET 删除, 至 b); b) 若第一个 AS_PATH 是 AS_SEQUENCE, 则将联盟 AS 加在最左端 ; c) 若第一个 AS_PATH 是 AS_SET, 增加一个 AS_SEQUENCE, 将联盟 AS 加在最左端 4. 对于本地初始路由的传播 : a) 向本自治系统内 IBGP 发送, 空的 AS_PATH 属性 ; b) 向联盟内, 本自治系统外 EBGP 发送, 带有 AS_CONFED_SEQUENCE 属性 ; c) 向联盟外 EBGP 发送, 带有 AS_SEQ 属性 H3C COMWAREV5 平台的 confederation nonstandard 命令有什么用处 RFC1965 中规定 :AS-PATH Segment Type 3 是 AS_CONFED_SET 属性,Type 4 是 AS_CONFED_SEQUENCE 属性 而过去 C 友商把 Type 3 作为 AS_CONFED_SEQUENCE 属性,Type 4 不使用 这样导致其发送的 BGP update 报文中, 联盟的 AS-PATH 属性的格式和 RFC 不一致, 导致互通过程我司不能识别合法的带有联盟的 AS-PATH 属性的 BGP 报文 过去为了达到互通的问题, 需要配置 confederation nonstandard 命令以兼容友商的处理 BGP ECMP( 负载分担 ) FAQ 41
44 网络之路 ROUTE TO NETWORK 为什么目的网段相同的 BGP 路由在设置 balance 以后还是无法形成等价路由 H3C COMWAREV5 平台等价 BGP 路由的实现有着自身的实现, 具体如下 : 1) 参与 BGP 负载分担特性的路由必须为有效路由 ; 2) 参与负载分担的 BGP 路由 ORIGIN,LOCAL-PREFERENCE,MED 以及 AS-PATH 路径属性必须相同 BGP 根据路由来源分为 IBGP 学到的路由,EBGP 学到的路由,NETWORK 命令引入路由,IMPORT- ROUTE 命令引入路由, 自动聚合路由以及手动聚合路由 不同起源之间的路由不形成负载分担 ; 3) 来源不同的 BGP 路由之间不形成负载分担 ; 4) 标签路由与非标签路由之间不形成负载分担, 标签路由是指遵循 RFC3107 的 BGP 公网带标签路由 ; 5) 反射路由和非反射路由之间不形成负载分担 ; 6) 下一跳相同的 BGP 路由不形成负载分担 ; 7) 转发路由时, 多条等价路由只随机选取一条路由并向外发送 ; 在保证如上规则后, 还需要在 BGP 视图或者 BGP VPN 视图配置等价负载分担命令 balance, 默认不进行负载分担,H3C COMWAREV5 平台目前支持最大等价路由数目为 8 条 等价 BGP 路由下一跳设置 IBGP 负载分担路由在配置反射的情况下向 IBGP 邻居转发等价路由时, 不改变下一跳, 下一跳为选中的等价路由初始下一跳 ; 其他情况下, 下一跳为形成负载分担的 BGP 本地地址 ISP A() 部 +# 由 - 置高 01 级 34 它 6- 置 701 级 A B $%MED&' "#1 "#2 B(8A 采 :6 策 <= 好?@ AS1!AS inject default 注入相同 with equal cost 的默认 cost 路由 to, allow 以让出流量通 both 过两条链路转发 links to be used 图 5 BGP 负载分担 42
45 深入讨论综述篇 如何通过 BGP 实现负载分担 BGP 默认不形成等价路由 当存在等价路由后, 在 BGP 或者 BGP vpn 视图下设置 balance 命令, 可以使能等价路由功能 等价路由的形成具有很多限制, 可以参考前面两节 理论上对等体之间建立多个 peer 可以很容易形成等价路由, 但是要注意这样带来的环路影响 同时通过引入 IGP 路由在自治域间形成等价路由也是比较常见的方式 比如在 Multihomed AS 拓扑中常会用到负载分担特性, 当然这种简单的负载分担是不区分流量和业务, 而是统一分配 还有一种负载分担方法即根据不同业务和流量进行整体上的负载分担 如图 5, 针对不同业务 X 和 Y 的路由设置不同优先级, 导致业务 X 的流量从 link1 通过, 业务 Y 的流量从 link2 通过 如何通过 BGP 实现链路备份 对于来自域间的路由, 在进入本地 AS 系统后常会通过设置边界路由器的本地优先级, 导致路由在进行选择的时候存在主备, 而边界路由器之间存在备份, 在全连接中经常用到这种备份方法 如图 6 所示,customer 的聚合路由通过两条路径发送到 ISP 后在两台边缘路由器上会形成两条路由, 但是由于优先级的不同在传递到最上面的 ISP 路由器后会进行优选导致有主备之分, 这样两者之间就建立了备份链路 ISP 设置高优先级 IBGP 设置低优先级 聚合且发布 AS 内路由到 ISP link 1!" EBGP link 2 #" 发送默认路由 AS1 &'cost 低 )*+,- inject default with equal cost to allow both links to be used $% AS &'cost 高 )*+,- 图 6 BGP 链路备份 43
46 网络之路 ROUTE TO NETWORK 团体属性 文 / 陈磊 引子 BGP 协议将路由学习和路由策略很好的融合在了一起 团体属性的引入就是为了更好的使用路由策略功能 团体属性的定义很简单, 但是要想将之应用到真实的网络中, 却是一个需要创造力和有着无限可能性的工作 本文是对于团体属性应用的一个简单介绍 团体属性 团体属性和扩展团体属性的定义 团体属性可以添加在每一个路由前缀中, 由 RFC1997 定义, 是一个 transitive optional 属性 包含有团体属性的路由, 表示该路由是一个路由团体中的一员, 该路由团体具有某种或多种相同的特征 根据这些特征区分不同的路由, 可以大大简化路由策略的配置工作, 同时也增强路由策略的能力 例如, 一个 ISP 可以给自己所有的 customer 路由指定一个具体的团体属性, 这样, 学习到该路由的路由器要想给这些路由指定 MED 或者 LOCAL_PREF 等属性时, 直接基于该团体属性进行操作, 而不需要一条路由一条路由的去指定 团体属性的 Type code 是 8,32 个 bites 长 可以解析为一个 10 进制的数, 也可以解析为 AA:NN 的格式 RFC 中规定,16 个 bites 作为 AS number, 后 16 个 bites 由该 AS 自己使用 同时, 这 32 个 bites 开头的部分 0x x0000FFFF 和结尾的部分 0xFFFF0000 0xFFFFFFFF 被保留 44
47 深入讨论综述篇 RFC1997 还规定了几种公认的团体属性 : INTERNET: 默认的团体属性, 所有路由都属于该团体 NO_EXPORT( ,or 0xFFFFFF01): 含有该属性的路由不向任何联盟外的 EBGP 邻居发送, 如果没有定义联盟, 则认为该 AS 是一个独立的联盟 例如, 大量的没有必要透传 到 internet 的 IP 子网路由, 可以标记该团体属性, 以控制一些不需要的路由的规模 NO_ADVERTISE( ,or 0xFFFFFF02): 含有该属性的路由不向任何 BGP 邻居发 送, 包括 EBGP 和 IBGP Local-AS( ,or 0xFFFFFF03): 也称作 NO-ADVERTISE-SUBCONFED: 含有该 属性的路由, 不向任何 EBGP 邻居发送, 包括联盟内的 EBGP 邻居 设备收到带有这几个公认的团体属性的路由, 是自动按照 RFC 规定来执行的, 不需要再配 置路由策略 扩展团体属性 因为团体属性的使用越来越丰富, 原有的 32bite 定义已经不能满足各种应用 应运而生 的就是扩展团体属性 使用了新的 Type code 和格式, 在 RFC4360 中定义 比起原来的团体属 性, 扩展团体属性提供了更长的取值范围, 以减少冲突的可能 ; 同时, 还增加了一个 Type 字 段, 可以使得路由策略直接基于扩展团体属性的 type 字段进行操作 相当于将一些原来需要 通过复杂的团体属性配置才能实现的功能, 直接添加到了扩展团体属性的结构中 扩展团体属性也是 transitive optional,type code 是 16,64 个 bites 长, 结构如下 : - Type Field:1 or 2 octets - Value Field:Remaining octets Type high Type low(*) Value Type 字段使得团体属性的应用更为灵活 : Type high 字段的 bit 0, 表示该扩展团体属性是否是在 IANA 注册过的公认属性 ; Type high 字段的 bit 1, 表示该扩展团体属性的转发范围,0 表示可以跨 AS;1 表示不能, 只能在本地 AS 中使用 扩展团体属性分为两种 :regular type 和 extend type:regular type 的 type 字段 8bites 长 ( 只包含 type high),extend type 的 type 字段 16bites 长 (type high 和 type low 都包含 ) RFC4360 中给出了具体的扩展团体属性各字段的定义以及若干种应用模板, 这里着重要注意的是已经得到了广泛应用的 Route Target Community: 在 MPLS VPN 应用中,RT 团体属性来区分不同 VRF 的路由, 路由器通过 RT 中的内容, 判断该路由是否需要添加到相应的 VRF 中 45
48 网络之路 ROUTE TO NETWORK 团体属性的应用 虽然 RFC 中规定了部分公认的团体属性, 但是大部分情况下, 团体属性都是由每个网络运营者自己定义规则和应用方法, 然后供自己或者自己的客户使用 一般情况下, 团体属性承载了如下两方面的内容 : 第一种是针对路由发送者, 添加了一些路由的相关信息 : 例如路由是怎么学习到的, 从哪里学习到的 这类内容可以给网络中的路由的使用者提供更多的信息进行路由选择 ; 第二种是针对路由接收者, 通知接收者应该对该路由进行那些操作 : 例如接收者可以 / 不可以接收这些路由, 接受者应该对这条路由的属性进行某些修改 两方面的内容可以独立使用, 也可以混合在一起 确定具体的承载内容和格式是一个很需要些创造力的工作, 由网络运营商自行确定 有时为了承载更多的不同类型的信息, 会将多种含义融合到同一个团体属性中, 匹配时会使用正则表达式 下面是几个具体的应用举例 AS 内部使用团体属性 AS A Import:set 100:1 Export:if match 100:3 AS 100 Import:set 100:3 Export:if match 100:1,100:2 Import:set 100:2 Export:if match 100:3 AS B AS C 图 1 AS 内部使用团体属性示意图 46
49 深入讨论综述篇 首先, 看一个典型的团体属性作为路由信息补充的例子 : 团体属性用来标识每条路由的来源, 用于帮助路由接收者进行选路 图 1 中,AS 100 作为供应商, 与三个客户 AS A,B,C 分别建立 BGP 连接关系 其中, 三个客户基于自己的应用, 对供应商提供给自己的路由提出了要求 :AS C 希望学习到 AS A 和 B 的所有路由 ;AS A 和 B 都只希望学习到 AS C 的路由 供应商 AS100 通过使用团体属性, 可以很容易的实现这点 : 首先, 在 AS100 内, 使用团体属性的个位数表示路由是来自那个 AS: 所有从 AS A 收到的路由增加一个团体属性 100:1, 所有从 AS B 收到的路由增加一个团体属性 100:2, 所有从 AS C 收到的路由增加一个团体属性 100:3; 之后, 按照上面的要求, 在与 AS C 邻接的设备上配置允许发送团体属性为 100:1,100:2 的路由, 在与 AS A 邻接的设备和与 AS B 邻接的设备上配置允许发送团体属性为 100:3 的路由 将上面的例子扩展一下, 如果对于整个 internet 上的不同节点根据地理位置编号, 再添加到路由的团体属性中, 就可以知道每条路由来自何方了 同时, 在进行路由引入操作时, 我们也可以用团体属性标记该路由是从那个 IGP 引入的 例如, 使用团体属性的百位数表示引入路由的 IGP:100:100 表示是从 OSPF 引入的路由, 100:200 表示是从 RIP 学习到的路由 这样, 路由接收者可以方便的根据路由的来源, 作为选路的一个标准 更进一步, 将上面的两种团体属性在规则上进行一下组合, 我们可以用 100:101 表示从 A 学习到的由 OSPF 引入的路由 对于这种相对比较复杂的团体属性的匹配, 我们都可以通过正则表达式来实现 AS 间使用团体属性 在 AS 之间进行流量控制时, 有多种方法, 例如添加 AS_path, 使用 MED, 或者只是简单的发布掩码更长的路由 而团体属性, 也可以很方便的告知邻接的 AS, 路由应该被如何如何处理 多归属组网中作为 DPA 使用这里我们看一个路由多归属网络的应用 : 用户同时在多个网络供应商处有出口, 作为流量分担和备份 此时, 为了实现用户流量的备份和流量分担, 需要供应商和用户之间进行一系列的路由策略的交互 考虑一个供应商往往服务大量的用户, 对于每个用户都需要若干路由策略的配置, 这将是一个庞大复杂的工作, 而且很容易引发问题 为了更好地优化这个问题,RFC1998 中定义了一种使用团体属性作为 DPA(Destination Preference Attibute, 目的优先级属性 ) 的应用 也就是在团体属性中体现路由的优先级, 然后路由器在给该路由分配 Local_Pref 时, 依据这个 DPA 来分配 47
50 网络之路 ROUTE TO NETWORK RFC 中的定义了如下的团体属性与 Local_Pref 的对应关系 : 客户的路由 Community Local_Pref 客户主用路由 供应商 ASN: 客户备份路由 供应商 ASN:90 90 从其他 ISP 学习到的客户路由 供应商 ASN:80 80 客户提供的其他客户的备份路由 供应商 ASN:70 70 考虑如图 2 中的组网,AS99 是用户, 与两个供应商 AS100 和 AS200 相连 用户希望实现路由 的分担和备份 : /24 和 /24 是用户的两个网段,AS100 为 /24 的主用路 径,AS200 为 /24 的主用路径 In if match 100:80,200:80 apply Local_Pref 80 other apply Local_Pref 100 In if match 100:80,200:80 apply Local_Pref 80 other apply Local_Pref 100 AS 100 AS 200 out if match /24, apply community 100:100 if match /24, apply community 100:80 out if match /24, apply community 100:80 if match /24, apply community 100:100 AS 99 图 2 多归属组网中作为 DPA 使用示意图具体的实现方式, 图 2 中已经标注 : 整个过程中,community 作为一个路由的优先级使用, 由客户主导 客户在向两个 AS 发送路由时, 根据网络规划, 分别给予 /24 和 /24 不同的 community 值 而两个供应商 AS 内, 则根据不同的 community 值, 指定该路由的 Local_pref, 从而实现流量分担和路由备份 防 DOS 攻击应用 48
51 深入讨论综述篇 用户 AS /24 1.!"# /32, community 200: if match community 200:111 set nexthop 网络供应商 AS $%& %' 文 )*+ internet 图 3 防 DOS 攻击应用示意图 备用 AS 目的网络 X 用户 主用 AS 3.!=F 到 0G200:222 的?@H,IJ 的 Local_PrefKL, 使 N 到 +X 的 O? (PQ 换到 %!AS 上 1.!AS" 的设 %& 现 () 到 +, 的网.X 的 /!01 变 3, 网.5 于 789: 2.;<!=&>X 的?@A,BCDE community: 200:222 图 4 传递网络拥塞信息 / 带宽信息的应用示意图 49
52 网络之路 ROUTE TO NETWORK 当用户的某一台主机 ( ) 受到 DOS 攻击时, 用户向供应商发布一条该受攻击设备的主机路由,community 为与网络供应商事先协商好的值 (200:111) 供应商收到匹配该 community 的路由后, 将路由的下一跳指向 Null 接口 这样, 供应商就可以在自己的边缘设备商直接丢弃所有指向 的报文 传递网络拥塞信息 / 带宽信息的应用图 4 中的应用中, 用户有两条到达目的 X 的路径 当主用路径上的路由器发现自己到达 X 的链路可用带宽减小, 或者处于拥塞状态时 他通过一个 community 值, 将这个链路状态信息传递给用户 用户收到带有该 community 值的路由后, 自动降低其 Local_pref, 使得通往 X 的数据自动切换到备用 AS 上, 从而实现了网络拥塞信息 / 带宽信息在设备之间的传递 团体属性使用建议 团体属性极大地强化了 BGP, 它使得 BGP 除了路由功能以外, 还添加了信息传递和策略指定的功能 如果可以合理地进行团体属性的部署, 不仅可以有效地管理网络, 还提供无限的可能性, 来满足用户不同的需求 这里, 有几条团体属性使用的建议 : 给网络选择一组内部使用的团体属性 : 可以合理地表现网络的拓扑和特征 因为网络供应商要么不提供团体属性, 要么就是太简单, 要么太繁琐, 不适用于内部使用 证团体属性配置的简洁 : 过于复杂的团体属性结构, 会要求在路由器上进行繁杂的路由策略配置 以至于很难进行问题定位 避免将从自己的邻居收到的不认识的团体属性转发给其他 AS: 它可能给你的网络流量带来不可控和不可知的潜在危险 所有内部和外部团体属性, 都需要完整的文档记录 50
53 深入讨论综述篇 BGP 路由聚合 文 / 孙丽 路由聚合的必要性 在大规模的网络中,BGP 路由表变得十分庞大, 存储路由表占有大量的路由器内存资源, 传输和处理路由信息所必须的带宽和路由器传送与处理路由信息需要大量的资源 使用路由聚合 (Routes Aggregation) 可以大大减小路由表的规模 通过对路由的条目的聚合, 隐藏一些具体的路由减少路由震荡对网络带来的影响 BGP 路由聚合结合灵活的路由策略, 从而使 BGP 更有效的传递和控制路由 / / / / / / / /24 AS /30 Router1 Router2 AS /30 图 1 AS100 中所有的内部网络都可以聚合成单一的地址 /21 51
54 网络之路 ROUTE TO NETWORK 路由聚合的方法 聚合路由的方式 : 通过与静态路由组合进行路由聚合, 自动聚合, 手动聚合 结合静态路由对具体路由条目进行聚合 为聚合路由建立一条静态路由, 然后用 network 命令公布出去, 通过 network 命令公布的静态条目在 BGP 下生成一个聚合地址 : # bgp 100 network undo synchronization group ex external peer group ex as-number 200 # ip route-static NULL 0 静态路由指向 null0, 因为聚合路由本身不是一个实际的目的地, 在 Router1 中它只是用 来代表更具体的地址 目的地址属于 AS100 中的 C 类地址的数据包与 AS100 外部一个路由器上的 聚合地址相匹配, 并且被转发到 Router1 在 Router1 处, 数据包匹配更具体的路由, 并被转 发到正确的下一跳路由器 如果 Router1 上的更具体的路由不存在, 这些数据包将被丢弃 自动聚合 自动聚合是按照自然网段进行聚合, 而且只能对 IGP 引入的子网路由进行聚合, 对从邻居 学习来的路由和通过 netwrok 命令生成的 BGP 路由不起作用 命令为 : summary automatic AS100 AS / /30 Router8 Router1 Loopback0: /32 Loopbak1: /32 Router2 图 2 自动聚合 52
55 深入讨论综述篇 如图 2:Router1 和 Router2 建立起 EBGP 邻居,AS100 内运行的 IGP 是 rip Router1 从 Router8 学习到的 rip 路由, 引入到 BGP 中发布出去 Router1 上的 loopback1 和 loopback2 接口的所在的网段通过 network 发布出去. [Router1] display rip 1 route Route Flags: R - RIP, T - TRIP P - Permanent, A - Aging, S - Suppressed, G - Garbage-collect Peer on Ethernet6/0 Destination/Mask Nexthop Cost Tag Flags Sec / RA / RA / RA / RA / RA / RA / RA / RA / RA / RA / RA 26 Router1 将 rip 路由引入 BGP,BGP 的相关配置如下 : [Router1-bgp]display this # bgp 100 network network import-route rip 1 undo synchronization peer as-number 200 peer as-number 900 \\loopback1 接口的地址 \\loopback2 接口的地址 \\ 引入 rip 路由 我们先来看一下没有配置聚合前的 Router1 和 Router2 的 BGP 路由表 : Router1 的 BGP 路由表 [Router1]display bgp routing-table Total Number of Routes: 21 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / i *> / i *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? ( 接下页 ) 53
56 网络之路 ROUTE TO NETWORK ( 接上页 ) *> / ? *> / ? *> / ? *> / ? *> / ? *> ? *> ? *> ? *> ? *> ? *> ? *> ? *> ? Router1 配置 summary 之前,Router2 的路由表 : [Router2]display bgp routing-table Total Number of Routes: 21 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / i *> / i *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> ? *> ? *> ? *> ? *> ? *> ? *> ? *> ? 54
57 深入讨论综述篇 在 Router1 上配置自动聚合 : 即进行如下配置 : [Router1-bgp]summary automatic 查看 Router2 的路由表 : [Router2]display bgp routing-table Total Number of Routes: 19 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / i *> / i *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> ? *> ? *> ? *> ? *> ? *> ? *> ? *> ? *> ? 通过比较不难发现 Router2 的路由表中没有了 /24, /24, /24 的路由, 被聚合成了 /8 的路由, 而其他的路由没有发生变化 由于自动聚合只聚合路由引入的路由 : / /30 是从其他邻居学习到的路由, 因此没有被聚合 ; /32 和 是通过 network 实现的 BGP 路由, 也不能被自动聚合 虽然自动聚合可以聚合自身引入的 IGP 路由, 但 / /24 已经是自然网段, 因此没有被聚合 我们再来看被自动聚合的路由, 可以看出路由被自动聚合后, 路由器只向邻居发送聚合后 路由, 不再发送详细路由 55
58 网络之路 ROUTE TO NETWORK [Router2]dis bgp routing-table BGP local router ID : Local AS number : 200 Paths: 1 available, 1 best BGP routing table entry information of /8: From : ( ) Original nexthop: AS-path : 100 Origin : incomplete Attribute value : pref-val 0, pre 255 State : valid, external, best, Aggregator : AS 100, Aggregator ID: Not advertised to any peers yet 查看 这条路由不难发现, 该条路由具有 Aggregator 属性, 该属性标明路由是在 哪里聚合的 针对 , 产生这条聚合路由的自治系统为 100, 产生这条聚合路由的路 由器的 RouterID 是 , 即 Router1 的 router ID 注 :V3 的设备的命令是 summary 由于自动聚合只能对自身引入的路由按照自然网段进行聚合, 不能满足各种组网需求 在许多场合会应用手动聚合 手动聚合 Aggregate 命令, 有较多的选项, 比较灵活, 下面将重 点说明 手动聚合 通过手动聚合命令 Aggregate 对路由进行聚合, 只发布聚合路由 要宣告有 Aggergate 命令确定的聚合路由, 首先属于聚合路由的更具体的路由已经在 BGP 的路由表中, 这些具体路由可以是从邻居学习来的路由, 也可以是引入的 IGP 的路由 ; 或者是 通过 network 命令生成的 BGP 路由 通过 detail-suppressed 选项, 控制路由器, 只发送聚合路由, 不发送详细路由 图 2 中, 在 Router1 上, 用 Aggregate 命令对路由进行聚合 : [Router1-bgp]display this bgp 100 aggregate detail-suppressed aggregate detail-suppressed aggregate detail-suppressed summary automatic network network import-route rip 1 undo synchronization peer as-number 200 peer as-number
59 深入讨论综述篇 查看 Router1 的路由表 : [Router1]display bgp routing-table Total Number of Routes: 25 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / i s> / i s> / i *> / ? s> / ? s> / ? s> / ? s> / ? s> / ? s> / ? s> / ? s> / ? *> ? s> / ? s> / ? s> / ? *> / ? s> ? s> ? s> ? s> ? s> ? s> ? s> ? s> ? 注意到这里生成了聚合路由, / 2 7, A S - P a t h 属性中没有 A S
60 网络之路 ROUTE TO NETWORK 查看 Router2 的 bgp 路由 : [Router2]display bgp routing-table Total Number of Routes: 4 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / i *> / ? *> ? *> / ? Router1 只给 Router2 传送了聚合路由, 因此看到 Router2 上只有聚合路由 我们选其中一个聚合路由看一下其属性 : [Router2]display bgp routing-table BGP local router ID : Local AS number : 200 Paths: 1 available, 1 best BGP routing table entry information of /27: From : ( ) Original nexthop: AS-path : 100 Origin : incomplete Attribute value : pref-val 0, pre 255 State : valid, external, best, This route is an atomic-aggregated route Aggregator : AS 100, Aggregator ID: Advertised to such 1 peers: 这条路由的 AS-path 为 100, 丢失了原来的路径 AS 900 可以看到这条路由有一个 atomic-aggregated 属性, 当运行 BGP 的路由器将更详细的路由 聚合为较少细节的聚合路由, 且已经出现了路径信息的丢失,atomic-aggregate 属性将附加 到聚合路由中 不使用 detail-suppressed 选项, 聚合路由和具体路由都被传送 聚合路由和具体路由都需要被传送 对于图 2 的简单拓扑, 不需要公布具体路由给邻居 但在图 3 中, 公布两种路由是理想 的 AS100 到 AS200 有多条路径,AS200 需要根据来自 AS100 的所有路由来设置路由策略, 但是 它必须只将聚合路由公布给 AS300 AS100 的具体路由都携带一个 NO_EXPORT 的团体属性, 携带 该属性的路由不能公布给 EBGP 邻居 因此,AS200 知道这些路由不会发布给 AS300 在 Router1 上的路由聚合不配置 detail-suppressed 选项 : 那么聚合路由和具体路由都会 被公布给 AS200; 并配置邻居 Router2 发布路由的策略, 使聚合路由不发布 community 属性, 具 体路由发布 community 属性, 那么 AS300 就可以收到聚合路由了 58
61 深入讨论综述篇 / / / / / / / /24 AS200 AS / /30 AS300 Router1 Router2!"#+$ 合 "# &'$ 合 "# /30 Router /30 Router3 Router4 图 3 AS100 多宿主到 AS200 宣告聚合路由及挑选出来的更具体的路由利用 Aggregate 的 suppress-policy 参数和 detail-suppressed 结合 ; 在前一种方案中, 将 AS100 的更具体的路由发送给了 AS200, 因此 AS200 能够执行路由策略 AS200 这些路由来设置路由选项, 从而使 AS300 能够向 AS100 发送业务量 在图 3 中,AS100 到 AS200 有两条链路, 如果想从 AS200 到 AS100 的 /24 业务量走 Router3 到 Router4 的链路, 而 Router1 到 Router2 的链路作为备份链路 可以在 Router1 制定策略, 使 Router1 上抑制 /24 这条具体路由, 发布聚合路由和其他更具体的路由 在 Router3 上, 制定策略, 发布聚合路由和 /24 这条聚合路由 在生成聚合路由时如果使用了 suppress-policy 参数来抑制部分参与聚合的路由, 即符合 suppress-policy 的路由被抑制 ; 不匹配的部分不被抑制 那么在发布路由时除了发布聚合路由, 还会发布与 suppress-policy 中不匹配的部分具体路由 改变聚合的属性 Aggregate 命令使用 Attribute-policy 选项, 改变聚合路由的属性 使用此参数能轻易改变聚合路由的一些属性, 比如团体属性 起源以及 cost 等等 在图 3 中, A S 中的 I G P 为 r i p, 将路由引入到 B G P 中, 那么 到 BGP 路由的 Origin 属性为 incomplete. 假设 AS200 希望所有到 AS100 的业务量, 将 Router1 到 Router2 的作为主链路, 而把将 Router3 到 Router4 的链路作为备份链路 那么就可以在 Router1 上进行路由聚合, 使聚合路由的 origin 属性为 IGP, 而 Router2 上的聚合路由的属性不变, 由于 BGP 会优选 Origin 为 IGP 的路由 当 Router1 到 Router2 的链路存在问题时, 选择 Router3 到 Router4 的链路 和聚合路由一起使用 AS_SET AS_PATH 属性有两种类型 : 59
62 网络之路 ROUTE TO NETWORK AS_SEQUENCE: 这是 AS 号的一个有规则的列表 AS_SET: 到目的地的路径上 AS 号的一个无规则列表 AS_PATH 的一个主要作用时防止路由环路 如果一个运行 BGP 的路由器从 EBGP 邻居收到一 条路由含有它自己的 AS 号, 知道出现了环路, 将忽略此路由 如图 4 所示, 当执行路由聚合时, 会丢失 AS_PATH 的一些细节, 产生环路的潜在因素就增 加了 经过 AS3113 上的路由器聚合后, 丢失了详细路由的路径信息 AS810 和 AS237,AS225 的路径信息被丢弃 假设 AS810 到其他 AS 有可选连接 ( 如图 5) 来自 AS3113 的路由聚合公布 给 AS6571, 然后 AS6571 又回到 AS810 因为在聚合点号的 AS 号没有包括在 AS_PATH 中,AS810 不会检测到潜在的环路 假设 AS810 内的一个网络 /24 出现了故障, 在这个 AS 内的路由器会与来自 AS6571 的聚合路由相匹配, 这样就出现了环路 由上可知,AS_PATH 防止环路的功能不要求 AS 号有顺序, 重要的是接收路由器能够识别自 己的 AS 号是否已经是 AS_PATH 的一部分了, 此时就涉及到了 AS_SET AS /17 (3113) /19 AS /29 (237,225) /19 (237) AS /19 AS /19 图 4 聚合路由丢失一些具体路由路径信息 AS /17 (3113) /19 AS /29 (237,225) /19 (237) AS /19 AS / /17 (6517,3113) 图 5 聚合路由丢失一些具体路由路径信息形成环路 60
63 深入讨论综述篇 如图 6, 路由器生成聚合路由时, 选择 AS_SET 选项, 生成的聚合路由包括 AS_PATH 中所有 的 AS 号并将它们作为一个 AS_SET. 可以看到 AS_SET 是没有顺序的 从聚合路由器开始了一个 AS_SEQUENCE /29 (237,225) /19 (237) AS / /17 AS_SEQUENCE=3113) AS_SET=(237,810,225) AS / /19 AS237 AS /19 AS /19 图 6 AS_SET 可以避免聚合路由形成环路 在进行路由聚合时, 使用 as-set 参数后,BGP 路由表中聚合路由的路径信息带有每条具体路由的路径信息, 并随着被聚合路由的更新而变化 聚合路由重新进入 as-set 中列出的任何一个 AS,BGP 的环路检测机制检测到自己的 AS 号在聚合路由的 as-set 属性列出的 AS 中, 就会丢弃聚合路由, 这样就避免了形成环路 利用 AS_SET 可以避免环路的同时, 降低了网络的稳定性 如果 AS225 的链路出现故障, 例如 AS_SET 发生了变化, 那么会在聚合点以外的范围内公布此变化 基于选中的更具体路由的聚合路由 Aggregate 命令利用 origin-policy 选项来决定对哪些具体路由进行聚合, 从而决定聚合路由携带什么样的属性 聚合路由只继承路由策略中指定的路由的属性, 忽略了不匹配的路由的属性, 从而达到了聚合路由控制的目的 如图 6 中, 假设 /19 具有 NO_EXPORT 属性, 如果不排除这条路由进行聚合, 聚合后的路由不会发送给其他的路由器 利用 originpolicy 选项进行聚合排除了这条路由, 聚合后的路由将不继承 NO_EXPORT 属性 从而可以使聚合路由被传播 总结 在现在的网络中, 路由条目越来越多, 路由聚合通过较少路由条目, 减少了存储 传输和计算路由所需的网络资源的负担 ; 通过隐藏一些具体路由, 使聚合点之后的路由器, 免受路由震荡带来的影响 路由聚合结合路由策略, 可以实现链路的备份 负载分担等以满足日益丰富的组网的需求 同时, 由于路由聚合隐藏了一些具体的路由, 带来了形成路由环路的风险, 需要设计者综合进行考虑使用 61
64 网络之路 ROUTE TO NETWORK BGP 路由过滤 文 / 姜杏春 BGP 路由是构成之 Internet 路由表的核心, 目前规模已经达到十几万条 在实际应用中并不是所有的业务路由器都会需要全部的 Internet 路由 所以我们在很多时候需要对 BGP 路由进行过滤来控制路由的发送和接收 BGP 路由过滤的手段 我们知道路由过滤主要是以对路由所携带的信息作为匹配条件做过滤,BGP 的属性众多, 相较于其他路由所携带的路由信息就很多, 所以对于 BGP 的路由过滤也要灵活的多 ACL/IP 前缀列表 ACL: 用户在定义 ACL 时可以指定 IP 地址和子网范围, 用于匹配路由信息的目的网段地址或下一跳地址 IP Prefix:IP Prefix 的作用类似于 ACL, 但比它更为灵活, 且更易于用户理解 使用 IP Prefix 过滤路由信息时, 其匹配对象为前缀和掩码 ACL IP 前缀列表主要是对 BGP 路由的前缀做过滤, 可以实现对不同前缀地址做不同的过滤 AS 路径过滤列表 AS 路径过滤列表仅用于 BGP BGP 的路由信息中, 包含有自治系统路径域 as-path 就是针对自治系统路径域指定匹配条件 BGP 可以直接使用 AS 路径过滤列表对路由做过滤, 它可以以 BGP 路由的 AS-PATH 属性作为过滤条件, 可以实现对来自不同 AS 的路由做过滤 当想拒绝某一个 AS 始发的所有路由, 用 AS 路径过滤列表显然要简单的多 Route Policy 路由策略相较于前两种方法, 提供了更丰富的手段 既可以使用 ACL IP 前缀列表和 AS 路径列表对 BGP 路由做过滤, 还可以使用其他匹配条件, 比如 : 团体属性列表 (community-list): BGP 的路由信息包中, 包含一个 community 属性域, 用来标识一个团体 community-list 就是针对团体属性域指定匹配条件 扩展团体属性列表 (extcommunity-list): 可用于 VPN 的 Route-Target( 路由目标 ) 扩展 extcommunity-list 就是针对扩展团体属性指定匹配条件 62
65 深入讨论综述篇 综上看,BGP 路由常用来被过滤的条件主要是路由前缀 AS-PATH 属性 Community 属性, 当然还有一些其他匹配条件 (MED next-hop route-type route-source) 也可以被用来做过滤 BGP 路由过滤的实施点 BGP 路由过滤的策略可以在本地对从邻居接收路由入方向 本地发布路由以及对邻居发送路由出方向处实施 接收路由 (Import Policy) 在收到 BGP 邻居的路由时, 我们可以执行路由策略, 过滤我们不需要的 BGP 路由 路由策略的执行在 BGP 往路由表添加路由之前, 所以路由一旦被过滤掉, 这些路由不添加到在执行策略的设备的路由表中, 在本地不负责转发 路由策略可以对所有接收的路由作过滤, 也可以只对特定的 BGP 邻居或邻居组作过滤 本地发布路由 对于本地发布的路由, 主要是指通过 network import 方式本地发布的 BGP 路由, 我们可以执行路由策略, 过滤我们不需要发布的 BGP 路由 路由策略的执行在在 BGP 往路由表添加路由之前, 这些路由可以有选择的发布给所有 BGP 邻居 发送路由 (Export Policy) 在给 BGP 邻居发送路由的时候, 我们也可以执行路由策略, 过滤我们不想发布的 BGP 路由 路由策略的执行在 BGP 往路由表添加路由之后, 所以本地路由表中匹配 deny 策略的路由依然生效, 在本地可以转发, 只不过不向配置策略的邻居发送该 BGP 路由, 让邻居无法从自己学习使用该路由 路由策略可以对所有邻居做过滤, 也可以只对特定的 BGP 邻居或邻居组作过滤 IP Prefix 实际案例 IP Prefix 是一种针对路由目的地址信息做过滤的工具, 同样是对路由目的地址做过滤, 既然有了 ACL, 为什么还需要 IP Prefix 呢? 可以说, 相对于 ACL,IP Prefix 用来做路由目的地址的过滤更专业 我们知道一条路由, 不光有目的地址信息, 还有掩码信息,ACL 只能对目的地址信息做过滤, 而 IP Prefix 可以做到对路由目的地址信息和掩码信息同时做过滤, 这就是 IP Prefix 的优点 举个例子, 路由表里有 2 条这样的路由 /16 和 /24, 考虑路由表的容量, 想将 /24 这条路由过滤掉 63
66 网络之路 ROUTE TO NETWORK [H3C-bgp] display ip routing-table Routing Tables: Public Destinations : 6 Routes : 6 Destination/Mask Proto Pre Cost NextHop Interface /16 BGP GE0/ /24 BGP GE0/ /24 Direct GE0/ /32 Direct InLoop /8 Direct InLoop /32 Direct InLoop0 使用 ACL 做过滤, 配置 ACL 2000 应用于 BGP acl number 2000 rule 0 deny source rule 1 permit bgp 100 filter-policy 2000 import 过滤掉 再次查看 IP 路由表, 由于两条路由目的地址都为 , 我们看到结果将两条路由都 [H3C-bgp]display ip routing-table Routing Tables: Public Destinations : 4 Routes : 4 Destination/Mask Proto Pre Cost NextHop Interface /24 Direct GE0/ /32 Direct InLoop /8 Direct InLoop /32 Direct InLoop0 这样 ACL 就无法满足我们的需求了, 这时候我们可以使用我们的另一个工具 IP Prefix, 指定只 deny /24, 允许其他路由通过 同时提醒两点要注意 : 第一, 无论是 ACL 还 是 IP Prefix 过滤, 缺省都是 deny all 的, 所以我们在配置需要过滤的路由条目后, 最后还 要配置一条 permit 命令让其他路由通过 第二, 设备如果不支持 Route refresh 能力, 需要 手动 reset bgp 邻居过滤策略才生效 ; 设备如果支持 Route refresh 能力, 邻居不支持 Route refresh 能力, 需要和相应对等体配置 peer x.x.x.x keep-all-routes ip ip-prefix 1 index 10 deny greater-equal 24 less-equal 24 ip ip-prefix 1 index 20 permit less-equal 32 bgp 100 filter-policy ip-prefix 1 import 查看 IP 路由表, 从路由表可以看出 /24 路由已经从路由表中消失, /16 的路由依然在路由表中, 就可以满足我们的要求, 从这个例子, 我们可以看出 IP Prefix 可以 更精确的过滤路由, 因为它可以匹配的路由信息更多, 地址 + 掩码 64
67 深入讨论综述篇 [H3C-bgp]display ip routing-table Routing Tables: Public Destinations : 5 Routes : 5 Destination/Mask Proto Pre Cost NextHop Interface /16 BGP GE0/ /24 Direct GE0/ /32 Direct InLoop /8 Direct InLoop /32 Direct InLoop0 同时,IP Prefix 也可以针对一段掩码范围做过滤 在原来的路由表中有多了很多 11 开头 的路由, 我们精简路由, 要求只需要掩码是 16 的路由 <H3C>display ip routing-table Routing Tables: Public Destinations : 9 Routes : 9 Destination/Mask Proto Pre Cost NextHop Interface /16 BGP GE0/ /24 Direct GE0/ /32 Direct InLoop /16 BGP GE0/ /27 BGP GE0/ /25 BGP GE0/ /26 BGP GE0/ /8 Direct InLoop /32 Direct InLoop0 我们可以在原来的配置基础上再添加一条如下的命令即可 注意,IP Prefix 匹配顺序 是根据表项的 index 号匹配的,index 号越小, 越先匹配, 本例中之前的两条表项的 index 分别 是 10 和 20, 我们要使再配置的表项信息能在两者之间作匹配, 只需配置的 index 在两者之间即 可, 例子中使用的 index 是 11 ip ip-prefix 1 index 11 deny greater-equal 17 less-equal 32 查看 IP 路由表, 路由表中除了 /16, 其他的路由都没有了, 满足了我们的要求, 可以看出 IP Prefix 还是很好用的工具 [H3C]dis ip routing-table Routing Tables: Public Destinations : 6 Routes : 6 Destination/Mask Proto Pre Cost NextHop Interface /16 BGP GE0/ /24 Direct GE0/ /32 Direct InLoop /16 BGP GE0/ /8 Direct InLoop /32 Direct InLoop0 65
68 网络之路 ROUTE TO NETWORK AS PATH 利用地址前缀去过滤 BGP 路由, 在如此大规模的路由表时, 一来有可能配置比较繁琐, 二来且有新的路由加入不好维护, 所以提出了 BGP 利用 AS_PATH 作过滤的办法 由于 Internet 核心 AS 的分布都是有记录的, 所以利用 AS 的过滤更有针对性, 例如用 AS_PATH 作过滤, 过滤从某个 AS_PATH 始发的全部路由, 只需一个 AS_PATH 列表即可 下面让我们来看个小例子 : AS200 H3C AS100 AS400 AS300 图 1 AS PATH 过滤应用 出于业务需要,H3C 设备需要过滤掉来自 AS400 始发的路由 可是查看 H3C 设备的 BGP 路由表, 发现来自 AS400 的路由前缀和掩码几乎无规律可循, 且从多个邻居可以学到, 如果使用 ACL 或 IP Prefix, 需要配置表项很多, 且如果有新的路由, 还需要添加更多的表项, 非常不好维护 66
69 [H3C]dis bgp routing-table Total Number of Routes: 25 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? *> / ? 深入讨论综述篇 这个时候我们可以使用针对 BGP 特有的工具 AS PATH 列表, 让我们看看这个工具的强大之处 首先, 配置过滤 AS400 始发的路由, 允许其他路由通过的 AS PATH 列表 ; 同时, 配置一个 BGP 对等体组 group 1, 将所有要过滤的邻居加到这个对等体组 ; 然后, 对对等体组 group 1 做 AS PATH 列表过滤 ip as-path 1 deny _400$ ip as-path 1 permit.* bgp 100 undo synchronization peer as-number 200 peer as-number 300 group 1 external peer 1 as-path-acl 1 import peer 1 keep-all-routes peer group 1 peer group 1 67
70 网络之路 ROUTE TO NETWORK 配置完成之后, 查看 BGP 路由表, 发现 AS400 始发的路由不生效了, 其它的路由依然生 效 一个 AS PATH 列表就轻轻松松实现了我们的需求, 并且以后再有 AS400 始发的路由, 也会 被过滤掉, 不需要再添加任何命令去维护它 现在我们看到 AS PATH 列表的好处了, 只要根据 AS PATH 过滤的需求, 我们都可以使用 AS PATH 列表就把它过滤掉 [H3C-bgp]dis bgp routing-table Total Number of Routes: 25 BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? / ? *> / ? *> / ? *> / ? *> / ? *> / ? 本文中,AS PATH 列表过滤的例子是最简单的例子, 因为 AS PATH 列表使用了正则表达式这把利剑, 可以对 AS PATH 做各种简单的 复杂的匹配, 非常灵活, 具体的 AS PATH 列表使用方法和更深入的案例请见 常用 BGP AS_PATH 正则表达式应用 68
71 深入讨论综述篇 Community 我们知道,BGP 的 COMMUNITY 属性是用来标识一组具有共同性质的路由 利用 COMMUNITY 属性我们可以把路由根据业务分成很多类, 我们可以把境外路由部署同一组 COMMUNITY 属性, 境内路由系统是部署另一组 COMMUNITY 属性, 这个分组完全是我们人为决定和控制的, 方便我们更轻松的识别和管理众多的路由 实际应用中, 我们在 ISP 管理时, 部分境内路由可能不需要发布到境外, 而境外路由需要发布到境外, 这些路由前缀不同, 可能来自不同 AS, 我们可以在 ISP 边缘给这些境内路由设置相同的 COMMUNITY 值为 100:2, 给境外路由设置另外一个 COMMUNITY 值 100:1, 这样的话我们就可以巧妙地运用 COMMUNITY 属性的特质去控制和过滤路由 没有部署路由策略过滤之前, 我们查看 RTA 的 IP 路由表,RTA 可以学习到境内路由和境外路由, 这不是我们所期望的 /24 100:1 AS /24 100: /16 100:1 RTA ISP2 AS500 RTB /16 100:1 AS100 ISP /16 100:2 AS /24 100:1 AS400! 100:2 " 100:1 图 2 COMMUNITY 属性应用 <RTA>dis ip routing-table Routing Tables: Public Destinations : 9 Routes : 9 Destination/Mask Proto Pre Cost NextHop Interface /32 Direct InLoop /16 BGP GE2/1/ /16 BGP GE2/1/ /16 BGP GE2/1/ /8 Direct InLoop /32 Direct InLoop /24 BGP GE2/1/ /24 Direct GE2/1/ /32 Direct InLoop0 69
72 网络之路 ROUTE TO NETWORK 现在我们利用境外路由都携带 COMMUNITY 属性 100:1 的特质, 在 RTB 上配置过滤 对 ISP2 的邻居实施策略, 只允许向 ISP2 邻居发布 COMMUNITY 属性为 100:1 的路由 ip community-list 1 permit 100:1 ip community-list 1 deny route-policy 1 permit node 0 if-match community 1 # bgp 100 undo synchronization peer as-number 400 peer as-number 100 peer as-number 500 peer keep-all-routes peer keep-all-routes peer route-policy 1 export # 我们再看 RTA 的路由表, 只剩下两条 /16 和 /16 两条境外路由, 满足 了我们的需求, 再有新的境外路由, 也会因为 COMMUNITY 为 100:1, 被匹配通过, 所以我们无 需再添加其他配置去维护 [RTA]dis ip routing-table Routing Tables: Public Destinations : 7 Routes : 7 Destination/Mask Proto Pre Cost NextHop Interface /32 Direct InLoop /16 BGP GE2/1/ /16 BGP GE2/1/ /8 Direct InLoop /32 Direct InLoop /24 Direct GE2/1/ /32 Direct InLoop0 总结 BGP 与其他路由协议对比, 拥有很多自身独有的路由属性, 我们可以灵活的根据 BGP 的多种属性去做路由过滤, 我们可以通过不同的手段实现相同的目的, 这完全取决于用户的需求和管理者的决策 由此看出,BGP 这个协议, 更类似一个管理协议, 赋予网络工作者足够的权利去控制路由, 能够将网络工作者的智慧充分体现, 这正是该协议的独到之处 70
73 深入讨论综述篇 RR 联盟及同步 文 / 高国义 简述 BGP 越来越多的在规模比较大的企业或运营商得到部署应用, BGP 丰富的路由属性能够轻松的进行路由选路 但是, 受到 BGP 横向隔离规则规定的限制,BGP 网络设备不会把它从一个 IBGP 邻居学习过来的路由传递给其他的 IBGP 邻居, 导致在这些网络中需要在运行 BGP 的网络设备进行全连接的 IBGP 对等体的配置 那么在这些较大网络中需要配置的 IBGP 对等体为 N*N 个 BGP 邻居关系, 这样就加大了实施的难度和后期网络分析的难度 由此 BGP 应运而生的两个特性反射器和联盟 路由反射器 (Route Reflector) 路由反射器 (RR) 的作用主要是为了简化 IBGP 邻居配置, 使用反射器后允许反射器将来自 IBGP 邻居的路由信息发给另一个或一组 IBGP 邻居 BGP 协议允许被配置为路由反射器的路由器向其他 IBGP 对等体传输由 IBGP 所学到的路由来修改 BGP 的横向隔离规则, 也就避免了使用复杂的 IBGP 全连接的组网配置 BGP 反射特性角色 路由反射器 : 是被配置为允许它把通过 IBGP 所学到的路由通告 ( 或反射 ) 到其他 IBGP 对等体的路由器 ; 客户 : 是和路由反射器有 IBGP 对等关系并配置成反射邻居关系的路由器 ; 非客户 : 不是路由反射器的客户的其他 IBGP 的对等体 ; originator( 始发者 )ID: 是被路由反射器创建, 这个属性带有本 AS 内部路由始发者的路由 ID; 集群 : 路由反射器及其客户集合 ; 71
74 网络之路 ROUTE TO NETWORK BGP 反射功能 路由反射器会依次在客户机之间反射信息 路由反射器和它的所有客户机构成一个群 一个群内允许有多个路由反射器, 一个路由反射器可以把别的路由反射器配置成它的客户机或非客户机 路由反射器在它的客户机和非客户机之间传送路由更新的规则 : 如果路由更新是从非客户机收到的, 仅反射给客户机 如果路由更新是从客户机收到的, 反射给所有非客户机以及客户机, 除了这个路由更新的始发者 如果路由更新是从 EBGP 相邻体收到的, 反射给所有的客户机和非客户机 路由反射器应用场合 AS 100 RTA RTB RTC EBGP RTD 图 1 反射器应用场合示意图 上图中如果没有配置反射器, 由于有横向隔离原则,RTD 收到 IBGP 邻居 RTC 的更新后不向别的 IBGP 邻居发送, 结果导致 RTB 和 RTA 上就无法的到 RTC 的路由 那么如何解决这种问题呢? 方案一 : 使 AS 域内的路由器进行物理上的全连接, 在 RTB 和 RTC 之间增加一条物理链路, 在 RTC 和 RTB 之间建一个 IBGP 邻居关系, 使 RTC 能够直接把自己的路由传递给 RTB 路由器, 由 RTB 路由器直接通过 EBGP 邻居关系, 把路由传递给 RTA AS 100 RTA RTB RTC EBGP IBGP IBGP RTD IBGP 图 2 增加物理链路的方案 72
75 深入讨论综述篇 这种全连接的网络部署方案, 一方面组网成本高, 另一方面 BGP 连接的数目增多相应的增加了系统的资源消耗, 全连接的网络部署可扩展性差 有没有简单一点的方法呢? 方案二 : 使 AS 域内的路由器进行逻辑全连接, 使 RTB 和 RTC 的 IGP 路由互相可达, 在 RTB 和 RTC 之间建立一个 IBGP 邻居关系, 使 RTC 能够直接把自己的路由传递给 RTB 路由器, 由 RTB 路由器直接通过 EBGP 邻居关系, 把路由传递给 RTA AS 100 RTA RTB RTC EBGP IBGP IBGP RTD IBGP 图 3 逻辑全连接的方案这种方案也需要增加了 BGP 邻居关系的配置 还有没有更加简单的方法呢? 终极方案 : 不用增加物理链路 不用新增 IBGP 邻居关系 配置 BGP 路由反射器 把 RTD 配置路由反射器, 同时 RTB 和 RTC 配置反射器 RTD 的客户, 这样根据反射器的路由反射原理,RTC 就可以轻松的把自己的路由反射给 RTB, 并由 RTB 通过 EBGP 邻居关系 修改后的应用组网图 : AS 100 RTA RTB RTC EBGP 客户机 RTD 客户机 反射器 图 4 使用反射器的方案 73
76 网络之路 ROUTE TO NETWORK 路由器反射过程 1. 公网路由 BGP 路由传递过程从 RTC 经过路由反射器传递一条路由给 RTA 路由器,RTA 的 router id 为 RTB 的 router id 为 RTD 的 router id 为 RTC 的 router id 为 AS 100 RTA.1 RTB RTC EBGP /8.2.1 客户机 /8 IBGP.2 RTD 反射器 图 5 公网路由传递过程示意图 客户机 /8 IBGP.1.2 RTC 发布一条路由 /32 给 IBGP 反射器 反射器 RTD 学习到该条路由, 并把这条路由 /32 反射客户机 RTB <RTD>dis bgp routing-table BGP local router ID : Local AS number : 100 Path: 1 available, 1 best BGP routing table entry information of /32 RR-client route From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Advertised to such 1 peers: 客户机 RTB 学习到通过反射器反射的 /32 的路由, 该路由的 Originator 为 ( 即 RTC 路由器 ) Cluster list 为 ( 即该路由被反射器 RTD 路由器反射过来 ) Original nexthop 为 ( 该路由始发下一跳 ) Relay Nexthop 为 ( 该路由 中继下一跳 ) 74
77 深入讨论综述篇 <RTB>dis bgp routing-table BGP local router ID : Local AS number : 100 Path: 1 available, 1 best BGP routing table entry information of /32 RR-client route From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Originator : Cluster list : Advertised to such 1 peers: RTA 路由器通过 EBGP 邻居关系学习到 /32 这条路由 <RTA>dis bgp routing-table BGP local router ID : Local AS number : 200 Path: 1 available, 1 best BGP routing table entry information of /32 From : ( ) Original nexthop : AS-path : 100 Origin : incomplete Attribute value :pref-val 0, pre 255 State : valid, external, best, Not advertised to any peers yet 这样路由反射器成功屏蔽 BGP 的横向隔离规则, 把路由传递给 RTA 路由器 2. 公网路由 BGP 反射器嵌套路由传递过程从 RTE 传递一条路由 /32 给 RTA 路由器,RTA 的 router id 为 RTB 的 router id 为 RTC 的 router id 为 RTD 的 router id 为 RTE 的 router id 为 ; 其中 RTB 和 RTD 为一级反射器 RTC 为二级反射器 75
78 网络之路 ROUTE TO NETWORK.2 RTC.1.1 RR / /8.2 RTB RR1-1 RR1-2 RTD /8.2 AS /8 RTA.1.2 RTE 图 6 嵌套路由传递过程示意图 在 RTE 上在 BGP 中发布一条路由 /32 在反射器 RTD 查看 /32 的路由, 发现路由已经学习到该条路由, 并把该条路由 /32 反射给反射器 RTC <RTD>dis bgp routing-table BGP local router ID : Local AS number : 100 Path: 1 available, 1 best BGP routing table entry information of /32 RR-client route From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Advertised to such 1 peers: 在 RTC 上查看 /32 的路由, 发现该路由已经被接受到 该路由的 Originator 为 Cluster list 为 ( 表明已经经过反射器 的反射 ) 76
79 深入讨论综述篇 <RTC>dis bgp routing-table BGP local router ID : Local AS number : 100 Path: 1 available, 1 best BGP routing table entry information of /32 RR-client route From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Originatror : Cluster list : Advertised to such 1 peers: 在 RTB 上查看 /32 的路由, 发现该路由已经被接受到 该路由的 Originator 为 Cluster list 为 , ( 表明已经经过反射器 和反射器 的反射 ) <RTB>dis bgp routing-table BGP local router ID : Local AS number : 100 Path: 1 available, 1 best BGP routing table entry information of /32 From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Originatror : Cluster list : , Advertised to such 1 peers: 在 RTA 上查看 /32 的路由, 发现该路由已经被接受到 该路由的 Originator 为 Cluster list 为 , , ( 表明已经经过反射器 反射 器 和反射器 的反射 ) 77
80 网络之路 ROUTE TO NETWORK <RTA>dis bgp routing-table BGP local router ID : Local AS number : 100 Path: 1 available, 1 best BGP routing table entry information of /32 From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Originatror : Cluster list : , , Not advertised to any peers yet 在多反射器的存在或反射器嵌套的网络里, 路由在被反射时, 会添加反射器的 ID, 这样 该路由经过的反射器就被有效的记录下来 这时当反射器收到一条路由的 Cluster list 中, 包含自己的反射器 ID 时, 反射器就不会反射该路由, 这样就可以有效的防止路由环路 3 私网路由 BGP 路由传递 RTB RTD 和 RTC 组网 MPLS VPN 网络,RTB 和 RTC 为 PE 设备, 使 RTD 配置成 VPNv4 路由反射器 从 RTC 经过路由反射器传递一条 VPN 路由 /32 给 RTB 路由器, RTB 的 router id 为 RTD 的 router id 为 RTC 的 router id 为 AS 100 PE 设备 RTB PE 设备 RTC 客户机 /8 IBGP.2 RTD 反射器 PE 设备 客户机 /8 IBGP.1.2 图 7 私网传递示意图 78
81 深入讨论综述篇 RTC 发布一条 VPN 路由 /32 给 MP-IBGP 反射器 反射器 RTD 学习到该条路由, 并把这条路由 /32 反射客户机 RTB [RTD]dis bgp vpn vpn routing-table BGP local router ID : Local AS number : 100 Paths: 1 available, 1 best BGP routing table entry information of /32: RR-client route From : ( ) Relay Nexthop : Original nexthop : Ext-Community :<RT: 100:1> AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Not advertised to any peers yet 客户机 RTB 学习到通过反射器反射的 /32 的路由, 该路由的 Originator 为 ( 即 RTC 路由器 ) Cluster list 为 ( 即该路由被反射器 RTD 路由器反射过 来 ) Original nexthop 为 ( 该路由始发下一跳 ) Relay Nexthop 为 ( 该 路由中继下一跳 )(VPNv4 路由为隧道迭代方式, 故该项为全零 ) [RTD]dis bgp vpn vpn routing-table BGP local router ID : Local AS number : 100 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Relay Nexthop : Original nexthop : Ext-Community :<RT: 100:1> AS-path : (null) Origin : incomplete Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Originatror : Cluster list : Not advertised to any peers yet 这样路由反射器成功屏蔽 BGP 的横向隔离规则, 把路由传递给 RTA 路由器 路由器反射器的过滤 BGP 另一个比较强的功能就是过滤功能了, 那么这个功能是否因为配置 BGP 反射器后过滤功能不再强大了呢? 可以肯定的告诉大家, 反射器上的路由过滤功能依然强大 特别值得一提的就是反射器对 VPNv4 路由的过滤 公网 BGP 反射器上的路由过滤, 一般情况下仅仅针对路由使用路由过滤策略即可完成 相对比较复杂的是 VPNv4 的路由过滤, 这种过滤的在反射器上 79
82 网络之路 ROUTE TO NETWORK PE 设备 RTB 客户机 /8 IBGP.2 AS 100 RTD 反射器 PE 设备 客户机 /8.1 图 8 反射器的过滤 IBGP PE 设备 RTC.2 的过滤需要使用的参数一般会包 括 Ext-Community 即 RT VPNv4 的 路由过滤功能一般均把 RT 和具体 路由进行结合的过滤方式 下面 以一个 MPLS VPN 的组网举例进行 讲解 RTB RTD 和 RTC 组网 MPLS VPN 网络,RTB 和 RTC 为 PE 设备, 使 RTD 配置成 VPNv4 路由反射器 R T C 和 R T B 上 均配置两个 VPN, 并设置 RT 分别 为 100:1 和 200:1 从 RTC 经过 路由反射器同一个 V P N 内传递两 条 V P N 路由 / / 3 2 和 / /32 给 RTB 路由器, RTB 的 router id 为 RTD 的 router id 为 RTC 的 router id 为 过滤 VPN 的全部路由 针对 VPN 路由的过滤, 很多情况均需要在反射器上过滤掉 VPN 的配置的 RT 属性直接即可 本例在反射器上配置过滤 RT=100:1 的路由即可 # bgp 100 undo synchronization peer as-number 100 peer as-number 100 peer connect-interface LoopBack1 peer connect-interface LoopBack1 # ipv4-family vpnv4 peer enable peer route-policy deny-vpn1 export peer reflect-client peer enable peer reflect-client # ospf 1 area network # route-policy deny-vpn1 deny node 10 if-match extcommunity 1 route-policy deny-vpn1 permit node 20 # ip extcommunity-list 1 permit rt 100:1 # 80
83 深入讨论综述篇 了 在 RTB 上仅仅能够收到 VPN2 的 / /32,VPN1 的路由被过滤掉 [RTB] dis bgp vpnv4 all routing-table BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Total Number of Routes from all PE: 2 Route Distinguisher:200:1 Network NextHop In/Out Label MED LocPrf *>i / Null/ *>i / Null/ Total Routes of vpn-instance vpn2: 2 Network NextHop In/Out Label MED LocPrf *>i / Null/ *>i / Null/ 过滤 VPN 的某些路由 如果需要过滤某 VPN 的某些路由, 只需要在反射器上配置 RT 和明细路由结合的过滤规则即 可 本例以过滤 VPN1 的 /32 和 VPN2 的 /32 的过滤为例 # route-policy deny-vpn-mingxi deny node 10 if-match acl 2000 if-match extcommunity 1 route-policy deny-vpn-mingxi deny node 20 if-match acl 2001 if-match extcommunity 2 route-policy deny-vpn-mingxi permit node 30 # ip extcommunity-list 1 permit rt 100:1 ip extcommunity-list 2 permit rt 200:1 # # acl number 2000 rule 0 permit source acl number 2001 rule 0 permit source # 81
84 网络之路 ROUTE TO NETWORK 滤掉了 在 RTB 上仅仅能够收到 VPN1 的 /32 和 VPN2 的 /32, 其他路由被过 [RTB] dis bgp vpnv4 all routing-table BGP Local router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Total Number of Routes from all PE: 2 Route Distinguisher:100:1 Network NextHop In/Out Label MED LocPrf *>i / Null/ Route Distinguisher:200:1 Network NextHop In/Out Label MED LocPrf *>i / Null/ Total Routes of vpn-instance vpn1: 1 Network NextHop In/Out Label MED LocPrf *>i / Null/ Total Routes of vpn-instance vpn2: 2 Network NextHop In/Out Label MED LocPrf *>i / Null/ 说明 :RR 在反射 VPNV4 路由时, 如果没有配置对应的 vpn-instance, 则需要配置 undo vpn-target policy 反射器 AS 内部路由的环路避免 Originator ID 属性 : 路由反射器的客户收到反射器发来的路由后自动携带 Originator ID 属性, 在属性域指示出发布这条路由的始发者路由器 ID, 这样接收者就可以知道在反射器群内这条路由从哪个路由器始发, 如果是自己始发则不接收, 可以避免在路由反射器群内的环路 Cluster ID List 属性 : 路由反射器的客户收到反射器发来的路由后自动携带 Cluster ID List 属性, 在属性域内指示出所经过的反射器群列表 ( 反射器群 ID 缺省是反射器的路由器 ID, 可以配置 ), 这样接收者就可以知道该路由在 AS 内部传播时经过了哪些反射器群, 从而避免环路 具体实现方式请参考路由反射过程的范例 2 联盟 (Confederation) 联盟也是为了解决大规模网络中 IBGP 全网连接的问题, 是处理 AS 内部的 IBGP 网络连接激增的另一种方法 联盟是基于一个 AS 可以被分为多个子 AS, 子 AS 内使用 IBGP 全闭合网, 子 AS 之间以及联盟本身与外部 AS 之间使用的 EBGP 连接的一种应用 虽然子 AS 之间的路由经 EBGP 交换, 所有的 IBGP 规则仍然适用, 因此对于 AS 外的路由器来看一个联盟就象一个单一的 AS 联 82
85 深入讨论综述篇 盟和反射器应用时的区别是当 BGP 应用于更大的 AS, 即 AS 内有很多 BGP Speaker 的情况, 这时反射器配置也很复杂的话就可以考虑使用联盟, 联盟的设计思想也是主要基于这一点 联盟特性角色 联盟 ID: 在不属于联盟的 BGP 发言者看来, 属于同一个联盟的多个子自治系统是一个整体, 外界不需要了解内部的子自治系统情况, 联盟 ID 就是标识联盟这一整体的自治系统号 在不属于联盟的 BGP 发言者看来, 属于同一个联盟的多个子自治系统是一个整体, 外界不需要了解内部的子自治系统情况, 联盟 ID 就是标识联盟这一整体的自治系统号 子系统 : 是联盟的组成元素, 该子系统是一个内部 IBGP 全闭合的系统 ; 该子系统对联盟外不可见 子系统 AS 号 : 子系统的 AS 号, 该 AS 号仅在联盟内可见 ; 联盟内子自治系统可以使用私有的 AS 号, 范围为 : , 一个联盟最多可配置 32 个子自治系统 联盟功能 1. 联盟新增的两个属性在 RFC3065 中新增加了两个为联盟定制的属性, 即 : AS_CONFED_SEQUENCE: 有序的子系统号的序列集合 AS_CONFED_SET: 无序的子系统号的序列集合 二则主要区别是后者主要用于存在路由聚合等情况时导致路由属性丢失时使用 ; 增加这两种属性是为了防止联盟内部的环路 2. 属性传递及处理过程对于同一个联盟内部路由属性 NEXT_HOP MED 和 LOCAL_PREFERENCE 的传递, 联盟并没有特殊处理, 故 NEXT_HOP MED 和 LOCAL_PREFERENCE 仍然在联盟内传递 PATH 参数在联盟中进行传递, 对于 AS_CONFED_SEQUENCE 和 AS_CONFED_SET, 联盟内处理方式大致 AS_SEQUENCE 和 AS_SET 相同, 同时 : 1) 当路由在联盟内子自治系统内传递时, 不应修改 AS_PATH 属性 2) 当路由在联盟内子自治系统间传递时 : a) 若第一个 AS_PATH 是 AS_CONFED_SEQUENCE,BGP 将自己的子自治系统 AS 号加在最左端 b) 否则, 创建一个 AS_CONFED_SEQUENCE, 包含自己的子自治系统 AS 号 3) 当向联盟外 EBGP 传递路由时 : a) 若第一个 AS_PATH 是 AS_CONFED_SEQUENCE, 将后续的 AS_CONFED_SEQUENCE 和 AS_CONFED_SET 删除, 至 b) b) 若第一个 AS_PATH 是 AS_SEQUENCE, 则将联盟 AS 加在最左端 c) 若第一个 AS_PATH 是 AS_SET, 增加一个 AS_SEQUENCE, 将联盟 AS 加在最左端 4) 对于本地初始路由的传播 : a) 向本自治系统内 IBGP 发送, 空的 AS_PATH 属性 b) 向联盟内, 本自治系统外 EBGP 发送, 带有 AS_CONFED_SEQUENCE 属性 c) 向联盟外 EBGP 发送, 带有 AS_SEQ 属性 83
86 网络之路 ROUTE TO NETWORK 联盟应用场合 使用联盟之前 : AS 100 RTE RTA EBGP RTB IBGP /8 RTC / /8.2 RTD /8 IBGP IBGP.1.2 图 9 使用联盟之前的情况 在上图中 AS100 域内台路由器都运行 BGP, 如果配置这 4 路由器的 IBGP 逻辑全互连的话会很 麻烦, 需要配置 4 (4-1)/2=6 个 IBGP 邻居关系 使用联盟之后 : RTA EBGP AS 2001 IBGP RTB /8 AS 100 RTE.2 RTC / /8 RTD /8 IBGP IBGP.1.2 AS 2002 图 10 使用联盟之后的情况 84
87 深入讨论综述篇 可以看到在使用联盟之前 AS100 内部配置 IBGP 邻居的工作将很麻烦, 即使配置反射器也较复杂, 在使用联盟后配置 IBGP 邻居的工作就相对简单了 配置联盟后 AS100 的 EBGP 邻居的配置没有变化, 联盟对外仍然表现为一个 AS, 上图中的联盟 ID 为 100, 对外就表现为 AS100, 联盟外部的 BGP Speaker 不了解联盟内子自治系统的情况 联盟内部有两个子自治系统分别为 AS2001 和 AS2002, 子自治系统之间为 EBGP 邻居, 子自治系统内部和普通的自治系统相同 联盟的路由传递过程 环境描述 : 应用图 11 组网网所示,RTA 在 AS 100 内,RTB RTC RTD 和 RTE 均在 AS 200 内,RTB 和 RTE 在子系统 2001 内,RTC 和 RTD 在子系统 2002 内 RTA 的 router id 为 RTB 的 router id 为 RTD 的 router id 为 RTC 的 router id 为 和 RTE 的 router id RTA EBGP AS 2001 IBGP RTB /8 AS 200 RTE.2 RTC / /8.2 RTD /8 IBGP IBGP.1.2 AS 2002 图 11 联盟路由传递过程示意图 1. 从 RTC 上发布一条 /32 的主机路由, 携带 MED 值为 100 [RTC]dis bgp routing-table BGP local router ID : Local AS number : 2002 Paths: 1 available, 1 best BGP routing table entry information of /32: Imported route. From : ( ) Original nexthop: AS-path : (null) Origin : incomplete Attribute value : MED 100, pref-val 0, pre 0 State : valid, local, best, Advertised to such 1 peers:
88 网络之路 ROUTE TO NETWORK 在 RTD 上查看该路由为子系统内路由, 但还路由还未出子系统, 故该路由还未附上自己的 子系统号 ; 该路由的 MDE 值为 100,Localpref 为 100 [RTD]dis bgp routing-table BGP local router ID : Local AS number : 2002 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 100, localpref 100, pref-val 0, pre 255 State : valid, internal-confed, best, Advertised to such 1 peers: 在 RTB 上查看路由已经进入到了子系统 2001 内, 故该路由为子系统外路由且携带 2002 的子 系统号 ; 该路由的 MDE 值为 100,Localpref 为 100, 并未发生变化 [RTB]dis bgp routing-table BGP local router ID : Local AS number : 2001 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Relay Nexthop : Original nexthop : AS-path : (null) Origin : incomplete Attribute value : MED 100, localpref 100, pref-val 0, pre 255 State : valid, external-confed, best, Advertised to such 2 peers: 在 RTE 上参看该路由为子系统内路由且携带 2002 的子系统号 ; 该路由的 MDE 值为 100, Localpref 为 100, 并未发生变化 86
89 深入讨论综述篇 [RTE]dis bgp routing-table BGP local router ID : Local AS number : 2001 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Relay Nexthop : Original nexthop : AS-path : (2002) Origin : incomplete Attribute value : MED 100, localpref 100, pref-val 0, pre 255 State : valid, internal-confed, best, Not advertised to any peers yet 在 RTA 上查看该路由为 EBGP 路由, 并携带对段 200 的子系统号,2002 的子系统号被删掉 了, 同时,MED 和 Localpef 均已经被删掉 [RTA]dis bgp routing-table BGP local router ID : Local AS number : 100 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Original nexthop: AS-path : 200 Origin : incomplete Attribute value : pref-val 0, pre 255 State : valid, external, best, Not advertised to any peers yet 2. 在 RTA 上发布一条 /32 的主机路由,MED 为 200 [RTA]dis bgp routing-table BGP local router ID : Local AS number : 100 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Original nexthop: AS-path : (null) Origin : incomplete Attribute value : MED 200, pref-val 0, pre 0 State : valid, local, best, Advertised to such 1 peers:
90 网络之路 ROUTE TO NETWORK 在 RTB 上查看该路由为 EBGP 路由, 并携带 100 的 AS 号,MED 为 200,AS-path 为 100 [RTB]dis bgp routing-table BGP local router ID : Local AS number : 2001 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Original nexthop: AS-path : 100 Origin : incomplete Attribute value : MED 200, pref-val 0, pre 255 State : valid, external, best, Advertised to such 2 peers: 在 RTE 上查看该路由为子系统内路由,MED 为 200,Localpref 为 100,AS-path 为 100 [RTE]dis bgp routing-table BGP local router ID : Local AS number : 2001 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Relay Nexthop : Original nexthop: AS-path : 100 Origin : incomplete Attribute value : MED 200, localpref 100, pref-val 0, pre 255 State : valid, internal-confed, best, Not advertised to any peers yet 在 RTD 上查看该路由为子系统外路由, 路由 MED 为 200 Localpref 为 100, 并且携带始发 AS 号 100 和 AS 200 内子系统 2001 子系统号 [RTD]dis bgp routing-table BGP local router ID : Local AS number : 2002 Paths: 1 available, 1 best BGP routing table entry information of /32: From : ( ) Relay Nexthop : Original nexthop: AS-path : (2001)100 Origin : incomplete Attribute value : MED 200, localpref 100, pref-val 0, pre 255 State : valid, external-confed, best, Advertised to such 1 peers:
91 深入讨论综述篇 联盟的环路避免 联盟可以很容易地检测到 AS 内的选路循环, 因为子 AS 之间运行的是 EBGP AS 路径列表用于检测离开一个子 AS 并想回到同一子 AS 的选路更新 这种想要回到它始发的子 AS 的选路更新被检测到是因为子 AS 会发现自己的子 AS 号码在这个更新的 AS 路径内 联盟的缺陷是 : 从非联盟向联盟方案转变时, 要求路由器重新进行配置, 逻辑拓扑基本上也要改变 ; 而且, 若没有手工设置的 BGP 策略, 通过联盟的选路有可能选不到最佳的路径 如果 AS 内部既没有配置全连接也没有配置 RR/ 联盟时, 就可能产生转发黑洞 那么如何来解决这样的问题呢? 那我们就不得不提到 BGP 的同步功能了 BGP 的 同步 所谓 同步, 是指 IGP 和 BGP 之间的同步, 亦即 BGP 一直要等到 IGP 在本 AS 中传播了同一条路由后, 再给其他各 AS 通告过渡路由 也就是说: 在通告给其他 AS 一条路由时, 先要保证本 AS 内部的路由器 ( 无论是否运行 BGP 协议 ) 都要知道去往该条路由的路径 同步的目的是避免出现误导外部 AS 路由器的现象发生, 防止一个 AS( 不是所有的路由器都运行 BGP) 内部出现路由黑洞, 即向外部通告了一个本 AS 不可达的虚假的路由 BGP 同步功能 起用同步功能后在接收到 IBGP 邻居发过来的路由后都会查看该路由是否已经在 IGP 路由表中, 如果 IGP 路由表中有这条路由,BGP 路由表才会将这条路由置为有效 ; 如果 IGP 路由表中没有该路由则 BGP 表中的该条路由是无效的 如果关闭同步功能, 在收到 IBGP 邻居发来的路由更新后不检查 IGP 表是否有该路由, 而直接将该路由置为有效 但是还存在以下两种情况下可以安全地关闭同步 : 1 本 AS 不是一个过渡的 AS; 2 本 AS 内所有 Transit 路由器都运行 BGP 且全连接 BGP 同步的应用场合 AS 200 AS 100 AS 300 RTC RTA RTB RTE EBGP IBGP EBGP RTD 图 12 同步的应用场合 89
92 网络之路 ROUTE TO NETWORK 在上图中,RTD 没有运行 BGP,RTC 关闭了同步功能 从 RTA 始发路由 /32, 向 RTE 传递 RTB 和 RTC 收到该路由后将其置为有效, RTC 把该路由向 RTE 进行传递, 在 RTE 上该路由为生效路由 但是在 RTC 上并未检查该路由在 IGP 中是否存在 如有在 RTE 上存在到 的流量,RTE 把改流量转发给 RTC,RTC 把该流量转发给 RTD, 但是 RTD 上不存在 /32 的 IGP 路由, 故流量丢失 如 RTC 开启 BGP 同步功能, 当 RTC 检测不到 /32 的 IGP 路由时,RTC 便不会把该路由传递给 RTE, 这时,RTE 可能会把该流量转给给其他流量, 也避免流量丢失的情况 如果要解决该问题, 需要在 RTB 上把 /32 路由引入到 IGP 中, 并在 IGP 中进行传递, 这样并开启同步功能, 就不会出现 AS 内路由黑洞的问题 BGP 同步的问题 如果一个 AS 内部存在非 BGP 路由器, 那么就出现了 BGP 和 IGP 的边界, 需要在边界路由器将 BGP 路由发布到 IGP 中, 才能保证 AS 所通告到外部的 BGP 路由在 AS 内部是连通的 实际上是要求 BGP 路由和 IGP 路由的同步 如果将 BGP 路由发布到 IGP 中, 由于 BGP 路由量一般较大, 那么结果是 IGP 路由器要维护大量的外部路由, 对路由器的 CPU 和内存以及 AS 内部的链路带宽的占用将带来巨大的开销 ; 同时会带来收敛延时增加 通常 BGP 协议的运行需要关闭同步 总结 联盟和反射两种技术都是为了解决大规模网络中 IBGP 必须全连接的问题, 两种技术都有自己的特点, 反射技术简单易理解, 不需要更改现有的网络拓扑, 兼容性好, 反射器对于客户来说是透明的, 群与群之间仍然需要全连接, 适用于中到大规模网络 ; 而联盟技术比较复杂, 联盟内所有的路由器都需要支持联盟技术, 但子自治系统之间是特殊的 EBGP 连接, 因此不需要全连接, 适用于大规模网络 二者需要根据实际需求进行部署 90
93 深入讨论综述篇 BGP 选路解析文 / 贾欣武 解析 BGP 选路的意义 BGP 选路概述 每个路由协议都有自己计算路由的方法, 计算路由的方法称为路由算法,BGP 选路方法就是 BGP 的路由算法,BGP 运行路由算法的目的是计算出有效路由进而优选出最优路由, 选路算法是 BGP 路由协议的核心算法之一 BGP 选路与常见 IGP 选路的区别 众所周知, 链路状态算法的路由协议, 其路由非通告所得, 而是计算所得 在采用链路状态算法的路由协议如 OSPF 中, 在其作用域内无法人为地干涉路由优选, 即算法不可改变, 在路由器的实现中在代码中固定, 人为干涉的结果会导致路由无法计算或计算出错, 在链路状态算法的作用域之间, 有相对比较简单的计算规则, 一般也没有必要人为地去干涉选路 ( 如 OSPF 协议的区域间路由 ) 以上原因导致 OSPF 的路由计算对网络管理员来说比较傻瓜化, 大部分的选路工作由机器完成, 管理员参与的部分极少 基于距离矢量的 IGP, 如 RIP 由于路由协议中携带的信息量极少, 可供选路决策的条件很少, 所以讨论其协议内部的路由优选意义不大 BGP 选路是一个比较复杂的过程, 需要深入讨论, 原因是 BGP 的设计者将需要大部分由代码固化完成的工作分了一部分出来 允许 管理员参与完成, 在协议中也包含了丰富的优选参数, 可供选路时自动或人为地进行控制与决策 这也说明, 关于 BGP 的主要工作内容由两部分 : 在 AS 之间及 AS 内部传递路由 自动完成 控制 管理 优化路由 自动或由管理员手动完成通过选路, 我们可以看出设计者设计如此多属性的原因, 与通用的 IGP 协议采用单一 Metric 计算路由相比,BGP 的众多属性更细致地反映一条路由的 历史背景, 在选路过程中可以自动或手动地利用这些丰富的材料进行综合考虑, 进而更为细腻地优选和控制路由 91
94 网络之路 ROUTE TO NETWORK BGP 选路过程解析 选路规则 BGP IPv4 选路规则如下 : 下一跳 (Next_Hop) 不可达的路由及其他无效路由不参与优选 ; 优选协议优先级值低的路由 ; 标签路由 ( 有 LSP 隧道 ) 优于非标签路由 ; 若配置了 Preferred-value 值, 优选值高的 ; 优选本地优先级 (Local_Pref) 最高的路由 ; 优选本路由器始发的路由 ; 优选 AS 路径 (AS_Path) 最短的路由 ; 依次选择 Origin 属性值为 IGP EGP Incomplete 的路由 ; 优选 MED 值最低的路由 ; EBGP 路由优于联盟 EBGP 路由, 联盟 EBGP 路由由于 IBGP 路由 ; 优选下一跳 (Next_Hop) 花费 (Cost) 值最低的路由 ; 优选 Cluster_List 长度最短的路由 ; 优选 Originator_ID 最小的路由 ; Router ID 值小者优先 ; BGP 会话地址小者优先 以上优选规则是从前到后依次比较的, 只有在前一个条件无法选出最优路由的情况下才考虑紧接的后一个条件 实例解析选路过程 在本小节, 通过实例的方式, 按照以上选路规则解析路由器在选路过程中各步骤的决策条件 由于 BGP 属性丰富, 实际使用环境千变万化, 在实际使用中会出现各种应用场景, 一个完整体现所有决策过程的拓扑会很复杂, 为了简洁明了地展开, 本文用简化的拓扑来解析每个决策步骤 RA RB / / /24 RD /24 图 1 说明 : RD RE 属于 AS200,RD 与 RE 建立 IBGP 连接,RB 与 RD 建立 EBGP 连接,RC 与 RE 建立 EBGP 连接 RD RE 属于 AS200, 建立 Full mesh IBGP 连接 AS / /24 RC RE AS200 RA 环回地址 : RB 环回地址 : RC 环回地址 : 图 1 基本选路拓扑 92
95 深入讨论综述篇 步骤 1:NEXT_HOP 不可达的路由及没有隧道的标签路由都是无效路由, 不参与优选解析 :RA 从 RB 和 RC 分别收到关于 /24 的路由, 但下一跳没有改变, 下一跳属于 AS 外部路由,RA 不可达, 所以下面两条路由没有星号 (*) 标志, 都是无效的路由 在 RA 上的 BGP 表信息如下 : [RA]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn i / i i i 步骤 2: 优选协议优先级低的路由 解析 : 在路由有效的情况下比较路由优先级 通过路由策略修改协议优先级,RA 从 RC 收 到的路由优先级修改为 250, 而 RA 从 RB 收到的路由优先级为缺省的 255, 所以在 RA 上优选的结 果是从 RC 收到的路由更优 [RA-bgp]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i [RA-bgp]disp ip rout Routing Table : Public Summary Count : 1 Destination/Mask Proto Pre Cost NextHop Interface /24 BGP GE0/1.112 步骤 3: 标签路由优于非标签路由解析 : 取消上一步修改路由优先级的路由策略配置,RA 从 RB 和 RC 收到的路由优先级相同, 根据协议优先级无法选出最优路由 继续比较, 首先考虑的条件是该路由是否是标签路由 ( 是否存在 LSP 隧道 ) 重新配置路由策略, 使 RC 向 RA 发送路由的同时分发标签, 带有标签的路由优于非标签路由, 所以优选从 RC 收到的路由 93
96 网络之路 ROUTE TO NETWORK [RA]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i [RA]disp ip rout Routing Table : Public Summary Count : 1 Destination/Mask Proto Pre Cost NextHop Interface /24 BGP GE0/1.112 [RA]display mpls lsp include LSP Information: BGP LSP FEC In/Out Label In/Out IF Vrf Name /24 NULL/1025 -/- [RA-route-policy]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: Label information (Received/Applied): 1025/NULL From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Not advertised to any peers yet BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : MED 0, localpref 150, pref-val 0, pre 255 State : valid, internal, Not advertised to any peers yet 步骤 4:Preferred-value 值高的路由优先解析 : 取消上一步分发标签的策略,RA 从 RB 和 RC 收到的路由都没有 LSP 隧道, 所有前述条件无法选出最优路由, 系统将进一步比较 Preferred-value 值优选路由 配置路由策略, 使 RA 从 RC 收到的路由 Preferred-value 值较高,RA 优选从 RC 收到的路由 94
97 深入讨论综述篇 [RA-bgp]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i [RA-bgp]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : localpref 150, pref-val 0, pre 255 State : valid, internal, Not advertised to any peers yet BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : MED 0, localpref 100, pref-val 30, pre 255 State : valid, internal, best, Not advertised to any peers yet 步骤 5:Local_Preference 值高的路由优先 解析 : 在 Preferred-value 值相同的情况, 进一步比较 Local_Preference 值优选路由, 取消上一步修改 Preferred-value 值的路由策略,RA 从 RB 收到的路由 Local_Pre 值较高, 所以 优选从 RB 收到的路由 [RA-route-policy]disp bgp ro Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i [RA-route-policy]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: ( 接下页 ) 95
98 网络之路 ROUTE TO NETWORK ( 接上页 ) AS-path : 200 Origin : igp Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, Not advertised to any peers yet BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : MED 0, localpref 150, pref-val 0, pre 255 State : valid, internal, best, Not advertised to any peers yet 步骤 6: 本地路由优先 解析 : 在 RA 上用路由聚合命令生成本地路由, 并且使本地生成路由 IBGP 路由 EBGP 路 由的路由优先级都相等 这时其他先决条件都相等的情况下, 本地生成的路由优先 [RA-route-policy]display bgp routing-table Total Number of Routes: 3 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / i * i i [RA-route-policy]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : (null) Origin : igp Attribute value : localpref 100, pref-val 0, pre 150 State : valid, internal, This route is an atomic-aggregated route Aggregator : AS 100, Aggregator ID: Not advertised to any peers yet BGP routing table entry information of /24: Imported route. From : ( ) Original nexthop: AS-path : (null) Origin : igp Attribute value : localpref 100, pref-val 0, pre 150 State : valid, local, best, This route is an aggregated route Aggregator : AS 100, Aggregator ID: Advertised to such 1 peers:
99 深入讨论综述篇 步骤 7:AS-Path 较短的路由优先 解析 : 在前述条件都相同的情况下, 将进一步比较 AS-Path 长度来优选路由 配置添加 AS 号的路由策略,RA 从 RC 收到关于 /24 的路由 AS-path 中包含两个 AS 号, 从 RB 收到的路 由中包含三个 AS 号, 在其它先决条件都相同的情况下,RA 从 RC 收到的路由 AS-path 列表相对更 短, 所以优选从 RC 收到的路由 AS_SEQ 类型的 AS-path 长度为所包含的 AS 个数,AS_SET 类型的 AS-path 长度为 1, 联盟 AS 类型不计入 AS-path 长度 [RA-bgp]display bgp routing-table Total Number of Routes: 4 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i 步骤 8: 依次选择 Origin 属性值为 IGP EGP Incomplete 的路由 解析 1: 在 AS-Path 长度相同的情况下将进一步比较 Origin 属性的值 下表显示 RA 从 RB 收到的路由 origin 属性为 incomplete, 从 RC 收到的路由 origin 属性为 egp, 在其他先决条件都相等的情况下,origin 属性 egp 优于 incomplete,ra 优选从 RC 收到的 路由 [RA-bgp]display bgp routing-table Total Number of Routes: 4 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / e * i ? 解析 2: 下表显示 RA 从 RB 收到的路由 origin 属性被修改为 igp, 从 RC 收到的路由 origin 属 性仍然为 egp, 在其他先决条件都相等的情况下,origin 属性 igp 优于 egp, 所以最优路由发生 变化, 从 RB 收到的路由变成最优路由 [RA-route-policy]display bgp routing-table Total Number of Routes: 4 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i e 总结 :IGP 优于 EGP,EGP 优于 incomplete 97
100 网络之路 ROUTE TO NETWORK 步骤 9: 优选 MED 值最低的路由 解析 1: 取消上一步修改 Origin 属性的路由策略, 在 Origin 属性及其他先决条件都无法比 较出最优路由的情况下,MED 属性值小的路由优先, 下表 RA 从 RC 收到关于 /24 的路由 MED 值更低所以更优 [RA-route-policy]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / e * i e 步骤 10: 依次优选 EBGP 路由 联盟 EBGP 路由 IBGP 路由 AS65001 RB /24 RD RA / / / /24 RC /24 AS100 AS65002 RE AS /24 图 2 联盟选路拓扑 图 2 说明 : RA 和 RB 属于联盟子系统 65001,RC 属于联盟子系统 65002; RA 与 RB 建立联盟子系统内 IBGP 邻居关系 ; RA 与 RC 建立联盟子系统间 EBGP 邻居关系 ; RA 与 RE 建立普通 EBGP 邻居关系 解析 1: 在图 2 中,RA 分别从 RB RC RE 收到路由, 在本步骤前的其他先决条件都相同的 情况下优选来自 EBGP 的路由,EBGP 路由优于联盟 EBGP 和 IBGP 路由, 所以 RA 优选来自 RE 的路 由 98
101 深入讨论综述篇 [RA-bgp]display bgp routing-table Total Number of Routes: 3 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *> / i * i (65002) 200i * i i 解析 1: 当 EBGP 路由被撤销后, 重新优选, 由于联盟 EBGP 路由优于 IBGP 路由, 所以来自 RC 的路由优于来自 RB 的路由 [RA-GigabitEthernet0/1.110]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / (65002) 200i * i i 步骤 11: 优选下一跳 Cost 值最低的路由 解析 : 在其他先决条件都相等的情况下将比较下一跳的 Cost 值,RA 从 RC 收到的路由下一 跳为 RC 的环回地址 , 到达该地址的 IGP cost 为 13;RA 从 RB 收到的路由下一跳为 RB 的环回地址 , 到达该地址的 IGP cost 为 15 因此优选从 RC 收到的路由 [RA-GigabitEthernet0/1.112]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i [RA-GigabitEthernet0/1.112]disp ip rout Routing Table : Public Summary Count : 1 Destination/Mask Proto Pre Cost NextHop Interface /32 OSPF GE0/1.111 [RA-GigabitEthernet0/1.112]disp ip rout Routing Table : Public Summary Count : 1 Destination/Mask Proto Pre Cost NextHop Interface /32 OSPF GE0/
102 网络之路 ROUTE TO NETWORK 步骤 12: 优选 Cluster_List 长度最短的路由 RA RB(RR) RC(RR) AS100 图 3 根据 Cluster_List 选路 RD /24 RE(RR) 在图 3 中,BGP 会话关系用黑色链路表示, 绿色线表示 RB 向 RA 反射从 RD 收到的路由 ; 红色线表示 RD 发出的路由经过两个反射器 (RE 和 RC) 反射到 RA R A 从 R B 收到的路由 Cluster_List 中只有一个条目 ; RA 从 RC 收到的路由 Cluster_List 中有两个条目 所以从 RB 收到的路由更优 [RA]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / ? * i ? [RA]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : (null) Origin : incomplete Attribute value : localpref 100, pref-val 0, pre 255 State : valid, internal, best, Originator : Cluster list : Not advertised to any peers yet BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : (null) Origin : incomplete Attribute value : localpref 100, pref-val 0, pre 255 State : valid, internal, Originator : Cluster list : , Not advertised to any peers yet 100
103 深入讨论综述篇 步骤 13: 优选 Originator_ID 最小的路由 ; 在前述步骤未选出最优路由的情况下, 进一步比较 Originator_ID 在图 4 中,BGP 会话关系用黑色链路表示, 绿色线表示 RB 向 RA RA 反射从 RD 收到的路由 ; 红色线表示 RC 向 RA 反射从 RE 收到的路由 解析 :RA 从 RB 收到的路由中 Originator_ID 相对更小, 所以从 RB 收到的路由更优 AS100 RB(RR) RC(RR) /24 图 4 根据 Originator_ID 选路 RD RE isplay bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / ? * i ? [RA]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : (null) Origin : incomplete Attribute value : localpref 100, pref-val 0, pre 255 State : valid, internal, Originator : Cluster list : Not advertised to any peers yet BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : (null) Origin : incomplete Attribute value : localpref 100, pref-val 0, pre 255 State : valid, internal, best, Originator : Cluster list : Not advertised to any peers yet 101
104 网络之路 ROUTE TO NETWORK 步骤 14:Router ID 值小者优先 RA 从 RB 和 RC 收到的路由在前述步骤都无法优选出路由的情况下需要进一步比较 Router ID 来选出最优路由, 在此步骤中 Router ID 值小的路由优先 解析 :RB 的 BGP Router ID 为 ;RC 的 BGP Router ID 为 所以在 RA 的 BGP 路由表中, 从 RC 收到的路由优先 [RA-bgp]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i [RA-bgp]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : localpref 100, pref-val 0, pre 255 State : valid, internal, best, Not advertised to any peers yet BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, Not advertised to any peers yet 步骤 15: 建立 BGP 会话的地址值小者优先 RA 从 RB 和 RC 收到的路由在前述步骤都无法优选出路由的情况下需要进一步比较建立 BGP 会话的地址值来选出最优路由, 在此步骤中 BGP 会话地址值小的路由优先 解析 : 在图 1 中 RB 的环回地址为 ,RB 与 RA 的 BGP 会话通过此地址建立 ;RC 的环回地址为 ,RC 与 RA 的 BGP 会话通过此地址建立 因为 RB 与 RA 建立 BGP 会话的地址相对更小, 所以在 RA 的 BGP 路由表中, 从 RB 收到的路由优先 102
105 深入讨论综述篇 [RA-bgp]display bgp routing-table Total Number of Routes: 2 BGP Local Router ID is Status codes: * - valid, > - best, d - damped, h - history, i - internal, s - suppressed, S - Stale Origin : i - IGP, e - EGP,? - incomplete Network NextHop MED LocPrf PrefVal Path/Ogn *>i / i * i i [RA-bgp]display bgp routing-table BGP local Router ID : Local AS number : 100 Paths: 2 available, 1 best BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : MED 0, localpref 100, pref-val 0, pre 255 State : valid, internal, best, Not advertised to any peers yet BGP routing table entry information of /24: From : ( ) Relay Nexthop : Original nexthop: AS-path : 200 Origin : igp Attribute value : localpref 100, pref-val 0, pre 255 State : valid, internal, Not advertised to any peers yet 优选路由的策略 优选路由的策略方法有很多, 简单举例如下 : 影响某台路由器本地选路结果建议配置路由策略在本地修改 Preferred-value 来影响选路过程 ; 由于 Preferred-value 值不属于路由属性, 修改后只在本地生效, 不会随路由信息传播 但影响本地选路后,BGP 只发送最优路由, 对其他路由器也有一定的影响 影响 IBGP 邻居的选路如果希望影响本 AS 内部的路由器优选自己发出的路由, 建议通过修改 Local_Preference 属性值来实现, 在图 1 中,RB 向 RA 发送的路由中 Local_Preference 属性值为 150,RC 向 RA 发送的路由中 Local_Preference 属性值为缺省值 100, 在 RA 上将优选从 RB 收到的路由, 出 AS 的流量将通过 RB 发向 AS200 Local_Preference 属性可以向所有 IBGP 邻居发送, 可以对本 AS 内部所有的 IBGP 邻居选路产生影响 103
106 网络之路 ROUTE TO NETWORK 影响 EBGP 邻居的选路如果希望 EBGP 邻居优选自己发出的路由, 建议通过修改 MED 属性值来实现, 在图 1 中,RD 向 EBGP 邻居 RB 发送的路由中 MED 属性值为 20,RE 希望 AS100 中的路由器优选自己发出的路由, 所以向 EBGP 邻居 RC 发送的路由中 MED 属性值为 15, 低于 RD 向 RB 发送路由的 MED 值, 因为 MED 值低的路由更优, 在 AS100 中将优选来自 RE 的路由 在使用 MED 属性时须注意, 利用 MED 值进行优选是有一定条件的, 来自不同 AS 的路由不能根据 MED 值优选路由 优选过程总结 从以上选路方式可以看出, 在选路过程中, 人为干预的决策条件 ( 如 :Preferredvalue) 以及本自治系统内使用的管理属性 ( 如 :Local_Preference) 等条件都放在选路决策的前几步, 而随机条件 ( 如 :Router ID 和会话地址的决策 ) 都在最后, 目的是使路由优选的管理和控制更加方便, 这样可以在各自治系统内部按照统一的策略来管理和计算路由 104
107 深入讨论综述篇 BGP Graceful Restart 文 / 陈磊 Graceful Restart 简介 关于 GR 通用的基本概念, 原理, 以及作用, 请参考 网络之路 -OSPF 专题讨论 中的文章 OSPF Graceful Restart 该文对于 GR 的来源, 作用和通原理做了详细的介绍, 本文将跳过这方面, 直接进入 BGP GR 实现的介绍 BGP Graceful Restart 概述 GR 中的角色 从 GR 中完成的任务来看, 分为 GR Restarter( 协议重起的设备 ) 和 GR Helper( 协助完成协议重起的设备 ) 两个角色 在本文中, 将 BGP GR 过程中的 GR Restarter 称为 Restarting Speaker,GR Helper 称为 Receiving Speaker GR 对 BGP 的要求 为了实现 GR,BGP 必须满足以下几点 : 在邻居之间通告各自的 GR 能力 ; GR 被触发后, 通知邻居 GR 事件的发生 ; Receiving Speaker 上, 在与 Restarting Speaker 之间的 BGP 会话所依赖的 TCP 连接中断后或者重建过程中, 需要 105
108 网络之路 ROUTE TO NETWORK BGP Graceful Restart 保留并使用从 Restarting Speaker 学来的路由, 并进行相应的标记和维 护 ; GR 正常结束时机的确定, 以及异常退出的条件 ; 为了做到以上几点,BGP 引入了如下的变化 : Marker for End-of-RIB 定义 : 一个不包含任何 NLRI, 或 withdrawn NLRI 的 update 被定义 为 Marker for End-of-RIB 如 : 当一个 BGP 连接建立完成后, 设备会向邻居发送自己的 BGP 路 由 当所有路由发送完成后, 会在最后一个 Update 后, 再发送一个空的 Update, 这个空的 Update 就是 Marker for End-of-RIB 被用作路由信 息表结束的标志 End-of-RIB 可以帮助设备确认已经学习到了邻居所有的路由, 是 GR 正常结束的条件之一 Graceful Restart Capability GR 引入的新 BGP capability 类型 该能力放在 BGP 的 Open 报文中 携带, 用来在邻居之间通告各自的 GR 能力 ; 同时, 在发生 RP(Route Processor) 切换事件后, 通知对端 GR 状态的开始 号组成 该 CAP 的定义如下 : Capability code::64 Capability length: 可变长度 Capability value: 由 Restart Flags,Restart Time, 地址族编 可以按照不同的地址族, 分别通告其 GR 能力 Restart Flags (4 bits) Restart Time in seconds (12 bits) Address Family Identifier (16 bits) Subsequent Address Family Identifier (8 bits) Flags for Address Family (8 bits)... Address Family Identifier (16 bits) Subsequent Address Family Identifier (8 bits) Flags for Address Family (8 bits) Restart Flags: 该 Flag 只使用了最高位的一个 bit 当 Restarting Speaker 发生 RP 切换后, 新的 RP 重新触发 BGP 邻居的建立, 发 送的第一个 OPEN 报文中, 该 flag 会置位 用来告知 Receiving Speaker 邻 106
109 深入讨论综述篇 居, 本端的 BGP 开始 GR Restart time: 由 Restarting Speaker 告知 Receiving Speaker,GR 过 程中, 邻居关系建立需要的时间上限 AFI,SAFI,Flags for Address Family: 这三个字段组合, 实现了 GR 能力的通告 AFI/SAFI 是 MP-BGP 中用来区分不同网络层协议的地址族编号 每 个地址族都对应了一个 Flags for Address Family, 表示相应的地址族对于 GR 的支持能力 该 Flag 也只使用了最高位的一个 bit 当 Restarting Speaker 发生 重启, 如果能够保证在重启过程中, 相应地址族报文的转发不受影响, 其发送的 OPEN 报文中, 会将相应的 AFI 的 Flags for Address Family 置位 Graceful restart capability 实现 GR 能力通告的一些补充 如果邻居的 OPEN 报文中含有 Graceful restart capability, 表示该邻居一 定会在路由发送完成之后发送一个 End-of-RIB marker 该标记可以帮助加速路 由表的收敛 无论设备是 GR restarter 还是 GR helper, 都要求设备在 Open 报文中包含 Graceful restart capability 以标识自己对于 GR 的支持 同时, 也表示自己 支持 End-of-RIB marker, 邻居可以通过该标志来判断自己路由表的结束 如果邻居的 OPEN 报文中的 Graceful restart capability 的 capability v a l u e 为空, 表示邻居是一个 G R a w a r e 设备 : 能够作为一个 R e c e i v i n g Speaker, 可以识别 Restarting Speaker 的 GR 发起信令, 配合在 Restarting Speaker 重起期间, 保留从 Restarting Speaker 学习到的路由转发表项 ; 但是, 该设备自己, 没有在协议重启过程中, 保持路由转发表项的能力, 不能做 GR. BGP 路由的 Stale 状态 Receiving Speaker 设备在得知邻居进入 GR 后, 会将从该邻居学来的 BGP 路 由标记为 Stale 状态 标记为 Stale 状态的路由, 在转发和选路方面, 与其他路由 没有区别 当 GR 结束后,Stale 路由会根据新路由的学习情况被 unmark stale 状 态或者被删除 BGP Gracefu Restart 过程的行为约束 GR 的流程 RFC4724 定义了 BGP GR 的详细流程, 结合 ComwareV5 的 GR 实现, 如图 1: 107
110 网络之路 ROUTE TO NETWORK Restarting Speaker Receiving Speaker TCP 层通知 TCP 连接 Fail RP 切换后, 开始建立新的 BGP 连接 fib 表保留继续使用, 路由表和邻居状态因为 RP 切换清空重置 发送 Restart 置位的 OPEN 报文 Forwarding 置位, 表示相应的 Address family 在 BGP restart 的过程中, 可以维持转发 OR 重置 BGP 连接标记该邻居发出的路由状态为 stale, 照常使用 timer restart timer wait-for-rib 我司平台 : 不停止选路, 但是不向 fib 下发 连接建立 RFC4724: 停止路由选路 收到所有邻居的 End of RIB Update 报文发送路由 路由发送完成后, 发送 End of RIB 连接建立 我司平台 该地址族退出 GR 路由表开始刷新 fib RFC4724 等待其他 IGP 收敛 等待其他路由协议通知路由管理退出 GR 恢复选路 等待 60S ( 用于路由迭代 ) 开始发送路由 Update 报文发送路由 使用收到的路由 unmark stale 状态的路由 发送完成 End of RIB 路由发送完成后, 发送 End of RIB 删除仍然标记为 stale 状态的来自该邻居的路由 GR 结束 GR 结束 图 1 BGP GR 流程图 Restarting Speaker 的行为约定 BGP 邻居重新建立前 RP 切换前 : Restarting Speaker 和 Receiving Speaker 之间在建立 BGP 邻居时, 通过 Open 报文中 的 Graceful restart capability 来交互两者对于 GR 的支持, 同时, 使用 End-of-RIB marker 来标识各自路由表的结束 108
111 深入讨论综述篇 RP 切换后, 新的 RP 开始启动 BGP 连接 : 保证 GR 相关地址族的转发表项不受影响, 在重启过程中能够正常使用 从 Receiving Speaker 转发过来的数据报文仍然能够正常转发 重启 BGP 连接时, 发送的 OPEN 报文中,restart 位置位 ;GR 过程中转发不受影响的地址族的 Flags for Address Family 置位 通知 Receiving Speaker GR 开始, 同时, 告知其哪些地址族可以实现 GR BGP 邻居重新建立后 (RFC4724): 连接建立后, 开始从邻居接收 update 信息, 在此过程中, 不进行 BGP 的路由选路, 不向外发布路由 防止在路由收敛完成前发送了错误的路由导致环路或者路由黑洞 等待 Restarting Speaker 收到了所有邻居的 End-of-RIB marker( 不包括 restart 位置位的设备和 Open 报文中没有 Graceful restart capability 的设备 ) 这里的所有邻居中, 不包括 restart 位置位的设备, 是为了防止当两台相邻的设备同时重启进行 GR 时, 都等待对方的 End-of-RIB marker 导致死锁 再等待其他路由协议通知路由收敛完成, 才恢复选路, 刷新转发表, 并向邻居发布路由 路由发布完成后, 也需要发送 End-of-RIB marker BGP 邻居重新建立后 ( 我司 V5 平台实现 ): 连接建立后, 开始从邻居接收 update 信息, 在此过程中, 不向外发布路由, 但是, 路由选路仍然进行, 但是不刷新 FIB; Restarting Speaker 等待收到所有邻居的 End-of-RIB marker 后, 通知路由管理该地址族退出 GR, 此时, 开始向 FIB 表刷新路由 等待路由管理通知所有的路由协议都已经退出 GR 后, 开启一个 60s 的定时器 ; 这段时间用来等待路由管理完成路由的迭代, 定时器超时后, 开始向 Receiving Speaker 发送路由, 路由发送完成后, 需要发送 End-of-RIB marker BGP 退出 GR 的条件 : 按照上面的流程, 正常结束退出 GR 定时器 wait-for-rib 超时, 仍然没有收到所有邻居的 End-of-RIB marker, 则退出 GR 该定时器用户可配, 用来限制 Restarting Speaker 学习路由的时间上限 109
112 网络之路 ROUTE TO NETWORK Receiving Speaker 的行为约定 进入 GR helper 状态的条件 : TCP 层通知设备, 与 Restarting Speaker 的 TCP 连接中断 被动开始 收到 Restarting Speaker 发出的新的 Restart 置位的 OPEN 报文 主动开始侦测到 GR 事件后 : 重置与 Restarting Speaker 的 BGP 连接, 重置过程中不发送 NOTIFICATION 报文 标记从 Restarting Speaker 学到的相关地址族的路由为 stale 状态, 当作正常的路由信息使用 使用 stale 标记进行区分, 方便之后的路由管理 Receiving Speaker 设备的 Restart 位不置位, 除非 Receiving Speaker 设备自己也进行 GR 这里指两端同时进行 GR 的情况连接建立后 : 向 Restarting Speaker 发送路由, 路由信息发送完成后, 发送 End-of-RIB marker 即使没有路由需要发送, 也要发送 End-of-RIB marker 以告知对方路由表的完结 收到 Restarting Speaker 发送的路由后, 需要使用这些路由刷新 stale 状态的路由 当收到 Restarting Speaker 发送的 End-of-RIB marker 后, 需要立即删除该邻居相关地址族的所有仍然处于 stale 状态的路由 GR helper 状态的退出条件 : 收到 Restarting Speaker 发出的路由和 End-of-RIB marker, 刷新自己的 stale 路由, 正常退出 定时器 Restart timer 超时, 与 Restarting Speaker 的邻居关系仍然没有建立, 则退出 GR helper 状态, 删除所有标记位 stale 的路由 该定时器用户可配, 用来控制 GR 过程的时间 与 Restarting Speaker 的邻居建立后, 如果在其 OPEN 报文中没有 Graceful restart capability, 或者 Graceful restart capability 中没有某一个地址族, 或者某个地址族的 Flags for Address Family 没有置位, 则删除该邻居所有相关地址族的 stale 路由 GR 导致的安全问题 支持 GR 的设备上, 一个新 BGP 连接的建立, 会导致旧连接的中断 这使得设备有可能受到 DOS 攻击 解决方法是对 BGP 连接做认证 110
113 深入讨论综述篇 常用 BGP AS_PATH 正则表达式应用 文 / 杨默寒姜杏春 前言 BGP 协议提供了非常丰富的路由策略, 尤其是在对路由过滤与路由选择上有其它路由协议不可比拟的优势 这样给了使用者一个没有限制的舞台 BGP 就像一道好的高考题一样, 应用它的时候考察了我们的分析能力 应用能力以及发散思维能力 BGP 路由表, 也可以称之 Internet 路由表, 目前规模已经达到十几万 在面对庞大的 Internet 路由表时, 我们不免需要进行路由过滤 利用地址前缀去过滤 BGP 路由, 在如此大规模的路由表时, 一来有可能配置比较繁琐, 二来有新的路由加入不好维护, 所以提出了 BGP 利用 AS_PATH 作过滤的办法 由于 Internet 核心 AS 的分布都是有记录的, 所以利用 AS 的过滤更有针对性, 例如可以使用 AS_PATH 作过滤, 解决过滤从某个 AS_PATH 始发的全部路由, 只需一个 AS_PATH 列表即可, 当然利用 AS_PATH 过滤可以解决的问题远不仅如此, 这还需要我们在下文中慢慢体会 AS_PATH 格式 AS_PATH 与正则表达式介绍 首先让我们来认识一下 BGP 的 AS_PATH 属性 AS_PATH, 公认必遵属性 这个属性在传递 UPDATE 报文中标识了到达一个目的地所经过的 AS 信息 AS_PATH 有 4 种类型 : AS_SEQUENCE( 用于路由 AS 路径记录 ) AS_SET( 用于聚合路由的明细路由 AS 集合 ) AS_CONFED_SEQUENCE( 用于联盟路由 AS 路径记录 ) AS_CONFED_SET( 用于联盟聚合路由 ) 111
114 网络之路 ROUTE TO NETWORK 让我们看看 AS_PATH 在 BGP 路由表中的显示格式, 如图 1: AS_PATH: ( ) [ ] { } AS_CONFED_SEQUENCE AS_CONFED_SET AS_SEQUENCE AS_SET 从 AS_PATH 的显示格式看出,AS_PATH 可以看成一个由数字 0-9, ( ), [ ], {} 和空格组成的字符串 当然例子中是最复杂的格式, 实际应用中并不是所有字段都有填 充的 正则表达式常用操作符 当我们想利用匹配 AS_PATH 做路由过滤的时候, 那么怎么实现对 AS_PATH 匹配呢? 之前分析 过 AS_PATH 可以看作是字符串的这一特点, 我们找到了处理字符串的强大工具正则表达式这把利 剑来帮我们实现匹配, 这样正则表达式就在 BGP 的舞台登场了 正则表达式介绍 : 首先让我们来认识一下正则表达式, 正则表达式是按照一定的模板来匹配字符串的公式 在 BGP 中, 可以对 BGP 路由的 AS_PATH 属性做出响应的判断 ( 接收或者拒绝 ), 实际上可以认为它 是一个 AS_PATH 的 ACL 正则表达式常用操作符 : 图 1 AS_PATH 显示格式 表 1 正则表达式常用操作符说明 符号说明 匹配任意字符, 包括特殊字符, 空格 * 匹配 * 前面字符中 0 次或多次 + 匹配 + 前面字符中 1 次或多次? 匹配? 前面字符中 0 次或 1 次 ^ 匹配字符串的开始 $ 匹配字符串的结束 匹配一个符号, 如逗号 左大括号 右大括号 左括号 右括号和空格等 _ 符号, 在表达式的开头或结尾时还可作起始符 结束符 ( 同 ^,$) ( ) 匹配一个变化的字符或一个独立的匹配, 通常和 一起使用 逻辑或, 交替匹配 [ ] 表示一组字符的集合, 如果集合中第一个字符为 ^, 则表示补集 - 连接符 \ 转义操作符, 去除特殊字符的特殊意义 112
115 深入讨论综述篇 实际应用 AS_PATH 常用表达式 下面就利用介绍的符号来对 AS_PATH 进行匹配, 看看这些符号能够给我们带来多么奇妙的效果 ^$ 表示匹配的字符串为空, 即 AS_PATH 为空, 表示只匹配本地路由.* 表示匹配任意字符串, 即 AS_PATH 为任意, 表示匹配所有路由 ^100 表示匹配字符串开始为 100, 即 AS_PATH 最左边 AS 前 3 位 ( 最后一个 AS) 为 等, 表示匹配 AS 等邻居发送的路由 ^100_ 表示匹配字符串开始为 100 后面为符号, 即 AS_PATH 最左边 AS( 最后一个 AS) 为 100, 表示匹配 AS100 邻居发送的路由, 比较前一个表达式, _ 的好处就体现出来了, 它可以和用来帮助我们限制匹配单独的一个 AS _100$ 表示匹配字符串最后为 100, 即 AS_PATH 最右边 AS( 起始 AS) 为 100, 表示匹配 AS100 始发的路由 _100_ 表示字符串中间有 100, 即 AS_PATH 中有 100, 表示匹配经过 AS100 的路由 \(65535_ 表示匹配字符串为 (65535 后面为符号, 即 AS_CONFED_SEQUENCE 最左边 AS( 最后一个 AS) 为 65535, 表示匹配联盟 AS65535 邻居发送的路由, 我们知道,AS_CONFED_SEQUENCE 是用 ( ) 表示的, ( ) 在正则中是特殊字符, 有特殊用处, 所以对于这种特殊字符, 可以使用 \ 来去除其特殊意义进行匹配, 同理 AS_CONFED_SET 使用的 [ ],AS_SET 使用的 { } 都可以使用 \ 符号来去除这些特殊符号的特殊意义, 举例 \[65533_, \{202_ \(.*_205_.*\) 表示字符串 AS_CONFED_SEQUENCE 中间有 205, 即 AS_CONFED_SEQUENCE 中有 205, 表示匹配经过联盟 AS205 的路由 _207\) 表示匹配字符串最后为 207), 即 AS_PATH 最右边 AS_CONFED_SEQUENCE( 起始 AS) 为 207, 表示匹配联盟 AS207 始发的路由 113
116 网络之路 ROUTE TO NETWORK 应用场景 实例一场景 : A 国政府近年来和 B 国战争不断, 而且许多 B 国网页上有 A 国的反动言论, 所以 A 国政府希望本国人民无法访问 B 国的网页,A 国经过调查发现 B 国的 AS 号为 70 部署 : 于是 A 国政府在本国路由器上配置 : ip as-path 2 deny 70$ ( 拒绝从 AS70 始发的路由 ) ip as-path 2 permit.* ( 允许其他 AS 的路由 ) 实例二场景 : 但是 A 国有些政府官员要和 B 国保持联系, 协商如何促进两国和平等事情 于是 A 国又收购了一个 AS30, 要求可以接受 AS70 始发的路由, 但是一定要经过 AS30 检查过滤 部署 : 于是 A 国路由器的配置变成 : ip as-path 2 permit _ $ ( 接受从 AS70 始发的路由但是要经过 AS30) ip as-path 2 permit _30 70$ ( 有可能 AS30 与 AS70 直接相连 ) ip as-path 2 deny 70$ ( 拒绝从 AS70 始发的路由 ) ip as-path 2 permit.* ( 允许其他 AS 的路由 ) 实例三场景 : B 国恐怖组织后来发现自己在 A 国的分部无法访问 AS70 内的网站, 于是联盟了多年饱受 A 国欺负的其他国家, 在 AS 里大肆放置 A 国反动网站 A 国几番周折终于掌握了这些内部消息, 但是想到自己的国家政府还要与这些国家政府保持联系 ( 所以还是要经过 AS30 来过滤的 ) 部署 : 于是 A 国路由器的配置变成 : ip as-path 2 permit _30.+ (7[0-9] 8[0-9] 9[0-9] 1[0-3][0-9] 140)$ ( 接受从 AS 始发的路由但是要经过 AS30) ip as-path 2 permit _30 (7[0-9] 8[0-9] 9[0-9] 1[0-3][0-9] 140)$ ( 有可能 AS30 与 AS 直接相连 ) ip as-path 2 deny (7[0-9] 8[0-9] 9[0-9] 1[0-3][0-9] 140)$ ( 拒绝从 AS 始发的路由 ) ip as-path 2 permit.* ( 允许其他 AS 的路由 ) 实例四场景 : A 国政府年老的网络管理员退休了, 于是换了一位年轻的管理员, 上任后发现本地 AS 内的路 114
117 深入讨论综述篇 由器保存着许多本地始发的 BGP 路由, 同时路由表里装载的是该路由为 IGP 路由 ( 只是前缀一样 ), 想了许久给出了一个解决办法, 首先定义一个内部组, 把所有 IBGP 邻居归纳整合到这个组, 根据组来进行 as-path 过滤 部署 : bgp xxxx group 1 internal peer 1 as-path-acl 100 export 正则表达式如下 : ip as-path 100 deny ^$ ( 拒绝发布本地始发路由 ) ip as-path 100 permit.* ( 允许发布其他 AS 的路由 ) 实例五场景 : 在以后的日子新任管理员逐渐熟悉了各个路由器的配置后, 他发现以前的配置比较繁琐, 比如 ip as-path-acl 2 permit _30.+ (7[0-9] 8[0-9] 9[0-9] 1[0-3][0-9] 140)$ 这条命令, 看起来复杂而且理解起来又很晦涩, 于是新任管理员重新修改了配置 部署 : 修改后的正则表达式如下 : ip as-path 2 permit _30.+ ( [0-3]. 140)$ ( 作用与以前的一样 ) 总结 以上只是对一些常用应用的总结 对于正则表达式 [] 许多厂家实现的不一样, 我们和 CISCO 是一样的在方括号里只能填写数字 0 到 9, 比如要是限制范围为 10 到 20 那么只能写成 (1[0-9] 2[0-9]), 如果是 那么配置任务还是很巨大的啊 有一些个别的厂商实现了该功能的扩展比如要限定范围为 4000 到 5000, 那么配置 [ ] 就可以了 最后想说的是正则表达式是一个非常灵活的东西, 我们可以用不同形式表达相同的目的, 当然这样也就有了简单复杂 好与不好的区分 例如实例二中提到的配置, ip as-path 2 permit _ $ ip as-path 2 permit _30 70$ 我们完全可以简化为一个命令 ip as-path 2 permit _ $ _30 70$ 所以这也是一个仁者见仁, 智者见智的表现 115
118 网络之路 ROUTE TO NETWORK MBGP 扩展文 / 许亮 概述 BGP 协议使用 Update 报文对路由信息进行更新和撤销 在最新的 BGP 标准 RFC4271 中, 对 Update 携带的路由信息格式定义如下 : Total Path Attribute Length (2 octets) Path Attributes (variable) Network Layer Reachability Information (variable) 对于要撤销的路由,BGP 只向邻居发布该地址的掩码长度和前缀 Withdrawn Routes Length (2 octets) Withdrawn Routes (variable) 图 2 路由撤销格式 Length (1 octet) Prefix (variable) 图 3 Withdrawn Routes 格式 Length (1 octet) Prefix (variable) 图 4 NLRI 格式 对于更新的路由,BGP 把属性完全相同的合并在一起发布, 属性信息放在前面, 后面紧跟属性完全相同的一个 / 组前缀信息 一个 Update 报文中只能发布一组这样的路由 随着 BGP 广泛应用于 MPLS VPN 组播以及非 IPv4 地址族, 这种固定的结构不能完全满足应用需求 为了解决 BGP 对多种网络层协议的支持,IETF(Internet Engineering Task Force, 因特网工程任务组 ) 对 BGP-4 进行了地址族能力扩展, 形成 MP-BGP(Multi-Protocol BGP, 多协议 BGP), 使 BGP 能够为多种应用提供路由信息 在 RFC4760(Multiprotocol Extensions for BGP-4) 中, 定义了 2 个新的可选非传递属性,BGP 的多种协议扩展都用到了这两个属性 : 116
119 深入讨论综述篇 扩展协议可达 NLRI(MP_REACH_NLRI, 属性类型 14) 扩展协议不可达 NLRI(MP_UNREACH_NLRI, 属性类型 15) 这两种扩展属性适用于所有的 BGP 协议扩展, 为了对不同的扩展类型进行区分, 在这两种 属性中都携带了 BGP 地址族 (Address Family Information) 和子地址族 (Sub-Address Family Information) 信息 AFI 1 分配给 IPv4,2 分配给 IPv6 SAFI 分配原则在 RFC4760 中定义如下 : - SAFI values 1 and 2 are assigned in this document. - SAFI value 3 is reserved. It was assigned by RFC 2858 for a use that was never fully implemented, so it is deprecated by this document. - SAFI values 5 through 63 are to be assigned by IANA using either the Standards Action process, defined in [RFC2434], or the Early IANA Allocation process, defined in [RFC4020]. - SAFI values 67 through 127 are to be assigned by IANA, using the First Come First Served policy, defined in RFC SAFI values 0 and 255 are reserved. - SAFI values 128 through 240 are part of the previous private use range. At the time of approval of this document, the unused values were provided to IANA by the Routing Area Director. These unused values, namely, 130, 131, 135 through 139, and 141 through 240, are considered reserved in order to avoid conflicts. -SAFI values 241 through 254 are for private use, and values in this range are not to be assigned by IANA. MP_REACH_NLRI (Attribute code: 14) 表 1 常用 AFI 和 SAFI 列表 BGP 扩展 CODE AFI SAFI IPv4 Unicast Multiprotocol(1) 11 1 IPv4 Multicast Multiprotocol(1) 1 2 IPv4 Lable Multiprotocol(1) 1 4 IPv4 VPNV4 Multiprotocol(1) Ipv6 Unicast Multiprotocol(1) 2 1 IPv4 MDT Multiprotocol(1) 1 66 IPv6 Multicast Multiprotocol(1) 2 2 L2vpn Multiprotocol(1) VPLS(rfc4761) Multiprotocol(1) 扩展协议可达属性用来 Carry the set of reachable destinations together with the next-hop information to be used for forwarding to these destinations 一个完整的 MP_REACH_NLRI 属性结构包含如下内容 : 地址族信息 : 包括 AFI 和 SAFI 其中 AFI 携带和网络地址相关的网络层协议标识 ;SAFI 携带相关属性中网络层可达信息的附加信息 ; 117
120 网络之路 ROUTE TO NETWORK 下一跳信息 : 包括网络地址长度 (Length of Next Hop Network Address) 和下一 跳网络地址 (Network Address of Next Hop) 在 BGP IPv4 定义种, 下一跳是作为地址的 属性进行传递的, 属性类型 3 BGP 进行地址扩展后, 下一跳地址也需要进行扩展, 因此放在 MP_REACH_NLRI 属性中传递 前缀信息 : 放在该属性的 NLRI 字段传递, 不同的地址组能力扩展格式不同 Address Family Identifier (2 octets) Subsequent Address Family Identifier (1 octet) Length of Next Hop Network Address (1 octet) Network Address of Next Hop (variable) Reserved (1 octet) Network Layer Reachability Information (variable) 图 5 MP_ REACH_NLRI 格式 此外, 定义了一个字节的保留未用, 必须置为全 0 MP_UNREACH_NLRI (Attribute code: 15) 扩展地址不可达属性通告不可达路由, 一个含有 MP_UNREACH_NLRI 的 update 报文不需要携带 MP_UNREACH_NLRI 属性以外的任何其他路径属性 其格式如下 : Address Family Identifier (2 octets) Subsequent Address Family Identifier (1 octet) Withdrawn Routes (variable) 图 6 MP_UNREACH_NLRI 格式 扩展地址族划分 从应用场景分, 常用的 BGP 地址族扩展可以分为三大类 : 与 MPLS 技术组合, 用以分配公网标签 跨公网传播传递必要的协议信息, 如 :BGP VPNv4 扩展 L2VPN 扩展 VPLS 扩展 ; 为组播应用携带信息, 如 :IPv4 组播扩展和 IPv6 组播扩展 ; 此外, 在私网跨越公网运 行组播业务的场景,BGP 定义了组播 VPN MDT 扩展, 简称组播 VPN 扩展 对 IPv4 之外的地址族的支持, 如 IPv6 扩展 6PE 扩展 ; MPLS 相关扩展 MPLS(Multiprotocol Label Switching, 多协议标签交换 ) 起源于 IPv4(Internet Protocol version 4, 因特网协议版本 4), 在链路报文头和 IP 报文头之间插入一个标签头, 标 签处于 2.5 层 由于 MPLS 结合了 IP 网络强大的三层路由功能和传统二层网络高效的转发机制, 在转发平面采用面向连接方式, 与现有二层网络转发方式非常相似, 这些特点使得 MPLS 能够很 容易地实现 IP 与 ATM 帧中继等二层网络的无缝融合, 并为 QoS(Quality of Service, 服务质 量 ) TE VPN 等应用提供更好的解决方案 118
121 深入讨论综述篇 基于 MPLS 的 VPN 传统的 VPN 一般是通过 GRE L2TP PPTP 等隧道协议来实现私有网络间数据流在公网上的传送, 而 LSP 本身就是公网上的隧道, 用 MPLS 来实现 VPN 有天然的优势 基于 MPLS 的 VPN 就是通过 LSP 将私有网络的不同分支连接起来, 形成一个统一的网络 基于 MPLS 的 VPN 支持对不同 VPN 间的互通控制 VPN2 CE PE3 Data Packets VPN1 Data Packets PE1 CE P PE2 VPN3 CE 图 7 MPLS VPN 典型组网 在 MPLS/VPN 架构中设备有如下角色 : CE(Customer Edge) 设备 : 用户网络边缘设备, 有接口直接与 SP(Service Provider, 服务提供商 ) 相连 CE 可以是路由器或交换机, 也可以是一台主机 CE 感知 不到 VPN 的存在, 也不需要支持 MPLS PE(Provider Edge) 路由器 : 服务提供商边缘路由器, 是服务提供商网络的边缘设备, 与用户的 CE 直接相连 在 MPLS 网络中, 对 VPN 的所有处理都发生在 PE 上 P(Provider) 路由器 : 服务提供商网络中的骨干路由器, 不与 CE 直接相连 P 设备只需要具备基本 MPLS 转发能力 PE 为 CE 提供二层接入服务的称为 L2VPN, 提供三层接入服务的称为 L3VPN 对 MPLS 的详细讨论参见网络之路第三期 MPLS 专题 MPLS L3VPN 在 MPLS/L3VPN 组网中,PE 和 CE 之间运行路由协议,PE 与 CE 连接的接口运行路由协议多实例 CE 把本站点的 VPN 路由发布给 PE, 并从 PE 学到远端 VPN 的路由 CE 与 PE 之间使用 BGP/IGP 交换路由信息, 也可以使用静态路由 在 CE 侧, 完全感知不到公网的存在, 认为 PE 是私网内的一台路由器 在 PE 上, 多个 CE 接入 PE 把不同接入方划分到独立的 VPN 中 对私网用户而言, 他们使用的是自己的私有地址空间, 不同的 VPN 中可能存在相同的 IPv4 地址 而 BGP 假设其承载的每个 IPv4 地址都是全局唯一的, 因此必须通过对地址族进行扩展将非唯一的 IPv4 地址转换位全局唯一的 119
122 网络之路 ROUTE TO NETWORK 地址 转换方法是将 VPN 的唯一标识 RD(Route Distinguisher) 附加在 IPv4 路由前缀之上 : RD 用来表示不同 VPN; 相同的机构在不同地区的接入站点应设置为相同 ; 不同机构必须不同 此外对同一机构不同站点之间的路由传递使用 RT(Route Target) 进行控制 RT 分为 import 和 Export Export 携带在 BGP 路由中进行传递,PE 收到后只保留与本地 Import RT 匹配的路由 MPLS L2VPN MPLS L2VPN 就是在 MPLS 网络上透明传递用户的二层数据 从用户的角度来看, 这个 MPLS 网络就是一个二层的交换网络, 通过这个网络, 可以在不同站点之间建立二层的连接 MPLS L2VPN 包括 VLL 和 VPLS 两种 : VPWS(Virtual Provider Wire Service): 虚拟私有线路服务, 在公用网络中提供的一种点到点的 L2VPN 业务 客户的二层设备跨过 MPLS/IP 核心网络相连, 就像通过一根二层线路直连一样 它不能直接在服务提供者处进行多点间的交换 VPLS(Virtual Private LAN Service): 虚拟专用局域网服务, 在公用网络中提供的一种点到多点的 L2VPN 业务 VPLS 使地域上隔离的用户站点能通过 MAN/WAN 相连, 并且使各个站点间的连接效果像在一个 LAN 中一样 VSI(Virtual Switch Instance): 虚拟交换实例, 通过 VSI, 可以将 VPLS 的实际接入链路映射到各条虚链接上 PW(Pseudo Wire): 虚链路, 在两个 VSI 之间的一条双向的虚拟连接, 它由一对单向的 MPLS VC(Virtual Circuit, 虚电路 ) 构成 Tunnel: 隧道, 用于承载 PW, 一条隧道上可以承载多条 PW, 一般情况下为 MPLS 隧道 隧道是一条本地 PE 与对端 PE 之间的直连通道, 完成 PE 之间的数据透明传输 Encapsulation: 封装,PW 上传输的报文使用标准的 PW 封装格式和技术 PW 上的 VPLS 报文封装有两种模式 :Raw 和 Tagged 模式 PW Signaling:PW 信令协议,VPLS 实现的基础, 用于创建和维护 PW PW 信令协议还可用于自动发现 VSI 的对端 PE 设备 目前,PW 信令协议主要有 LDP 和 BGP MBGP 扩展 :for VPNv4 因此, 在 BGP VPNv4 扩展中,MP_REACH_NLRI 扩展如下 :PE 从 CE 学到 CE 本地的 VPN 路由信息后, 在路由信息中增加 RD 和 RT, 再通过 BGP VPNv4 邻居关系与其他 PE 交换 VPN 路由信息 不同 VPN 的路由在公网中通过 RD 进行区分, 不同 CE 之间的路由使用 RT 进行引入控制 PE 路由器只维护与它直接相连的 VPN 的路由信息 ( 收到 BGP VPNv4 发来的路由后, 只保留与本地 import RT 匹配的路由信息 ), 不维护服务提供商网络中的所有 VPN 路由 它的格式如下所示 : Type Field(2 octets) Route Distinguisher(8 octets) Administrator Subfield Value Field(6 octets) Assigned Number Subfield RT 的结构和 RD 相似, 但它们是有本质区别的,RT 是 BGP 路由的扩展属性, 而 RD 附加在 IPv4 IPv4 Address Prefix (4 octets IPv4 Address) 图 8 RD 格式示意图 120
123 深入讨论综述篇 VPNv4 地址前作为地址的一部分存在 在 BGP 路由中引入 RD 和 RT 只解决了路由传递的问题 : 在 PE 本地的路由冲突和路由网络传播过程中的冲突 但 RD 和 RT 不参与报文转发, 在数据转发时如果接收端 PE 的两个本地 VRF 中同时存在 /24 的路由, 当它接收到一个目的地址为 的报文时, 它如何知道该把这个报文发给与哪个 VRF 相连的 CE? 这就需要在 PE 上由 BGP 给私网路由分配标签来解决 改造后的 MP-IBGP 进行 NLRI 信息交换时会附加 RD 标签等各种信息 格式如下: Address Family Identifier (2 octets) Subsequent Address Family Identifier (1 octet) Length of Next Hop Network Address (1 octet) Network Address of Next Hop (PE 路由器自己建立 Peer 使用的地址 ) Reserved (1 octet) Network Layer Reachability Information (variable) RD(8 octet)+ip 前缀 label(3 octet, 与 MPLS 标签一样, 但没有 TTL) 图 9 MP-IBGP NLRI 报文格式在这之后是 RT 信息, 如下图所示 : MBGP 扩展 :for L2VPN Extended community(rt1) Extended community(rt2) Extended community(rt3) 图 10 MP-IBGP NLRI 报文 RT 列表 MPLS/L2VPN 有多种实现方式, 其中 Kompella 方式使用 BGP 作为交换信令 与 MPLS L3VPN 类似, 各个 PE 之间通过建立 BGP 会话自动发现 L2 VPN 的各个节点, 并传递 VPN 信息, 使用 VPNtarget 来区分不同的 VPN 在不同 VPN 内,CE ID 可以相同 BGP 为不同的 CE 间建立的 VC(Virtual Circuit) 分配内层标签, 扩展 BGP 报文格式如下 : 新定义了一个属性用于描述二层报文封装的必要信息 : Length(2 octets) Route Distinguisher(8 octets) CE ID(2 octets) Label-block Offset(2 octets) Label-Base(3 octets) Variable TLVs(0 to N octets) 图 11 L2VPN 扩展 NLRI 格式 121
124 网络之路 ROUTE TO NETWORK MBGP 扩展 :For VPLS Extended community type(2 octets) Encaps Type(1 octets) Cntrl Flags(1 octets) Layer-2 MTU(2 octets) Reserved(2 octets) 图 12 L2VPN 扩展属性 :layer2-info extended community 简介 VPLS 也称 TLS(Transparent LAN Service, 透明局域网服务 ) 或 Virtual Private Switched Network Service( 虚拟专有交换网络服务 ), 是在公用网络中提供的一种点到多点的 L2VPN 业务 VPLS 使地域上隔离的用户站点能通过 MAN(Metropolitan Area Network, 城域网 ) 或 WAN(Wide Area Network, 广域网 ) 相连, 并且使各个站点间的连接效果像在一个 LAN 中一样 VPLS 提供二层 VPN 服务 在 VPLS 中, 用户是由多点网络连接起来, 不同于传统 VPN 提供的 P2P (Point to Point, 点到点 ) 的连接服务 典型组网 Tunnel PW AC CE 1 VPN 1 Site1 VPN 2 Site2 Forwarder MPLS backbone P CE 2 CE 3 VPN 1 PE 1 PE 2 CE 4 PWSignaling VPN 2 Site3 图 13 VPLS 典型组网 BGP 扩展的作用 PW 隧道的建立常用有两种信令 LDP(rfc4762) 和 MP-BGP(rfc4761) 采用 BGP 作信令时, 利用 BGP 的多协议扩展 VPLS 成员信息 其中 MP-reach 和 MP-unreach 属性传递 vpls 的标签信息,RD VPN-TARGET 和接口参数信息在扩展团体属性中传递 122
125 深入讨论综述篇 下图是一个采用 BGP 方式作信令的 PW 建立与拆除的典型过程当 PE1 配置了一个 VSI(Virtual Switch Instance) 建立了到 PE2 的 BGP session, 并且在该 session 上使能 VPLS 地址族, BGP session 建立后会分配标签并给 PE2 发送带 MP-REACH 属性的 update 消息 PE2 收到 update 消息后检查 : 本地是否也配置了同样的 VSI VPN-TARGET 匹配 ( 与 L3VPN 的匹配含义相同 ) 接口参数一致 ; 则 PE2 端的 PW 就建立起来了 PE1 收到 PE2 的 update 消息后作同样的检查和处理 当 PW1 不想再转发 PE2 的报文, 则发送带 MP-UNREACH 属性的 update 消息给 PE2, 同时拆除 PW 释放标签 ;PE2 收到 update 消息后拆除 PW PE1 PE2 配置一个 vsi, 并指定 PE2 为其 bgp peer, 使能 vlan 地址族 配置一个 vsi, 并指定 PE2 为其 bgp peer, 使能 vlan 地址族 Update message (with mp-reach) Update message (with mp-reach) 接口参数匹配,PW up 接口参数匹配,PW up Update message (with mp-unreach) 回收标签,PW down 回收标签,PW down 图 14 用 BGP 作信令时 PW 的建立 / 拆除过程 组播相关扩展 MBGP 扩展 :for Multicast 组播 BGP(Multicast BGP 或 BGP for IPv4 Multicast) 扩展用于携带组播源信息 当使能 组播扩展的 BGP Router 收到邻居发来的组播地址族 NLRI 后, 经过优选加入 RPF(Reverse Path Forwarding) 路由表, 不加入单播路由表 组播 BGP 扩展为跨域的组播应用提供了路由信息, 还 123
126 网络之路 ROUTE TO NETWORK 可以实现单播和组播的拓扑分离 IPv4 Multicast 扩展使用地址族 :AFI 为 1,SAFI 为 2 应用场景网络中存在多个自治系统, 各域内部采用 IGP 进行互联 组播源属于域 B 内, 接收者则分布在域 D,E,G,F; 要求在屏蔽其他域网络拓扑的情况下接收者可以视频点播 如下图所示 : MBGP 扩展 :for IPv6 Multicast 域 A 域 C 域 D BR "# BR BR BR 域 B 根 BR BR BR "# "# BR BR BR "# BR BR 域 G r r 域 E BR BR 域 F r 图 15 Multicast BGP 应用举例 IPv6 组播 BGP(IPv6 Multicast BGP 或 BGP for IPv6 Multicast) 扩展用于携带 IPv6 组播源信息 原理和应用场景与 MBGP for IPv4 Multicast 扩展类似, 只是地址族不同 : 当使能组播扩展的 BGP Router 收到邻居发来的组播地址族 NLRI 后, 经过优选加入 IPv6 RPF(Reverse Path Forwarding) 路由表, 不加入单播路由表 其目的是实现单播和组播的拓扑分离 IPv4 Multicast 扩展使用地址族 :AFI 为 2,SAFI 为 2 MBGP 扩展 :for 组播 VPN 组播 VPN MPLS/BGP VPN 结构中只支持单播应用,VPN 客户的组播服务需求无法满足 但公网可以运行组播协议, 私网内部也可以运行组播, 只要解决两个问题就可以实现私网用户跨公网的组播应用 : 私网组播报文在公网的转发 私网源组信息到公网源组信息的映射 124
127 深入讨论综述篇 1. 私网组播报文跨公网的转发解决办法是在 PE 上采用隧道对私网组播报文进行封装, 可以用 GRE IPinIP 或 MPLS 隧道 目前业界普遍采用 GRE 隧道进行封装 2. 私网源组映射到公网源组解决办法是在 PE 上为每一个私网分配一个组地址, 用于公网转发 这样每个 VPN 内的组播报文到达 PE 后经过隧道封装, 最外层的 IP 报文还是组播报文的形式 : 报文组地址为该 VPN 分配的 Share-Group 地址 显然,Share-Group 地址必须全局唯一 PE 收到组地址在 Share-Group 范围的组播报文时, 根据本地的私网 / 公网映射关系将报文外层 IP 头和隧道头剥去, 根据 Share-Group 对应的 VPN 将报文送到制定私网中进行处理, 从而实现跨公网的组播业务, 即组播 VPN MD 协议 PE-CE 之间的 PIM 邻接 CE PE-P 之间的 PIM 邻接 PE-PE 之间的 PIM 邻接 PE CE CORE CE PE P PE 图 16 组播 VPN 的邻居关系应用模型如上图所示 : 公网运行普通的组播协议, 私网运行普通的组播协议, 在 PE 上完成地址映射和报文封装 / 解封装 MD 协议在骨干网上为每个 VPN 维护一棵组播转发树, 称为 Share-MDT, 这棵树在 MD 配置完成后就自动建立了, 不管 VPN 中有没有组播业务, 也不管骨干网上有没有组播业务 来自于 VPN 的任何一个站点的组播报文 ( 包括协议报文和数据报文 ) 都会被封装成为公网组播数据报文, 沿着这个棵 Share-MDT 树转发到所有属于该 MD 的 PE 如果该 PE 连接有该组播组的接收者, 则往 CE 转发, 否则丢弃组播报文 BGP MDT 扩展实际应用中还可能碰到这样的问题 :Share-Group 是 PE 上配置, 其他 PE 并不知道其他 PE 配置的 Share-Group 是多少 而要在公网部署 PIM SSM 必须知道源地址 BGP MD 扩展解决了这个问题 : 将 PE 上 Share-Group 的源组信息通过 PE 之间的 BGP 会话进行传递 为此,BGP 定义了一类新的地址族 :IPv4 MDT 地址族 AFI 为 1,SAFI 为
128 网络之路 ROUTE TO NETWORK MDT SAFI NLRI 具体格式如下 : 其中,Route Type 定义如下 : Route Type (1 octet) Length (1 octet) Route Type specific (variable) 图 17 MDT SAFI NLRI 1 - Intra-AS I-PMSI auto-discovery route (or just auto-discovery route); 2 - Inter-AS I-PMSI auto-discovery route (or just inter-as auto-discovery route); 3 - S-PMSI auto-discovery route; 4 - Intra-AS segment leaf auto-discovery route (or just leaf auto-discovery route). 5 - Source Active auto-discovery route. 6 - Shared Tree Join route; 7 - Source Tree Join route; RD:IPv4-address (12 octets) MDT Group-address (4 octets) RD:MD 配置所在 VRF 的 RD, 长度为 8 字节 IPv4-address:MTI 的源 IP 地址, 为 IPv4 地址, 长度为 4 字节 MDT Group-address:MVRF 绑定的组播组地址, 长度为 4 字节 图 18 Route Type Specific( 携带 Share-Group 信息 ) 个 : 地址族扩展随着 IPv6 的发展, 几乎所有路由协议都开发除了适配 IPv6 的版本 BGP for IPv6 扩展有两 IPv6 地址族扩展, 解决纯 IPv6 网络中传递 IPv6 路由的问题 ; 6PE 扩展 : 解决 IPv6 孤岛跨越公网的问题 IPv6 扩展在网络之路第六期 IPv6 专辑有详尽的介绍, 请参见 IPv6 路由技术章节和 IPv6 over MPLS 章节 126
129 深入讨论综述篇 [ 网络应用 ] 127
130 网络之路 ROUTE TO NETWORK BGP 网络性能优化浅析 文 / 杨默寒 前言 在构建实际运营的 BGP 网络中, 由于需要考虑到性能参数对网络效率的影响, 往往需要对 BGP 的一些参数进行仔细的斟酌, 本文主要以对一些与网络性能相关的参数与特性的设置进行讲解, 供读者在后续设计及优化 BGP 网络时参考 BGP 邻居 PMTU 检测 BGP 协议是运行在 TCP 之上的, 所以 TCP 的参数设置会影响 BGP 的性能 在路由数目比较少的情况下 TCP 的参数调整可能对 BGP 性能影响不大, 但是当路由数目比较巨大的时候调整 TCP 参数可以起到优化性能的作用 下面我们开始分析具体的优化方法 首先我们来了解一下 BGP 协议包发送的方法, 请看下图 1: 图 1 BGP 与 TCP 数据传输格式 BGP 首先需要把自己需要发送的数据告诉 TCP, 然后 TCP 根据数据的长度进行分段, 分段大小由 TCP 协商的 MSS 值的大小决定, 每个 TCP 分段对应着一个发出去的 IP 包 所以 MSS 参数的设置对于 BGP 数据传输的性能起着关键作用, 如果设置过大可能会造成中间某台设备的 IP 层分片,BGP 128
131 深入讨论网络应用综述篇 协议报文的传输其实是一个端到端的传输过程, 如果数据被分片了那么必然还需要重新组合恢复回来, 这样会给接收者的 CPU 带来一定的负担, 组包的过程降低了处理效率 ; 如果 MSS 值设置过小, 那么又会使网络的有效利用率很低, 发送端和接收端对能够一次处理的报文进行多次处理, 降低了效率 通过 BGP 邻居 PMTU 检测可以解决前面提到的问题, 在建立 BGP 邻居之前, 路由器会自动发送一个 PMTU 报文来检测路径上的最大 MTU, 当得到这个值后 TCP 协议可以根据这个值来设定 MSS 的大小, 发送报文时按照 PMTU 探测的结果, 进而达到性能的最优 BGP 路由更新定时器 在 BGP 的 RFC4271 上定义了 BGP 的路由更新的定时器, 该定时器只能对同一地址族的相同前缀的路由起作用, 其主要作用是防止网络中的某条路由震荡过于频繁, 同时也是对 CPU 的一种保护 用文字对该特性进行描述可能过于晦涩, 所以我们用图 2 来做简单的介绍 : RA RB RC RA 收到路由时间 RA 发送路由时间 RB 收到路由时间 图 2 路由更新定时器说明如图 2 红色与蓝色的箭头代表相同前缀的路由, 但是从不同邻居学习而来, 而且蓝色的路由优于红色的 ; 黑色的坐标轴代表路由发送与接收的时间, 每个单位距离为 10 秒 我们假设 RA 上配置的更新定时器时间为 30 秒 那么 RB 路由收敛过程如下 : RA 接收到红色路由后立刻发送给 RB, 同时 RA 上启动更新定时器 (30 秒 ); 129
132 网络之路 ROUTE TO NETWORK 10 秒以后 RA 接收到更优的蓝色路由, 由于定时器没有超时暂时不发送给 RB, 但是更新本地路由表, 在第 10 秒 RA 完成路由收敛 ; 第 30 秒 RA 上更新定时器超时, 所以发送蓝色路由给 RB 并且更新掉红色路由,RB 在第 30 秒完成收敛 从上面的分析我们可以看出 RB 的收敛时间比 RA 会慢上 20 秒左右, 由于 BGP 是距离矢量路由协议这种延迟可以可能对于整个网络的 BGP 路由器都会有一定影响, 所以在设计 BGP 网络中对该参数的设计需要有一定考虑, 如果对自己设备的路由处理能力有足够信心的话可以把该定时器的值设置为最小 这里需要说明一下, 路由惩罚 (Dampening) 也有类似的情况, 如果希望网络发生路由震荡后可以尽快的收敛, 那么完全可以不设置 Dampening 参数 与 BFD 协议联动 上一节所介绍的功能只能使路由的收敛时间限制在秒级, 但是对于一个运营商 (SP) 的网络来说, 往往需要更快地感知路由的变化或者 BGP 邻居的状态变化 但是 IBGP 邻居状态的感知往往由于邻居非直连的原因, 需要依靠 IGP 的收敛或者 BGP 自身的 KEEPALIVE 报文来感知邻居的状态, 这样最多可能会需要 180 秒来完成收敛 Bidirectional Forwarding Detection(BFD) 是一个简单的 Hello 协议, 和路由协议的邻居检测部分相似 一对系统在它们之间所建立会话的通道上周期性的发送检测报文, 如果某个系统在足够长的时间内未收到对端的检测报文, 则认为在这条到相邻系统的双向通道的某个部分发生了故障 BFD 目前存在两个版本 :VER 0 和 VER 1, 并且两个版本不能互相兼容 BGP 的 BFD 就是利用了这个特性, 配置 BGP 与 BFD 关联后, 一旦 BGP 邻居建立后,BFD 自动和 BGP 邻居关系进行关联, 并在每单位时间发送探测数据, 这个单位时间一般为几十毫秒, 当超过 3 倍的时间没有收到探测报文 BFD 会通知 BGP 断开邻居关系, 这样可以迅速的完成路由收敛 130
133 深入讨论网络应用综述篇 BGP 流量负载分担规划 文 / 张宇弟 BGP 流量负载分担概述 如何优化的利用网络带宽资源, 是流量负载分担的关注重点 BGP(Border Gateway Protocol, 边界网关协议 ) 选择单条最优路径的这一特征往往会出现流量负载不均衡的流量模型, BGP 流量负载均衡从两个角度出发解决这个问题 : 通过 BGP 强大的策略控制流量的负载均衡 ; 通过多路径选路实现负载分担 本文就要从这两个角度来展开分析 BGP 在流量负载分担方面的技术应用 负载均衡 在实际网络中进行负载均衡需要综合考虑链路和设备节点的负载情况, 在满足业务的实际需求前提下, 可以通过 BGP 的策略工具对流量进行均衡的规划和调整 对于一个 AS 来说, 流量的方向分为入境和出境两个方向, 这种区分对应到实际的网络有不同的规划, 所以我们在此通过不同的场景进行介绍 131
134 网络之路 ROUTE TO NETWORK 入方向流量负载均衡 RE internet RC RD AS200 AS300 Link1 Link2 RA AS100 RB 图 1 多宿主到不同的上游的负载均衡 我们先分析一下图 1 的场景,AS100 希望流量能够在 AS200 和 AS300 间进行负载均衡, 也就是说根据业务分别映射到 Link1 和 Link2 上 在规划中我们有如下思路 : 1.AS100 可以在 RA 和 RB 上通过策略只向各自的对等体通告部分路由前缀, 这样可以起到不同的业务对应由不同的 AS 承载 如 /25 通过 RA 通告给 RC, /25 通过 RB 通告给 RD 这种规划能够满足流量分担的效果, 但是一旦出现链路或节点的失效, 就会导致部分流量无法切换, 业务中断 2. 通过步骤 1 我们可以看到简单的通过路由过滤无法很好的实现需求 我们可以通过对不同的前缀进行策略区分 接着步骤 1 的思路,AS100 希望 /25 优先通过 AS200 进入, 希望 /25 优选通过 AS300 进入 可以在 RA 上通过策略将 /128 通告的 AS- PATH 加一个 AS-Number, 如 : RB 上通过策略将 /25 通告给 RD 的 AS-PATH 加一个 AS-Number, 如 : RE 上关于 /25 的前缀从 RC 通告过来的 AS-PATH 是 : , 通过 RD 通告过来的 AS-PATH 是 : , 因此优选走 AS200 关于 /25 同理会优选 AS300 该规划可以在满足需求的同时解决路由备份的问题 但是我们考虑下面一个场景, 当 RC 和 RD 建立 BGP 连接,RD 上关于 /25 的前缀从 RC 通告过来的 AS-PATH 是 , 从 RB 上通告过来 132
135 深入讨论网络应用综述篇 的 AS-PATH 是 , 也就是说 RD 上关于 /25 无法很好的进行路由选路控制 3. 团体属性是进行本地进行路由控制的重要属性, 但是团体属性需要 BGP 对等双方有属性处理的共识 在步骤 2 的基础上,RB 在通告 /25 时, 可以将团体属性值修改为 100: 120, 在 RD 上将团体属性的前缀预定义 Local-preference 为 120, 这样对于 RD 来说在收到 RC 和 RB 的前缀 AS-PATH 相同长度的情况下, RB 通告的前缀 Local-preference 高, 优选 RB RB AS200 RC 分析完图 1 所示的场景, 我们可 以继续看看多宿主相同上游的场景, 如图 2: 对于相同的上游 AS, 我们更多 的需要考虑上游 AS 内部的选路, 对于 跨过上游 AS 的远端 AS 的选路我们很难控制, 因此本文讨论的重点就在本地 RA 和上游 AS 的选路策略部署 先分析需 求, 本地 AS 希望 /25 通过 RB 进入, /25 通过 RC 进 AS100 入 存在下述三种方式 : 1. 借鉴上文中多宿主不同 AS 的 做法, 将 /25 通告给 RB 图 2 多宿主相同 AS 的负载均衡 时, 将 AS-PATH 设置为 , 将 /25 通告给 RC 时, 将 AS-PATH 设置为 由于 RB 和 RC 之间是 IBGP 邻居, 因此对于 RB 来说, /25 从 RA 学习到的 AS-PATH 是 100, 从 RC 上学习到的 AS-PATH 是 , 优选 RA 的路由 对于 /24 来说, 从 RA 学习的路由 AS-PATH 为 , 从 RC 学习的路由 AS-PATH 为 100, 优选 RC 这满足了需求 2. 同样, 在 AS 间协商进行策略部署的前提下, 可以在 RA 上对不同的业务前缀进行属性赋值的区分, 在 RB/RC 对不同的属性设置不同的本地优先级进行业务的分担均衡 3. 还是针对图 2, 对于 AS200 进行入方向的流量负载分担部署, 最直接的方法就是通过修改 MED 值的方法, 使得 RA 通过 MED 值直接进行路由的优选 133
136 网络之路 ROUTE TO NETWORK 出方向负载均衡 我们还是先分析图 1 的场景,AS100 希望出方向的业务流量能够在 RA 和 RB 间进行合理的负载均衡 : 1. 可以通过在 RA 和 RB 上进行入境路由前缀过滤, 通过前缀在不同的出口路由器的通告分担来实现业务流量出方向的负载均衡 2. 入境的过滤适用于对端 AS 的业务负载分担, 但是对于远端 Internet 的业务, 无法通过入境路由前缀过滤的方法实现, 否则会出现单点故障导致业务中断的情况 对于 Internet 业务就需要进行入境路由前缀策略控制, 例如通过添加 AS-PATH 或者对特定前缀设置不同的本地优先级等 3. 对于单点故障导致业务中断的考虑还可以通过出口路由器发布缺省路由的方式作为路径的备份, 一旦出现某个出口路由器故障, 路径可以通过缺省路由切换至其他出口路由器, 起到备份的效果 4. 同样可以和上游 AS 协商, 通过通告来的前缀携带不同的团体属性进行相应的策略控制 对于图 2 的场景, 单出口路由器上进行负载分担可以借助路由策略的方法更为灵活 : 1. 针对不同对等体进行入境路由前缀过滤, 使业务自然分担到不同的出口链路上 同时配置缺省路由指向对等体, 防止单点故障业务中断 ; 2. 通过针对特定前缀设置多种属性, 如 Local-preference Origin MED 等, 在本地进行路由优选 134
137 深入讨论网络应用综述篇 AS 内部负载均衡 AS 内部的负载均衡相对容易部署, 通过策略对业务进行区分, 对不同的业务使用不同的 BGP 属性进行控制 如图 3,RB 和 RC 同时向 RA 通告 /25 和 /25,RA 希望 /25 业务从 RB 走, /128 从 RC 走 满足这种需求, 可以直接在 RA 上对业务进行区分, 对 RB 通告的 /25 的 Local preference 设置为 120, 将 RC 通告的 /25 的 Local preference 设置为 120, 本地优选结果能够满足需求 RB RC RA AS100 图 3 AS 内部负载均衡 135
138 网络之路 ROUTE TO NETWORK 等价负载分担 上文介绍的是多宿主情况下的负载均衡规划思路, 本章节需要关注的是通过等价路由在路由器之间进行负载分担的部署方式 EBGP 多跳负载分担 图 4 的场景是两台出口路由器之间通过环回口建立 EBGP 邻接, 我们知道对于 EBGP 邻接超过 1 跳建立邻接需要通过命令 peer x.x.x.x ebgp-max-hop <Maximum hop>, 其中 Maximum hop 设置大于 1 对每一个链路接口对应配置静态路由, 指向对端环回口地址, 路由下一跳为链路对端接口地址 这种方法通过路由下一跳地址的迭代, 将流量负载分担到不同的链路上, 实现多跳的 EBGP 对等体间的多链路负载分担 AS200 RB Loopback Loopback AS100 RA 图 4 多链路多跳 EBGP 对等体负载分担 136
139 深入讨论网络应用综述篇 EBGP 多路径负载分担 图 5 的场景和图 4 类似, 区别在于两个出口路由器通过链路接口地址建立了多个 EBGP 会话, 每一个会话对应于特定的链路 AS200 RB RA AS100 图 5 多链路多 EBGP 对等体负载分担 RA 和 RB 通过两条链路的物理接口地址建立两个单跳 EBGP 邻接关系, 以 RA 举例, 从两个 EBGP 会话均收到关于 /24 的路由信息, 在其他属性都相同的前提下, 两个 EBGP 对等体通告的路由形成等价 比较上述两种负载分担方式, 第一种方式, 建立了一个 EBGP 会话, 会话直接绑定在两个出口路由器的环回地址, 通过直连路由迭代下一跳的方式在链路间实现负载分担 这种方式 EBGP 会话属于多跳会话, 需要两个 AS 间进行环回地址的路由部署, 适用性有一定的限制 第二种方式, 需要建立多个会话, 对资源有一定的消耗, 同时对于 EBGP 等价路由的配置, 是针对本设备所有 BGP 对等体适用, 无法区分对等体, 因此, 缺少一定的灵活性 137
140 网络之路 ROUTE TO NETWORK AS 内部负载分担 AS 内部的负载分担规划同样可以采用下一跳迭代的方式在同一个 IBGP 会话间进行多链路的负载分担 对于多 IBGP 对等体通告的路由在优选属性相同的前提下能够形成负载分担 对于图 6 中的场景,RB 和 RC 向 RA 通告 /24 的路由前缀, 在 ORIGIN,LOCAL- PREFERENCE 以及 AS-PATH 路径属性均相同的前提下能够形成负载分担 RB RC 多链路的负载分担还是可以通 过下一跳迭代到等价 IGP 路由或者默 认路由来实现, 例如图 7 所示场景 : RA AS100 图 6 AS 内部负载分担 RD R D 和 R A 建立 I B G P 邻接关系, R D 向 RA 通告路由 /24,RA 上关于 /24 的路由下一跳是 RD 的环回口地址, 在 RA 上针对 RD 环回口地址有两条等价 RB RC 的 IGP 路由 :RA-RB-RD 和 RA-RC-RD, 通过下一 RA 跳迭代, 在 RA 上针对 /24 的 BGP 路 由也形成等价 AS100 图 7 IGP 路由的下一跳迭代 138
141 深入讨论网络应用综述篇 负载分担规划原则 ORIGIN,LOCAL-PREFERENCE,MED 以及 AS-PATH 路径属性均相同是形成负载分担的前提, 在此前提下还要遵循一定的原则进行负载分担规划 以图 8 举例, R B / R C 均与 R A 通过广播网络建立单跳 E B G P 对等体, R A 向 R B / R C 通告路由前缀 /24,RB 和 RC 同时向 RD 通告,RE 上收到 RB 和 RC 的路由不会形成负载分担, 为什么? 缺省情况下, 边界路由其器向 IBGP 对等体通告 EBGP 路由时, 不会修改下一跳, 因此 RB 和 RC 向 RE 通告的路由下一跳均为 RA 的接口地址, 在 RE 上由于下一跳相同, 因此不会形成负载分担 可解决的办法是 : 在 RB 和 RC 上针对 IBGP 对等体通过配置修改为 :peer x.x.x.x next-hop-local, 将下一跳修改为本地地址, 这样 RE 上收到的路由下一跳不同, 可以形成负载分担 同样利用图 8 举例,RD 是 RR,RB 和 RE 是其 RR Client, 同时 RB 和 RE 间建立 IBGP 邻接关系, RB 通告路由 /24,RD 反射至 RE RR 在反射路由时缺省不会修改下一跳, 因此在 RE 上关于 /24 的路由下一跳均为 RB 的环回地址, 可以利用前文的路由迭代, 将 RE-RB 和 RE-RD-RB 的 IGP 路由 Metric 设置相同, 此时能否形成负载分担? 此时无法形成负载分担, 原因是因为非反射路由和反射路由间无法形成负载分担 在图 8 中, 可以将 RC/RD 均配置为 RR,RB/RE 为 RR Client,RC 和 RD 反射 RB 的路由 /24 至 RE, 这样 RE 可以在两个反射路由间形成负载分担 同样利用图 8 举例,RD 是 RR,RB 和 RE 是其 RR Client, 同时 RB 和 RE 间建立 IBGP 邻接关系, RB 通告路由 /24,RD 反射至 RE RR 在反射路由时缺省不会修改下一跳, 因此在 RE 上关于 /24 的路由下一跳均为 RB 的环回地址, 可以利用前文的路由迭代, 将 RE-RB 和 RE-RD-RB 的 IGP 路由 Metric 设置相同, 此时能否形成负载分担? 此时无法形成负载分担, 原因是因为非反射路由和反射路由间无法形成负载分担 在图 8 中, 可以将 RC/RD 均配置为 RR,RB/RE 为 RR Client,RC 和 RD 反射 RB 的路由 /24 至 RE, 这样 RE 可以在两个反射路由间形成负载分担 139
142 网络之路 ROUTE TO NETWORK RA RB RD AS100 AS200 RC RE 图 8 负载分担规划原则 总结 负载均衡和负载分担均是 BGP 通过策略控制达到流量在网络中不同节点 不同链路间的平衡, 起到合理利用网络资源的效果 本文介绍的是对具体网络负载均衡或分担的需求进行规划的思路, 实际中满足需求的手段多种多样, 需要根据实际情况做相应的规划调整, 因此在实际的网络规划时不要拘泥于本文提及的方法, 更多的是思路上的借鉴 同时, 负载均衡和分担往往需要经过多次尝试才能尽可能接近均衡的, 过于精确的均衡往往会带来策略上的复杂度, 同时在考虑均衡的同时还要兼顾路径的备份 140
143 深入讨论综述篇 [ 测试方法 ] 141
144 网络之路 ROUTE TO NETWORK BGP 测试工具及测试仪器介绍 文 / 许亮 引言 BGP 的邻居关系是基于 TCP Session 的, 手工构造邻居关系和路由更新比较困难 在测试 BGP 邻居规模, 路由规模, 路由收敛等性能指标时, 需要借助测试仪器 此外一些独立的小软件, 如我司开发的 BGP Tester 也非常实用, 可以虚拟邻居 构造路由, 还可以对路由的各个字段单独进行设置 BGP Tester BGP Tester 是我司开发的 BGP 协议测试工具, 用来在主机上模拟一台运行 BGP 协议的路由器, 它具有以下几种功能 : 1) 四种 BGP 报文的构造 :OPEN KEEPALIVE UPDATE NOTIFY 2) 与被测设备进行能力协商和维持邻居关系 ; 3) 构造错误报文和异常报文 ; 4) 大量路由的更新和振荡 测试邻居建立 在 BGP Tester 工具栏中有一项为 connection, 用于配置 BGP 邻居关系 : 1. 配置连接关系 : 通过选择网卡 (1) 设置本端和对端地址(2) 完成设置 建立 BGP 邻居的地址不必是网卡地址 2. 测试 BGP 状态机 : 默认情况下是 Auto Open 和 Auto KeepAlive 的, 在连接建立过程中 BGP Tester 会自动发送 open 报文和 keepalive 报文, 使协议状态机进入 Established 状态 如果要对 142
145 深入讨论网络应用测试方法综述篇 图 1 BGP Tester 连接管理界面邻居状态机进行测试, 不要选这两项, 让 BGP 邻居关系停留在 TCP 连接建立, 然后单独发送 Open 报文和 KeepAlive 报文 3. 其他连接设置 :Connect 表示主动发起 TCP 连接,Listsen 表示等待被测设备发起 TCP 连接 在选择主动发起 TCP 邻居建立和自动发送 open 以及 keepalive 的情况下,BGP 邻居建立大约要一分钟 发送大量路由 BGP Tester 的一个很重要的功能就大路由表的发送, 几万条路由几分钟就可以灌输进去, 不仅可以作为 BGP 路由的大容量测试, 也可以被其他协议引入, 而间接的作为其他协议的大容量测试 使用方法选取菜单大路由发送菜单 BGP Tester 提供两种前缀长度模型用于发送大路由表 :24 位固定长度 ; 长度可变 图中 : 前缀起点 值指 24 位长度的 IP 地址的第一段值 ; 前缀散布 指 IP 地址的字段是随机数, 不是有规律的 ; 包之间时间 指两个 UPDATE 报文之间的发送时间间隔, 为浮点数 ; 打包条数 指每个 UPDATE 包中装多少条路由 143
146 网络之路 ROUTE TO NETWORK 图 2 大路由菜单设置 图 3 可达路径属性设置 144
147 深入讨论网络应用测试方法综述篇 构造特殊路由 选取菜单中的 update 选项进行报文构造, 点击路径属性数据的 设置, 弹出对话框, 基本所有的路径属性都可以进行设置 注意 : 三个必遵属性必须添加 ; 可变长属性的设置在输入后要点击 Add 进行追加 Angilent 测试仪器 N2X N2X 提供 FE,GE,POS,ATM,FR 网络接口, 并且支持多种路由协议, 而且可以制造数据流 (2 层 ---7 层 ) 可以测试 BGP 多种功能 : 支持测试 BGP 邻居类型 (IBGP,EBGP,BGP 多跳,MBGP) 支持对 BGP 四种报文的测试 支持模拟大量 BGP 路由 可以模拟 BGP 路由振荡 可以根据模拟的路由动态生成响应的数据流 连接 N2X 和 DUT 图 4 N2X 端口选择 145
148 网络之路 ROUTE TO NETWORK N2X 的硬件设备叫 RouterTester Router Tester 需要一台 PC 作为 controller 与其直连进行地址分配和管理 Controller 会运行 DHCP Server 给 Router Tester 上的每一块板卡分配 /8 的地址 控制 Router Tester 可以在本机安装 N2X Controller 或者登陆到作为 controller 的 PC 进行远程控制 因此, 在使用 N2X 时, 是不用选择测试仪器地址的, 直接选择机框和板卡即可 启动 N2X 后会自动让你选择所想应用的端口, 如图中 port Selection 所示 Chassis 选择机框 ;module 选择板卡, 板卡编号在板卡的面板上有显示, 编号顺序为由左至右, 从上到下 ; 完成 module 选择后, 该板卡的所有端口会显示在右侧的 select ports to use 中 图 4 选择了 101 的四个端口 101/1-101/4: 选择端口后, 建立配置与被测设备的连接, 配置物理层参数, 点击配置链路层参数 图 5 连接设置 146
149 深入讨论网络应用测试方法综述篇 图 6 配置 IP 地址 点击左侧 Setup 菜单的, 配置链路层参数 图 4 链路层协议是 Ethernet 的一个例子 这里你可以配置链路层的一些属性比如 :10/100 的强制, 全双工的强制, 帧间隙, 超大帧等 配置完链路层参数后, 通过 LAN/WAN Address 选项配置 IP 与 ARP, 如图 6 所示 发送 ARP 请求后, 端口状态图标由会变成, 这个时候说明这个端口可用 147
150 网络之路 ROUTE TO NETWORK 创建一个 BGP session 接下来就是配置 BGP 的一些参数, 模拟路由, 流量, 点击左侧 Setup 菜单的, 显示 Routing 对话框 选择一个我们需要添加 session 的测试端口, 下图中选择 101/1 端口, 然后再 点击 Routing 对话框左侧的, 添加一个 session, 这时会显示一个 session 对话框 图 7 配置 BGP Session 148
151 深入讨论网络应用测试方法综述篇 模拟 BGP 路由 图 9 模拟路由 点击 Routing 对话框上侧的, 显示 BGP 模拟路由窗口, 如下图所示 在路由模拟窗口里你会刚才你已经建立的邻居, 你要先选中它然后再点击 在 BGP 路由路由模拟窗口下, 如图 7 你可以根据实际情况先输入想要给 SUT 的路由, 在这 3 个选择框下可以修改 BGP 的属性, 比如 :AS,AS-SET, 起源属性, 本地优先级别,MED 属性等 149
152 网络之路 ROUTE TO NETWORK 图 9 修改 BGP 路由属性 完成以上步骤当你点击的时候,SUT 会和你刚才的模拟的路由器端口建立邻居, 并且接受到模拟的路由 在我司设备上通过 DISPLAY 命令可以看到相关信息, 尤其可以看看测试中修改的属性 模拟 BGP 路由振荡 我们可以把与 FLAP 相关的勾打上, 然后点击 路由抖动的效果, 我们就可以在 SUT 的路由表里看到 点击可以设置一些和抖动相关的时间参数 IXIA 测试软件 IxExplorer IxExplorer 与 N2X 类似, 也可以进行 BGP 性能测试 下面就 IxExplorer 特殊的地方做一些说 明 150
153 深入讨论网络应用测试方法综述篇 图 10 设置路由振荡 连接连接 IXIA 和 DUT IxExplorer 允许多用户操作, 多个用户可以分别占用同一块板卡上的不同端口 因此登陆 IxExplorer 后先要选择 Multiuser 菜单进行 login 操作, 才能占用端口 测试 BGP 选择路由测试图标, 进入路由相关测试界面 可以通过 Configuration Wizards 进行快捷设置 : 选择 BGP, 打开 Run Wizard, 并选中之前占用的板卡, 然后跟进提示一步步设置 IXIA 虚拟的 BGP 邻居以及路由 或者通过 Protocol Management 进行设置 : 先使能 BGP 再进入 BGP 菜单进行设置 151
154 网络之路 ROUTE TO NETWORK 图 11 IxRouter 基础设置 图 12 IxRouter Protocol Management 152
155 深入讨论网络应用测试方法综述篇 BGP 性能测试方法 文 / 张宇弟 BGP 测试概述 BGP(Border Gateway Protocol) 是一种自治系统间的动态路由发现协议, 是网络部署的基础性协议, 在 ISP 间得到非常广泛的应用 在网络选型中 BGP 作为主要的路由协议之一, 其测试的重要性备受关注 从测试角度来说,BGP 测试对应的需要从如下几个方面考虑 : 协议一致性, 多数主流测试仪厂商提供了完善的协议一致性测试套, 同时很多入网测试标准对 BGP 的协议一致性测试项目有明确规定, 因此本文不作赘述 稳定性, 这是 BGP 协议测试的重点, 同时本文也作为重点介绍一些主要的功能稳定性测试项目及测试方法 性能规格, 不同网络位置, 不同网络规模, 对于路由设备的性能规格要求不同, 这也决定了不同级别的路由设备的 BGP 性能规格的差异, 但是基本的测试思路和方法是一致的, 本文也将重点进行阐述 稳定性测试 Internet 网的核心路由交换设备交换的路由数量庞大, 任何网络拓扑的变化都会直接影响路由交换设备的性能, 因此路由交换设备的路由表必需能够对网络拓扑变化及时处理, 才能保证路由数据报文转发的正确性 对于 BGP 而言, 作为主流的 EGP 路由协议, 尤为关注路由维护的 153
156 网络之路 ROUTE TO NETWORK 稳定性, 因此 BGP 的稳定性测试是测试的重点 稳定性测试主要通过网络拓扑变化和路由持续变化的模拟, 来测试路由交换设备处理动态路由环境的能力, 本文主要关注路由收敛和抗路由抖动能力这两个方面 路由收敛测试 路由收敛测试从两个方面可以考虑, 一是路由学习收敛能力, 另一个是路由切换收敛能力 针对图 1 的测试组网分别进行阐述 路由学习收敛能力!"#1 (IBGP%&'( DUT!"#3 (EBGP%&'(!"#2 (IBGP%&'( 1) 场景设置 图 1 路由收敛能力测试组网 在路由收敛学习能力测试中, 待测设备和测试端口 1 建立 IBGP 邻接关系, 和测试端口 3 建立 EBGP 邻接关系 需要注明的是,IBGP 和 EBGP 的选用可以根据测试需要进行调整, 没有强制要求 2) 测试步骤 a 在待测设备上观察, 等待 BGP 对等体连接建立 b 测试端口 1 构造 BGP 路由, 路由数目建议取待测设备实测的 BGP 路由规格的 50% c 测试端口 2 构造流量, 目的是步骤 b 通告的路由条目, 流量大小取吞吐量的 30-50% d 启动测试端口的路由发布和流量发布 3) 测试结果分析 154
157 深入讨论网络应用测试方法综述篇 frames/sec T1 T2 T3 T4 Time(sec) 图 2 路由学习收敛能力评估 路由学习收敛能力评估难点在于收敛时间起始点的确定, 如图 2 所示,T1 代表测试端口开始发送第一个 update 报文的时间点,T2 代表待测设备第一条 BGP 路由计算成功时间,T3 代表测试端口发送完所有 Update 的时间点 首先我们看看选用 T2 这个值, 往往在图形界面的结果统计中, T2 的选取相对直观 但是选择 T2 其实忽略了待测设备接受路由时间和路由计算的时间, 这个时间的忽略对收敛能力的评估不能非常实际的反应实际情况, 毕竟在路由接收和路由计算算法上在 T2 之前会因为实现的差别存在着能力的差异 再看看选用 T3 的情况, 图 2 的蓝色虚线代表的就是测试端口发完所有 BGP 路由,T3 是这个事件和路由收敛过程的交汇点 这个时间点应该是滞后于待测设备第一条路由计算成功的时间, 因此在 T2-T3 区间, 部分路由已经计算收敛, 因此该时间段是待测设备在, 选择 T3 的考虑是能够抛开测试端口发送 BGP 路由的时间 T1 时间点的选用, 我们先看 T1-T2 的时间段, 这个时间段包含了测试端口发送第一个 update 到第一条路由计算收敛完成, 路由转发生效的时间,T2-T4 是所有 BGP 路由计算收敛和路由转发生效的时间 因此 T1-T4 能够将路由接收 路由同步 路由计算及下发等等因素都纳入计算时间, 所以 T1 的选择更合理一些 但是需要说明的是, 无论哪个时间点的选择, 收敛时间严格比较的前提是测试端口发送时间相同及忽略链路延迟的因素 155
158 网络之路 ROUTE TO NETWORK 路由路径切换收敛能力 1) 场景设置待测设备和测试端口 1 2 通过链路端口地址建立 IBGP 邻接关系 2) 测试步骤 a 查看待测设备和测试端口 1 2 的 IBGP 邻接关系是否建立成功 b 测试端口 1 2 同时向待测设备通告相同的路由, 路由条目取规格数目的 50% c 通过通告路由属性的设置例如将测试端口 1 的路由 origin 属性设置为 IGP, 将测试端口 2 的路由 origin 属性设置为 incomplete, 让路由优选端口 1 或者在待测设备上通过路由策略, 例如将测试端口 1 的 local-preference 设置比测试端口 2 大, 优选端口 1 d 测试端口 3 构造流量, 目的是步骤 c 通告的路由前缀, 流量大小为实测吞吐量的 30-50% 3) 测试结果分析路径切换收敛是发生路由变化或者网络拓扑变化, 可以模拟测试端口 1 发送针对步骤 c 的路由撤销, 也可以直接将测试端口 1 进行 shutdown 这两种事件对于待测设备进行路由处理行为稍有不同, 对于发送路由撤销, 测试端口会发送 Update, 待测设备收到撤销报文后进行路由撤销并重新优选路由 ; 路由属性发生变化, 待测设备进行路由优选 ; 测试端口 1 链路中断, 由于待测设备和测试端口 1 是通过链路端口建立 BGP 邻接, 因此会快速检测到邻接关系 DOWN, 并删除对应的路由条目进行路由重选 下面我们就分别对这三种方法进行分析 frames/sec T1 T3 T4 测试端口 2 测试端口 1 T2 Time(sec) T5 图 3 路径切换路由收敛能力评估 1 156
159 深入讨论网络应用测试方法综述篇 图 3 是中蓝色代表测试端口 1 收到的测试流量, 红色代表测试端口 2 收到的测试流量 T1 是测试端口 1 发送第一个撤销报文的时间点,T2 是待测设备路由删除起始时间点,T3 是第一条测试端口 2 通告路由优选成功的时间点,T4 是测试端口 1 所有路由删除的时间点,T5 是所有测试端口 2 通告路由优选的时间点 从这几个时间点可以得到几个收敛值,T1-T4 可以得到待测设备收到路由撤销到全部撤销的时间值,T3-T5 可以得到路由起始重选到全部重选的时间值,T1-T5 是计算整个路由收敛的时间值 这一点和路由学习收敛能力计算的第三种方法相对应 T1-T2 在忽略发送接受延迟的前提下, 可以大概得出路由接受到删除前的处理时间 在路径切换收敛能力测试中, 还需要注意的是路径切换过程中发生的报文丢失, 可以通过报文丢失率作为评估收敛能力的一个指标 前文提到的测试端口 1 发送撤销报文或者属性修改的路由更新, 其收敛特征曲线基本都符合图 3, 但是在实际测试中, 两种不同的方法得出的结果会因为处理流程的不同得出不同的结果, 因此建议在测试中可以进行测试对比 frames/sec T1 T3 测试端口 2 测试端口 1 T2 Time(sec) 图 4 路径切换路由收敛能力评估 2 图 4 显示的是测试端口 1 发生接口 DOWN 时间的流量特征,T1 是测试端口 1 发生 DOWN 的时间点, 在这个时间测试端口 1 的流量中断, 在 T1-T2 过程中待测设备进行路由更新,T2 开始重选出第一条路由,T3 所有的路由重选成功 相对来说, 这种测试方法相对简单, 但是无法测试收到路由撤销进行路由删除的过程, 但是可以避免测试仪器发送路由撤销快慢的干扰 157
160 网络之路 ROUTE TO NETWORK 等价路由收敛在考虑上述两种情况后, 我们还需要考虑存在等价路径的情况, 在具体分析前我们先确定, 等价路由生效后, 路由转发是平均分担在几个等价路径上进行转发这样的前提 等价路由负载分担的情况下的收敛测试, 考虑两种场景 : 断开其中一条链路或者添加一条链路 断开一条链路,BGP 通过计算会删除一条路由, 转发表会删除该路由出接口对应的条目 但是实际的流量转发理论上不会中断或丢包 frames/sec T1 Time(sec) 图 5 等价路由收敛 1 图 5 显示的是实际测试中流量特征, 在路径切换时会有少量的丢包, 在实际测试过程中丢包率是测试衡量的重要指标, 在很多选型或入网测试中要求丢包数量限定在一个范围内 当添加一条路径和已有路径形成等价时, 由于 BGP 需要重新路由收敛, 并同步刷新路由转发表项, 因此会带来一定的转发时延, 图 6 显示的是该测试过程中的延迟情况 平均延迟 图 6 等价路由收敛 2 Time(sec) 158
161 深入讨论网络应用测试方法综述篇 抗路由抖动能力测试 路由抖动是模拟在网络中路由的反复更新 / 撤销时, 路由交换设备处理路由更新的能力 这种能力关注两个方面, 一是在路由更新处理的同时, 路由转发的抗干扰能力, 另一个是在转发路径上, 路由的更新和转发恢复能力 路由转发的抗路由抖动干扰能力!"#1 (IBGP%&'( )*-. DUT )*-.!"#3 )*+,!"#2 (IBGP%&'( 图 7 路由抗抖动能力 1 1) 场景设置 图 5 是路由转发抗路由抖动干扰能力的组网图, 测试端口 1 2 和待测设备建立 IBGP 邻接关系, 测试端口 1 和测试端口 3 作为路由转发测试端口, 测试端口 2 作为路由抖动测试端口 实际在测试的复杂度可以根据需要进行扩展, 比如提高路由抖动测试端口的数量, 流量进行 full-mesh 设计 2) 测试步骤 a 测试端口 1 向待测设备发送一定数量的路由, 建议路由数量取 30% 规格 b 测试端口 3 发送流量, 目的地是测试端口 1 通告的路由前缀 c 测试端口 2 向待测设备发布路由, 数量取路由规格的 30% d 测试端口 2 每隔一个固定周期进行路由的撤销 / 重新通告 3) 测试结果分析在测试步骤 d 进行过程中, 待测设备会被动的反复进行路由更新处理, 其路由处理和同步转发表项的压力都会骤增, 这种压力的情况下测试端口 3 和测试端口 1 之间的路由转发受干扰的程 159
162 网络之路 ROUTE TO NETWORK 度是本测试关注的重点 可以观测测试端口 3 到测试端口 1 之间的转发的传输延迟和传输速率平 均值和路由抖动前的百分比 路由的更新和转发恢复能力!"#1 (IBGP%&'( )*-. )*+, )*-. DUT )*-.!"#3 )*+,!"#2 (IBGP%&'( 1) 场景设置 图 8 路由抗抖动能力 2 路由抗抖动能力测试组网, 路由抖动和路由转发的测试端口重合, 也就是说路由抖动是发生在路由转发路径上 测试端口 1 2 和待测设备建立 IBGP 邻接关系, 测试端口 1 2 作为路由抖动测试端口, 测试端口 作为路由转发测试端口 2) 测试步骤 a 测试端口 1 2 向待测设备通告路由, 数量取路由规格的 50% b 测试端口 1 2 周期进行 50% 已通告路由的撤销和重发布 c 测试端口 3 发布流量, 目的为步骤 a 通告的路由前缀 3) 测试结果分析步骤 2 中的路由撤销, 会导致该部分路由的删除, 以及转发表的同步删除, 流量对应丢失 重新发布后, 路由会重新计算并同步转发表, 转发恢复 同时, 未抖动的路由应该保持路由稳定及持续转发 图 9 显示的是流量特征和转发延迟分布特征, 通过平均转发延迟的计算可以评估抗抖动能力 : 160
163 深入讨论网络应用测试方法综述篇 frames/sec 平均延迟 路由重新通告 测试端口 1 撤销路由 性能规格测试 对于路由设备, 尤其是核心路由设备, 对其路由的性能规格是测试的重点 性能规格测试分为两种情况, 一是在给定的规格数据前提下, 进行验证测试 ; 另一种是通过逐步添加进行规格数据的摸底测试 下面介绍几个典型的性能规格测试项, 部分是针对摸底测试的测试方法, 一部分是规格验证测试 BGP 对等体会话连接数 BGP 的对等体是建立在 TCP 连接上, 因此可以建立端到端的对等体连接 TCP 连接能够保证 BGP 连接的稳定性和可靠性, 但是对系统资源的消耗也相应增加 BGP 对等体会话数量是 BGP 性能规格测试的一个重点!"#1 (IBGP%&'( DUT!"#2 (EBGP%&'( 图 10 BGP 对等体会话连接数 161
164 网络之路 ROUTE TO NETWORK 1) 场景设置测试端口 1 和测试端口 2 的设置是为了测试待测设备的 IBGP 邻接和 EBGP 邻接, 已 IBGP 为例 2) 测试步骤 a 测试端口 1 创建逻辑子接口, 待测设备对应的建立逻辑子接口 b 待测设备和测试端口 1 通过子接口建立 IBGP 邻接 c 测试端口 1 通过建立的 IBGP 邻接通告路由, 整体通告的路由数量建议是规格的 50% d 测试端口 2 打目的是步骤 c 通告的路由前缀, 流量大小去实际吞吐量的 30-50% e 不断增加步骤 a 的子接口数量和步骤 b 的 IBGP 会话邻接数量, 重复步骤 c d 3) 测试结果分析如何衡量连接数量的多少是会话连接规格测试的难点 很多测试资料中忽略了测试步骤 c d, 不断增加连接数, 直到无法建立新的 BGP 连接 这种方法的客观性较差, 在没有路由通告和路由转发的压力下得出的数据无法贴近实际网络 通过观察路由学习 路由转发稳定性 CPU 利用率几个方面综合考虑, 持续 BGP 会话连接数的增加, 系统的压力会逐步加大, 对于路由学习的能力 路由转发的稳定性以及 CPU 利用率都会受到影响 可以通过观察保证路由学习 路由转发 CPU 利用率正常的临界点, 来确定 BGP 会话连接数量的规格 可以选择测试 EBGP 的邻接, 以及 IBGP 和 EBGP 的混合邻接数量, 在测试资源允许的情况下可以多接入一些测试端口, 和待测设备建立邻接关系 162
165 深入讨论网络应用测试方法综述篇 BGP 路由表容量 路由表容量测试是路由协议性能规格测试的重点之一, 测试组网可参照图 8 1) 场景设置测试端口 1 和测试端口 2 的设置是为了测试待测设备的 IBGP 邻接和 EBGP 邻接, 已 IBGP 为例 2) 测试步骤 a 测试端口 1 和待测设备建立 IBGP 邻接关系 b 测试端口 1 向待测设备发送一定数量的路由条目, 假设为 5 万条 c 测试端口 2 发送流量, 目的是步骤 b 发送的路由前缀 d 在步骤 b 的基础上按一定数量递增通告路由数量, 同时步骤 c 的流量目的对应修改 3) 测试结果分析有两种方法来检测路由学习容量, 一个是在测试端口 2 和待测设备建立 EBGP 邻接, 在测试端口 2 观察收到待测设备发来的 update 报文, 当无法收到新的 Update 报文时, 检查当前有效通告的 Update 报文包括的路由数量 这种方法是目前使用较多的方法, 但是在使用这种方法种都忽略了路由转发这个环节, 实际的路由容量应该是以正常进行路由转发为前提, 当选择无法发送 Update 这个时间点, 可能在此之前路由转发已经无法正常 笔者认为, 应该综合 update 发送 路由转发稳定性 CPU 利用率几个方面来考虑, 任何其中一项无法保持正常状态都应停止路由递增, 结束测试 BGP 等价路由数目 往往在待测设备的软件实现中限定了等价路由的数目, 这种测试往往在满等价路由规格的情况下测试待测设备的路由学习能力 路由转发稳定性及 CPU 利用率 163
166 网络之路 ROUTE TO NETWORK!"#1 (IBGP%&'( DUT!"#2 (EBGP%&'( 图 11 BGP 等价路由规格测试 1) 场景设置 图 11 显示了最简化的等价路由测试环境, 待测设备和测试端口 1 对应创建 N( 等价路由规格数 ) 个逻辑子接口, 通过子接口建立 IBGP 邻接关系 2) 测试步骤 a. 测试端口 1 的 N 个子接口向待测设备通告相同的路由前缀, 路由前缀数量乘以 N 等于路由容量的 50% b. 测试端口 2 构造流量, 目的是测试步骤 a 通告的路由前缀, 流量大小是实测吞吐量的 30-50% 3) 测试结果分析首先我们需要观察测试步骤 a 中通告路由的学习情况以及测试步骤 b 的转发稳定性, 以及此时的 CPU 利用率 在上述三个方面都正常时, 说明等价路由规格能够满足 很多厂家可能会提供其他的规格项, 如 AS 联盟内子 AS 的规格数目 团体属性的团体个数 network 引入的路由数目, 这些规格项多数是验证测试, 思路可以延承等价路由的测试思路, 本文不再具体描述 164
167 深入讨论网络应用测试方法综述篇 [ 最新进展 ] 165
168 网络之路 ROUTE TO NETWORK 前言 在过去的几年中, 人们对边界网关协议 (BGP) 进行了大量的研究和思考 但是在目前的互联网中甚至是在任何运行 BGP 协议的私有网络中大规模更换 BGP 几乎是不可能的 与其更换 BGP, 不如通过引入新的功能来增强它并满足新的需求 近年来,BGP 在如下方面取得了不少的进展, 主要表现在性能方面 ( 如提 BGP 最新发展 文 / 程锋章 高收敛速度 ) 可靠性( 如动态能力协商 GR) 安全性(TTL 检测 防攻击 ) 以及扩展性 (VPNv6,4 字节 AS) 等 性能优化 性能优化的研究方向很多, 比如路 由决策 路由更新以及路由收敛等, 各个厂商都有其内部的一些实现来更好的满足实际需要, 不便一一展开详述 比如在 H3C 设备上针对 BGP 提供的特性 keepall-routes, 该特性用来保存所有来自对等体 / 对等体组的原始路由信息, 即使这些路由没有通过已配置的入口策略 这样在策略控制更改后能够迅速进行新的路由决策和更新 当然目前的研究更多的是集中如何提高路由的收敛性能上 166
169 深入讨论最新进展综述篇 BFD for BGP BFD 提供了一个通用的 标准化的 介质无关 协议无关的快速故障检测机制, 可以为各上层协议如路由协议 MPLS 等统一地快速检测两台路由器间双向转发路径的故障 BFD 在两台路由器上建立会话, 用来监测两台路由器间的双向转发路径, 为上层协议服务 BFD 本身并没有发现机制, 而是靠被服务的上层协议通知其该与谁建立会话, 会话建立后如果在检测时间内没有收到对端的 BFD 控制报文则认为发生故障, 通知被服务的上层协议, 上层协议进行相应的处理 BGP 协议的 keepalive 时间间隔缺省为 60 秒, 最小可以配置为 1 秒, 这样 holdtime 缺省为 180 秒, 最小为 3 秒, 邻居关系的检测比较慢, 对于报文收发速度快的接口会导致大量报文丢失 通过 BFD 进行快速故障检测, 可以实现邻居关系的快速检测, 加快协议收敛, 有点类似 ospf 的快速 hello 特性 路由更新 路由更新早在 BGP 提出的时候已经发展成熟, 属于路由协议中必不可少的一部分, 通过定时的更新路由报文来满足实际需要, 并且针对 IBGP 和 EBGP 默认设置不同的更新周期, 比如 H3C 设备 IBGP 默认更新周期为 15S,EBGP 则为 30S 实际上这种实现也有其缺点, 比如可能从一定程度上降低了收敛的速度 部分路由的震荡可能影响其他路由的收敛, 实现过于保守 在 RFC4271 第 9 节中提到 : The parameter MinR outeadvertisementintervaltimer(mrai) determines the minimum amount of time that must elapse between an advertisement and/or withdrawal of routes to a particular destination by a BGP speaker to a peer 协议要求指定对等体在发送或者撤销路由过程中必须间隔 MRAI, 比如对等体更新完路由后启用 MRAI 定时器, 在这个时间内不会发送新的更新或者撤销消息 当定时器超时后开始发送更新或者撤销报文 ( 如果有 ), 这个更新过程完成后再次启用 MRAI 定时器重复之前步骤 通过该方法能够避免持续路由震荡对设备影响, 提高设备稳定性, 同时一定程度上能够提高收敛性能 比如在实际应用中考虑到 AS 内部要求快速收敛, 所以针对 IBGP 设置的 MRAI 要比 EBGP 小 由于该方法并不能控制路由决策, 所以在 MRAI 超时的时候, 最近一次被优选出来路由将被发送出去 也就是说对端收到的路由可能暂时不是最优的路由, 针对这种情况可以调小 MRAI, 尤其是 IBGP 或者 PE-CE 的 EBGP 邻居 167
170 网络之路 ROUTE TO NETWORK 可靠性 Graceful Restart Mechanism for BGP with MPLS 在 RFC 4724(Graceful Restart Mechanism for BGP) 中讲述了一种帮助减少 BGP 重起对路由的负面影响机制, 而在最新的 RFC 4781(Jan 2007 Graceful Restart Mechanism for BGP with MPLS) 继续扩展该机制以便在 BGP 携带 MPLS 标签时, 减少在 BGP 重起时对 MPLS 转发的负面影响 该机制对于 BGP NLRI 中携带的地址类型是不可见的, 因此它可以在 BGP 中携带的任何地址族中工作 在 LSR 能够在其控制平面重起 ( 尤其是 BGP 重起 ) 时能够保留其 MPLS 转发状态, 那么在此过程中最好能够不对经过该 LSR 的 LSP( 尤其是由 BGP 路由 ) 造成干扰 该文档中讲述的机制和 Graceful Restart Mechanism for BGP 一起来实现该目标 支持该机制的 LSR 使用 Graceful Restart Capability 向对等体进行能力通告, 在能力通告中的 SAFI 应该表示 NLRI 不仅仅包括地址前缀还应该包括相应的标签 在 LSR 控制平面重起后遵循 Graceful Restart Mechanism for BGP 中的处理过程 另外, 在此过程中如果 LSR 能够保留 MPLS 转发状态,LSR 通过将对所有 AFI/SAFI 的 Graceful Restart Capability 的设置适当的 Flag 域 为了叙述简便这里所说的 MPLS 转发状态是指入标签到出标签 下一跳或者地址前缀到出标签 下一跳的映射 ( 见 RFC4781) 转发状态就是指 MPLS 转发状态在重起过程中不需要保留 IP 转发状态 一旦重起的 LSR 完成了路由选择除了完成正常的 GR 重起过程还要进行如下操作 : 第一种情况 : a) 路由器选择的最优路由是和标签一起接收的 ; b) 该标签不为空 ; c) LSR 将自己作为路由的下一跳 ; 重起 LSR 在 MPLS 转发状态中搜索 < 出标签下一跳 > 和收到的路由中一致的表项 如果找到该表项 LSR, 不再将该表项标注为 stale, 而且如果找到的表项是 ( 入标签,< 出标签下一跳 >) 而不是 ( 前缀,< 出标签下一跳 >) 时,LSR 在向邻居通告时使用入标签 如果找到的表项中没有入标签或者没有这样的表项,LSR 在向邻居通告路由时将选择一个没有使用的标签 第二种情况 : a) 重起的 LSR 选择的最优路由时要么没有标签要么是一个空标签或者该路由是由重起路由 168
171 深入讨论最新进展综述篇 器自己产生的 ; b) LSR 将自己通告为该路由的下一跳 ; c) LSR 必须为该路由分配一个非空标签 ; 此时 LSR 在 MPLS 转发状态中查找需要进行标签弹出操作并且下一跳相同的表项 如果找到了该表项,LSR 在向邻居通告路由时使用该表项中的入标签 ; 如果找不到该表项, 那么在向其他邻居通告路由时将选择一个没有使用的标签 上段描述默认重起的 LSR 对于相同下一跳分配相同的标签 如果实际不是这种情况而且重起的 LSR 将为每条有相同下一跳的路由分配一个不同的标签, 那么 LSR 在重起过程中不仅需要保留 < 入标签,( 出标签, 下一跳 )> 的映射, 还要保留和该映射相关联的地址前缀 此时 LSR 将在 MPLS 转发状态中查找 (a) 标签弹出 ;(b) 路由下一跳相同 ;(c) 具有相同前缀的表项, 如果找到了该表项 LSR 在向邻居通告时使用表项中的入标签 ; 如果没有该表项, 那么在通告路由时将选择一个没有使用的标签 第三种情况, 这种情况适用于重起的 LSR 没有将自己设置为 BGP 下一跳的情况 此时重起的 LSR 在通告特定 NLRI 的最佳路由时使用和路由一起接收的标签 如果没有标签和路由一起接收那么 LSR 在通告时也不带标签 避免最佳路径迁移 (Avoid BGP Best Path Transitions) BGP 有一个很重要的特性即是防止环路, 但是在某些情况下环路的确存在而且无法避免, 导致路由不断更新和变化始终无法收敛, 具体可以参看 BGP MED Churn 避免最佳路径迁移的 RFC 刚形成不久, 其目的是 : The proposed extension to the BGP route selection rules avoids unnecessary best-path transitions between external paths under certain conditions. Clearly, the extension would help reduce routing and forwarding changes in a network, thus helping the overall network stability.more importantly, as shown in the following example, the proposed extension can be used to eliminate certain BGP route oscillations in which more than one external path from one BGP speaker contributes to the churn. Note however, that there are permanent BGP route oscillation scenarios [RFC3345] that the mechanism described in this document does not eliminate. 169
172 网络之路 ROUTE TO NETWORK 实际上通过 5001 提出的方法可以防止环路的出现 具体方法见下图 : R1 40 R2 R R4 (a) (b) (c) Path AS MED Identifier a b c 图 1 避免最佳路径迁移示意图假设路由 c 不存在, 在 R3 上面应该是选择 B( 因为默认 EBGP 路由不比 MED 值, 所以选择 BGP ID 小的即 B); 当 C 存在的时候在 R3 上面应该是选 A( 因为 C 比 B 优, 但是 A 又比 C 优 ), 所以 C 撤销的话触发 A 切换到 B, 引起最佳路径切换 一旦 R3 上面比较两个 EBGP 路由选定 A 为最佳路由, 则该路由被设定为最佳路径而且不再改变, 这样即使 C 撤销或者反复震荡也不会影响 R3 设备 AS 域间路由的变化, 提高了网络设备稳定性 AS 稳定迁移 H3C 设备提供了 AS 稳定迁移功能 在实际应用中, 运行 BGP 的路由器一般情况下是只能属于一个 AS, 但是可能由于某种原因该 AS 可能需要迁移或者和其他 AS 进行合并,H3C 的 BGP 命令 FAKE- AS 就是用来解决 AS 迁移过程所遇到的麻烦 该特性具体介绍可以参看章节 BGP 新特性 动态更新邻居能力 传统 BGP 在变更相关能力配置的时候, 需要断掉邻居关系重新建立 举个例子 : 一台正在转发数据的 BGP 路由器, 由于需要提供 VPLS 能力, 所以需要配置上相关的能力地址族 这样必然导致 BGP 邻居重新建立, 从而引发数据丢失 整网路由震荡 路由重新学习等问题 动态更新邻居能力这个特性, 可以在配置新的能力地址族的时候发送新的 OPEN 报文, 同时邻居动态地把新 170
173 深入讨论最新进展综述篇 增加的能力记录下来 这样可以保证在邻居关系不会重新建立前提下, 提供了更多其他业务服务, 提高了转发稳定性 这个特性对保证网络稳定性很有效果, 在 draft-ietf-idr-dynamic-cap-05.txt 中提到 : This document defines a new BGP capability termed "Dynamic Capability", which would allow the dynamic update of capabilities over an established BGP session. This capability would facilitate non-disruptive capability changes by BGP speakers. 为此定义了一种新型 BGP 报文,type 为 6, 其内容如下 : Init/Ack (1 bit) Ack Request (1 bit) Reserved (5 bits) Action (1 octet) bit) Sequence Number (4 octets) Capability Code (1 octet) Capability Length (1 octet) Capability Value (variable) 图 2 动态能力字段编码格式 安全性 先看一个小故事, 某年 2 月 24 日,Google You Tube 视频服务意外中断了两个小时 原因起始于巴基斯坦, 该国的 ISP( 互联网服务供应商 ) 决定切断对 You Tube 的访问, 在网络上发布 错误 的 BGP 路由, 即开始发布自己是 You Tube 所属 网络空间 256 个地址的正确 BGP 路径 由于这样的 BGP 路由远比正宗 You Tube 网站发布的还要详细, 根据即时网络流量监控公司 Renesys 的时间表, 亚太地区的网络服务商在 15 秒内就开始将 You Tube 的访问导向这家巴基斯坦的 ISP, 而其他地区的路由器也在 45 秒后就开始跟进 很快, 这些数据同时也通过网络传送给了 171
174 网络之路 ROUTE TO NETWORK 中国香港的 ISP 服务商 PCCW 后者又通过 Internet 把这些数据传播给了其他 ISP 一场大范围的 You Tube 访问中断就此出现 那么, 为何全球的路由器都会 误入歧途? 直接原因是 PCCW 没有检验来自他们客户的 BGP 数据, 而最值得人们关注的则是, 像 Google 在防止这种问题上仍然无能为力 Arbor Networks 公司首席研究官 Danny McPherson 说 : 他们不能阻止 Internet 上的某人发布他们的地址空间, 这是个巨大的安全漏洞 这是一起典型的非法路由注入事件 目前为止, 各类互联网服务商只能事先 相信 其他服务商不会刻意捣乱或者去拦截他人的互联网地址 而一旦有类似的情况发生, 则可以采用人工介入加以修正, 比如这次事件中,You Tube 就通过随后加入更精确的广播, 从而给路由器一个正确的导向 但是考虑到这种错误广播的出现次数可能还会增多, 研究人员已经开始建议设立一种拦截警示程序, 当互联网地址的虚拟地址变更时, 网络供应商可自动获得通知 此外, 这类事件也有望让人们更加重视 Secure BGP 这类技术, 它采用加密方式来确认哪些网络供应商拥有网络地址并有权广播 问题是, 这一技术虽然早在 1998 年提出, 但被认为复杂度太高, 要真正采用可能还需要做很多工作 事实针对 BGP 弱点的攻击形式很多, 在 draft-convery-bgpattack-00.txt 中有一些介绍, 比如针对 MD5 (RFC 2385) Attacks 建立未经授权的 BGP 连接 发布和注入未经授权的 BGP 路由 发送欺骗性质或者非法的 BGP 消息 影响 BGP 连接建立的 TCP 报文攻击等 还有不少潜在的风险, 比如路由震荡 聚合路由 BGP 团体属性等都有可能成为被攻击的地方 下面简单介绍一些新的安全方面的进展 : TTL 安全检测机制 TTL 安全检测机制主要是用来防止多跳攻击 我们知道 BGP 存在 2 种邻居关系 : 内部邻居关系 (IBGP), 外部邻居关系 (EBGP) 建立这两种邻居关系的时候 IBGP 是不检测 TTL 的,EBGP 在缺省是发送个 TTL 等于 1 的协议报文 如果 RA 与 RB 开启了 TTL 安全检测功能, 设定从 RB 转发给 RA 的 BGP 协议报文的 TTL 必须为 255, 同时 RA 拒绝接受任何 TTL 比 254 小的 BGP 报文 那么即使存在攻击者其报文 TTL 最大为 255, 转发给 RA 的时候 TTL 必然减 2, 这样即使 RA 接受到一个 TTL=253 的协议报文也会自动丢弃, 从而达到防攻击的效果 172
175 深入讨论最新进展综述篇 TTL=253 B TTL! 254"#$ A TTL=254 TTL=255 Attacker 图 3 TTL 安全检测 当网络存在安全威胁的时候, 通过 TTL 安全检测可以防止潜在的安全隐患 RFC3682(The Generalized TTL Security Mechanism (GTSM)) 详细描述了这种机制 攻击流量分析隧道技术 draft-turk-ertb-00.txt 文档描述一种使用 BGP 团体属性进行远程触发特定目的网络的黑洞路由技术, 黑洞路由可以在选择的一些 BGP 路由器中应用, 而不需要在网络中所有的 BGP 路由器中应用 ; 同时还提出了利用 BGP 团体属性的 攻击流量分析隧道 ( sinkhole tunnel, 本义是污水池隧道技术 ), 该技术可以将网络中的流量牵引到一个指定路由器中进行分析 当前的远程黑洞技术依赖于将曾经经历过某种异常 ( 包含攻击 ) 的一些目的网络地址在 BGP 中通告, 该通告是由 BGP 域中的一台路由器来完成, 在通告中将这些网络地址的下一跳修改并将它指向在 RFC1918 中指定的私有地址范围内的一个地址 ( ~ , ~ , ~ ) 而在 Internet 中的大多数路由器尤其是边界路由器都会配置将上述地址的下一跳指向接口为 null0 的静态路由 BGP speaker 在 BGP speaker 在收到上述通告后在自己的路由表中将安装该目的网段的路由并将下一跳指向私有地址 173
176 网络之路 ROUTE TO NETWORK 范围内的一个地址, 路由器在执行路由查找时将决定以这些私有地址为目的地址的数据包转发到什么接口, 由于在路由器中有一条静态路由将这些地址为目的的路由指向 null 接口, 因此这些流量将被丢弃因此攻击者对所通告的网络不可达从而不能攻击 这项技术对网络基础设施减轻了攻击流量的负担, 另一方面, 上述网段在 BGP 运行的区域是不能运行的即使某个 BGP speaker 没有将 RFC1918 地址指向 null 接口, 修改下一跳将导致其合法的目的地不可达, 当然大部分 ISP 不会将这些黑洞在所有时间内存在, 他们仅在一段时间内将黑洞打开将进入网络的所有路由都丢弃, 依靠大部分路由器都有对丢弃的流量报文给源地址发送 ICMP 不可达报文的配置, 可以将这些 ICMP 报文发到某一个特定地址上来搜集这些 ICMP 不可达报文 从这些报文中将可以找出上述被丢弃流量是从那些边界路由器进入网络的, 然后运营者将选择停止从那些路由器进来的流量 ISP 有几种方法来减少攻击对网络的冲击, 以上述将受攻击目标网络引入黑洞并将相应的 ICMP 不可达报文引出来从而确定攻击流量的入口等措施开始, 然后隔离相应接口和对等体网络, 最后安装 ACL, 限速策略或将这些流量转发到 null 接口 其他的技术可以用一种可以用一种技术识别 DOS 攻击并识别攻击流量从那些端口进入然后利用 Netflow, 这样比较省时省力 这些技术都依赖在特定路由器上手工制止攻击流量 本文档提出一种远程触发可选择的一些路由器将以受攻击网络为目的地址的流量转发到 null 接口或者将这些流量转发到 攻击流量分析隧道 该技术不使用关于攻击流量的 ACL 或限速策略, 也不将攻击流量的下一跳地址修改为 RFC1918 地址 它仅仅通过边界路由器的 BGP 的团体属性改变路由选择 首先 ISP 需要为每个可能成为网络攻击流量入口的边缘路由器分配一个唯一的团体值 以一个包含两个边界路由器 R1 和 R2 的小 ISP 网络为例, 假定 AS 为 65001,ISP 可以为 R1 分配团体值为 65001:1, 为 R2 分配团体值为 65001:2, 为 R1 和 R2 全体分配团体值 65001:666, 然后在边界路由器上进行如下操作 : 1. 在 R1 R2 上配置将 RFC1918 地址指向 null 接口的静态路由 ; 2. 配置匹配 BGP 本地产生的网络前缀的 AS-Path 访问列表 ; 3. 配置匹配 ISP 为本路由器分配的 BGP 团体访问列表 ( 比如 65001:1 for R1); 174
177 深入讨论最新进展综述篇 4. 配置匹配 ISP 为所有路由器分配的 BGP 团体访问列表 ( 比如 65001:666 for R1and R2); 5. 在 BGP 进程下 IBGP 输入路由策略将应用于如下逻辑操作如下步骤按照逻辑与的顺序 : a.. 允许通过如下匹配的路由 ; I. 与特定路由器的团体值匹配 ( 比如 65001:1, for R1); II. 与本地产生的 BGP 通告路由的 AS-PATH 匹配 ; III. 将 BGP 路由的下一跳设置成 RFC 1918 地址 ; IV. 将 BGP 的团体属性修改成 no-advertise; b. 允许通过如下匹配的路由 I. 与所有路由器的团体值匹配 ( 比如 65001:666, for R1 和 R2); II. 与本地产生的 BGP 通告路由的 AS-PATH 匹配 ; III. 将 BGP 路由的下一跳设置成 RFC 1918 地址 ; IV. 将 BGP 的团体属性修改成 no-advertise; 这些策略在 R1 和 R2 上配置后,ISP 在受到攻击的情况下, 在 BGP 中通告受攻击网络同时带上引入攻击的路由器的团体值, 并保留其实际下一跳,IBGP 将该路由通告到 AS 内所有路由器, 除了与这个团体值匹配的路由器外, 其他路由器将忽略该团体值并在路由表中安装带有合法下一跳地址的该路由, 而与该团体值匹配的路由器将安装该路由并将其下一跳修改为 RFC1918 地址, 然后将他转到 null 接口, 匹配本地通告的路由是保证 EBGP 用户不会错误地使用该团体值, 从而将该网段的数据包引入 null 接口 该技术在标识为攻击流量转发的路由器上停止转发到合法目的网段的流量, 因此网络中的其他到达合法目的网络地址的流量将不受影响 攻击流量分析隧道 进一步发展该增强的远端触发黑洞路由技术, 有必要观察这些攻击路由以便将来分析 该需求增加了复杂性, 通常在广播接口在遍历端口 (spanned port) 通过安装网络监听软件将流量输出分析 ; 另一种方法是发送一个包含攻击主机地址的网络地址到 BGP 域, 将下一跳地址改变为攻击流量分析设备 进行记录并且分析 当需要记录攻击网络地址并进行数据包级别的分析时, 攻击流量隧道的概念应运而生 这个概念的思想是当流量从隧道的一端进入后将会从另一端出来, 这个概念在流量转发时下一跳地址没有改变时有实际意义 175
178 网络之路 ROUTE TO NETWORK 首先攻击流量分析路由器 sinkhole router 和网络监听分析 sniffers 工具连接在一起, 这些将所有的可能从其他 AS 引入数据包的边界路由器到 sinkhole router 之间的隧道可以通过比如 MPLS TE 来建立 这样允许利用团体值的技术来将目标网段的下一跳改变成一系列的 /30 子网 ( 该子网的两个地址连接隧道的两端 ), 换言之, 边界路由器将下一跳变成隧道另一端的 sinkhole router,as 内的其他路由器对于通告中预先设定的团体值忽略 ; 由于改变路由匹配在其他地方不存在, 如果合法的流量从网络的其他部分进入 AS, 其下一跳不会被改变攻击流量在 sinkhole 被终结 如果需求不要求中断流量而是在分析后重新送回到流量的目的地, 那么流量将被重新送回原来网络, 路由协议要保证将数据包重新送到原来的地址中 目前相关技术有 RFC 文档 3882(Configuring BGP to Block Denial-of-Service Attacks), 通过配置 BGP 来防止 DOS 攻击, 作者是同一人, 感兴趣可以看看 BGP over IPSEC IPSec(IP Security) 是 IETF 制定的三层隧道加密协议, 它为 Internet 上传输的数据提供了高质量的 可互操作的 基于密码学的安全保证 特定的通信方之间在 IP 层通过加密与数据源认证等方式, 提供了以下的安全服务 : 数据机密性 (Confidentiality) 数据完整性(Data Integrity) 数据来源认证(Data Authentication) 防重放(Anti-Replay) 可以通过 IKE(Internet Key Exchange, 因特网密钥交换协议 ) 为 IPSec 提供自动协商交换密钥 建立和维护安全联盟的服务, 以简化 IPSec 的使用和管理 IKE 协商并不是必须的,IPSec 所使用的策略和算法等也可以手工协商 实际上 IPSEC 的应用已经非常成熟, 目前解决 BGP 安全问题的一个方法就是利用 IPSEC 加密 BGP 报文, 保证数据的机密性等 实际上这种技术不算什么新的技术, 虽然能从一定程度上防范未经过认证 BGP 报文的攻击, 但是 BGP 攻击的方式很多, 比如破坏 TCP 连接的 TCP RST 报文 带有欺骗性质的路由更新报文等,BGP over IPSEC 对于欺骗性质报文的防范存在很多的困难 入口和出口策略过滤 根据 draft-ietf-idr-route-filter-06.txt(cooperative Route Filtering Capability for BGP-4) 中描述到 : 在目前的 BGP 实现中一般由 BGP speaker 接收路由然后根据本地的路由策略将一些不需要的路由过滤掉 考虑到发送方路由的产生发送和更新以及接收方处理路由更新均需要消耗资源 文档定义了一种基于 BGP 的机制允许 BGP speaker 给对等体发送一系列输出路 176
179 深入讨论最新进展综述篇 由过滤 Outbound Route Filters (ORF) 对等体将应用这些过滤条件和对等体自己配置的过滤条件共同过滤要发送的路由, 同时加强了安全控制 ORF 定义 ORF 项目由 <AFI/SAFI, ORF-Type, Action, Match, ORF-value> 一个 ORF 可以由一个或多个具有相同的 <AFI/SAFI, ORF-Type> 的 ORF 项目组成 ;Action 控制对等体处理 ORF Request 的动作可以是 ADD, REMOVE,REMOVE-ALL;Match 为 PERMIT 或者 DENY; 团体 ORF-Type 团体 ORF-Type 允许用 BGP 团体属性来表示 ORF, 也就是说团体 ORF-Type 提供基于团体属性的路由过滤 团体 ORF-Type 由 <Scope, Communities> 组成 Scope 表示对等体对于给定 ORF request 必须考虑的路由范围可以是 EXACT 或者 NORMAL EXACT 表示让对等体仅仅考虑考虑路由的团体属性和 ORF 列表中给出的团体属性相同的部分 ;NORMAL 表示让对等体可以考虑 ORF 列表中的团体属性列表的子集部分 ; 扩展团体 ORF-Type 扩展团体 ORF-Type 允许用 BGP 扩展团体属性来表示 ORF 也就是说扩展团体 ORF-Type 提供基于扩展团体属性的路由过滤扩展团体 ORF-Type 由 <Scope, Communities> 组成,Scope 表示对等体对于给定 ORF request 必须考虑的路由范围可以是 EXACT 或者 NORMAL;EXACT 表示让对等体仅仅考虑考虑路由的扩展团体属性和 ORF 列表中给出的扩展团体属性相同的部分 ;NORMAL 表示让对等体可以考虑 ORF 列表中的扩展团体属性列表的子集部分 ; 在 BGP 中携带 ORF 项 ORF 项目是在 BGP ROUTE-REFRESH 消息中携带 BGP speaker 能够通过消息头带的长度中确定 BGP ROUTE-REFRESH 消息中是否携带了 ORF 项目 一个 BGPROUTE-REFRESH 消息可以携带多个 ORF 项目, 只要这些项目的 AFI/SAFI 是相同的 从编码角度讲 ORF 包括公共部分和类型相关部分 : 公共部分由 <AFI/SAFI, ORF-Type, Action, Match> 组成团体 ORF-Type 类型相关部分团体 ORF-Type 的 ORF-Type 值为 2 由 <Scope, Communities> 组成,scope 包括 EXACT 和 NORMAL; 177
180 网络之路 ROUTE TO NETWORK 扩展团体 ORF-Type 类型相关部分扩展团体 ORF-Type 的 ORF-Type 值为 2, 由 <Scope, Extended Communities> 组成 scope 包括 EXACT 和 NORMAL ORF 操作能够从对等体接收 ORF 或者向对等体发送 ORF 的 BGP speaker 需要用 BGP 能力通告 (RFC 2842) 进行能力协商, 需要实现 ORF 的 BGP speaker 需要支持 BGP ROUTE-REFRESH 消息 ( 在 RFC2918 中定义 ) BGP speaker 在向对方通告 ORF 能力时不一定需要向对方通告 BGP Route Refresh 的能力 BGP speaker 向对等体通告 ORF 能力表示可以接受 <AFI, SAFI, ORF-Type>, 并且从对等体接收 ORF 能力表示对方希望给自己发送 <AFI, SAFI, ORF-Type> 如果对于一个给定的 <AFI, SAFI> 两者的交叉部分不为空,BGP speaker 在从对等体接收到关于该 <AFI, SAFI> 的任何 ROUTE- REFRESH 消息前, 不需要向对等体通告关于该 <AFI, SAFI> 的路由 这些 ROUTE-REFRESH 可以不包含任何 ORF 项, 或者带有一项或多项 ORF When-to-refresh 域设置成 IMMEDIATE 如果两者的交叉部分为空时则遵循普通 BGP 过程 AS 路径和 NLRI 信息认证 在 BGP draft< draft-ietf-rpsec-bgpsecrec-09.txt> 文档中提出一系列的安全性要求, 对目前的应用有着较好的指导作用, 比如 AS 路径和 NLRI 信息认证等 使用该机制来验证接收的路由信息中承载的自治系统路径的有效性 目前在该领域的研究较多, 而且该文中提到的其他方法也在研究之中 针对特定前缀的路径信息的保护大致可以包括一下四方面的内容 : A) 授权 AS 发布路由 : 路由前缀的所有者授权指定 AS 产生和发布其指定路由 ; B) 检查 AS: 要求从某对等体收到的 Update 报文中路由信息的 AS-path 属性中的第一个元素匹配该对等体设置的 AS 号 ; C) 检查 AS 路径可行性 :AS-PATH 列表符合 as 中规定策略中的有效列表 ; D) 路由更新信息传输检测 : 比 C 更严格的检查项, 主要是检查通过该 AS 的路由更新消息能够满足某一特定的安全要求, 避免路由非法注入等攻击 178
181 深入讨论最新进展综述篇 扩展性 BGP 这个协议本身已经不会有大的变动, 由于其报文格式采用 TLV 编码, 非常方便组合和修改 针对 BGP 的扩展应用很多, 自从 RFC2858(Multiprotocol Extensions for BGP-4,BGP-4 多协议扩展,obsoletes RFC2283) 发布以来就可以使 BGP 不仅仅具备 IPv4 能力, 还能支持其他能力比如 BGP4+ MPLS Multicast 等 同时一些新的能力协商也跟随着 BGP 的扩展应用不断加入进来 4 字节 AS 自治域系统号 (Autonomous System number, 下文简称 AS) 是拥有同一选路策略, 在同一技术管理部门下运行的一组路由器的集合 BGP 的 RFC 里留给 AS 的范围是 2 个字节, 所以 AS 的范围为 , 其中 以上的为私有 AS 但是鉴于 IPv4 地址空间不够这个前车之鉴, 在 RFC4893 里记录了一个 BGP 的新功能 4 字节 AS(BGP Support for Four-octet AS Number 一般用 M.N 来描述 ) 由于 BGP 在邻居协商以及路由发送接受的时候都需要利用 AS 这个属性, 所以 RFC4893 里也对相应的属性的扩展变化做出了解释 为了便于读者理解, 下面列出了 RFC4893 定义的相关新的属性以及说明 由于该特性最大的变化是 AS 的变化, 所以所有的属性扩展都是基于 AS 的相关属性, 只是属性的 TYPE 值的变化, 具体介绍可以参看章节 BGP 新特性 MPLS L3VPN for IPv6 早在 <draft-ietf-l3vpn-bgp-ipv6> 已经提出 IPv6 VPN 的概念, 目前该 draft 已经形成正式的 RFC4659 在理论上 IPv6 VPN 和 IPv4 VPN 没有什么区别 与 IPv4 相似的是,MP-BGP 是 MPLS VPNv6 的核心部件 它被用于在 SP 骨干网上分发 IPv6 路由, 具有相同的重叠地址 再分发策略和扩展问题的处理方式 先介绍一些简单术语 : 1) 6VPE 路由器 在基于 IPv4 的 MPLS 核心网络上提供 BGP-MPLS IPv6 VPN 服务的 PE 路由器 其基础是一个 VPNv6 PE 和双栈 (IPv4+IPv6), 双栈实现了面向核心接口的 6PE 概念 2) VPNv6 地址 一个 VPNv6 地址是一个 24 字节的标识符, 以 8 个字节的路由区别符号 (RD) 开始并以 16 字节的 IPv6 地址结束 有时它被称为 VPN IPv6 地址 179
182 网络之路 ROUTE TO NETWORK 3) VPNv6 地址族 地址族标识符 (AFI) 定义了一个特殊网络层协议和子 AFI(SAFI) 提供的附加信息 AFI IPv6 即 SAFI VPN(AFI=2,SAFI=128) 被认为是 VPNv6 地址族 ; 在 IPv6 VPN 中, 尽管不希望在 IPv6 出现地址重叠问题, 但地址仍旧使用 RD 来规划 同时定义一个新的网络层可达信息 (NLRI) 的三元组格式 < 长度,IPv6 前缀, 标签 >, 其目的是使用 MP- BGP 分发路由 一个 VPNv6 地址是一个 16 字节的 IPv6 地址, 预先带有 8 个字节的 RD, 构成了 24 个字节的地址 如同 IPv4 一样,VPNv6 前缀只在 MP-BGP 内有意义 VRF 概念对于熟悉 MPLS 的人来说是一个常用的概念, 一个 VRF 定义为一个虚拟路由选择的转发表项, 它绑定了一个私有的路由选择和转发表, 即常提到的私网路由表 有人可能认为, 既然 IPv6 带有自己的路由选择和转发表, 那么应该有不同的 IPv4 和 IPv6 VRF 实际上, 尽管 IPv4 和 IPv6 路由选择表的确不同, 但是从部署角度来看, 共享一个 VRF 是非常方便的 目前可以看到的实现即是如此, 在全局的 VRF 视图下增加 IPv6 地址族视图, 这样一个 VRF 下面可以同时配置 IPv4 和 IPv6 的 RD 和 route-target 信息 总体来说,VPNv6 的实现和 IPv4 较为类似, 许多 BGP 特性比如反射 路由刷新 路由过滤 聚合等支持并无二样 MPLS TE 当前 IGP 协议对于 MPLS TE 的支持比较完备, 比如 isis 和 ospf 都已经有相关的成熟实现和 RFC 支撑 MPLS TE 是使用 MPLS 技术来实现 TE, 首先收集 TE 关心的链路信息, 然后使用 IGP 算法满足某条流的特定约束条件计算出一条路径, 再通过其信令协议 RSVP-TE 或者 CR-LDP 建立 lsp 隧道 针对 EGP 协议的应用暂时没有, 实际相关研究也不多 目前 BGP 也没有正式的 RFC 提出 BGP 支持 MPLS TE, 不过笔者在 IETF 上面发现一篇 draft(draft-ietf-softwire-bgp-teattribute-00.txt), 是基于 GMPLS 信令协议的 拿过来简单分析一下, 有兴趣可以关注一下 该 draft 定义一种新的 BGP 属性 (Traffic Engineering), 该属性是可选非过渡属性 180
183 深入讨论最新进展综述篇 Switching Cap Encoding Reserved Max LSP Bandwidth at priority 1 Max LSP Bandwidth at priority 2 Max LSP Bandwidth at priority 3 Max LSP Bandwidth at priority 4 Max LSP Bandwidth at priority 5 Max LSP Bandwidth at priority 6 Max LSP Bandwidth at priority 7 Switching Capability-specific information (variable) Interface MTU Minimum LSP Bandwidth 图 4 TE 属性字段编码格式 S w i t c h i n g C a p a b i l i t y ( S w i t c h i n g C a p ) 和 E n c o d i n g 字段的定义等同于 (RFC3471,Generalized Multi-Protocol Label Switching (GMPLS) Signaling Functional Description) 中 Section 所描述的定义 Reserved 字段为保留字段在传输过程中必须设置为, 在接收端被忽略 181
184 网络之路 ROUTE TO NETWORK Switching Capability specific information 字段的内容跟 Switching Capability 字段有 关, 当 Switching Capability 是 PSC-1, PSC-2, PSC-3, or PSC-4 时候, 它由最小 lsp 带宽和接 口 mtu 组成, 见图 5: 图 5 Switching Capability 属性字段编码格式 当 Switching Capability 是 L2SC 时候, 则不带该字段 当 Switching Capability 是 TDM 时候, 它由最小 lsp 带宽和接口标识 (Indication) 组成,Indication 字段表示该接口是支持标准还是私有的 SONET/SDH(1 表示标准,0 表示私有 ) 总体来说, 在 BGP 扩展性上面 TE 的研究不是很多而且暂时看不到巨大的需求 在 BGP 扩展的研究中, 还有许多比较有新意的东东, 比如 draft-boucadair-qos-bgp-spec-01.txt draftjacquenet-qos-nlri-04.txt 中对于 QOS 的研究等, 不过目前进展不大, 这里不深入讨论 针对 BGP 的缺点和应用, 目前提出的改进方法和研究很多, 以上只是从四方面描述一下目前的发展 其中收敛速度 策略和安全是 BGP 亟待解决的问题, 为 BGP 发展提供了发展方向参考 然而不断对 BGP 进行逐步改进也促使我们进行思考 : 是对 BGP 进行小的改变使它越来越复杂? 还是承受所有部署问题而更换 BGP 协议? 182
185 深入讨论最新进展综述篇 BGP 新特性 文 / 杨默寒 BGP(Border Gateway Protocol, 边界网关协议 ) 是目前因特网骨干网络使用的核心路由协议, 也是部署最广泛的路由协议 在过去的几十年里,Internet 的发展速度令人震惊, 伴随着发展的同时,ISP 或者企业网对自身网络有了新的要求, 它们希望自身网络可以提供更良好的扩展性与服务质量 这些需求大部分是通过 BGP 协议的相关新特性来满足, 所以本文着重介绍了这些新特性供读者参考 FAKE-AS 运行 BGP 的路由器一般情况下是只能属于一个 AS 的, 但是可能由于某种原因该 AS 可能需要迁移或者和其他 AS 进行合并,FAKE-AS 就是用来解决 AS 迁移过程所遇到的麻烦 请看图 1: RA RB RC AS100 AS2000 图 1 FAKE-AS 迁移前拓扑 183
186 网络之路 ROUTE TO NETWORK 如图 1 RA 属于 AS100,RB 属于 AS200 他们之间建立 EBGP 邻居 由于某些原因, 可能 AS200 内的 路由器要进行 AS 迁移, 也就是说要修改自己的 BGP 配置使网络过渡成图 2 的状态 : RA RB RC AS100 AS2000 图 2 FAKE-AS 迁移后拓扑 AS200 迁移为 AS2000 后如果 RA 也根据 RB AS 的变化做出相应的配置修改, 那么没有问题 但是可能由于某种原因 RA 所在的 AS 组织并不想修改自己的配置, 所以遇到这样的问题就需要 FAKE- AS 来解决 由于 RA 不修改自己的配置所以至少需要解决以下 2 个问题 : BGP 在建立邻居的过程中会互相发送 OPEN 报文, 要让 RA 认为 RB 发送过来的 OPEN 报文里面关于 AS 的记录是 200, 而不是 2000; RB 在发送给 RA 的路由, 在 AS PATH 属性里面记录的第一个 AS 必须是 200, 而不是 2000 我们通过在 RB 上配置 FAKE-AS 功能可以完美的解决上述的 2 个问题, 达到 RB 在迁移 AS 的时候 RA 完全不需要修改任何 BGP 相关配置 条件通告 在实际环境中一台 BGP 路由器经常会保存多条相同的前缀, 这样可以起到备份的作用, 如图 3: 184
187 深入讨论最新进展综述篇 RB AS200 RC RA *> N.n.n.n RB * N.n.n.n RC AS100 图 3 条件通告功能描述拓扑图 RA 通过 AS200 去访问目的为 N.n.n.n 的网络, 由于有备份的需求 RA 与 RB,RC 都建立 BGP 邻居关系, 并且优选了从 RB 来的路由, 这样当 RB 出现故障或者 RA 与 RB 之间的链路出现故障,RA 可以通过从 RC 学习到的路由访问网络 N.n.n.n 实际网络中 RA 需要访问的目的地址可能很多, 按照图 3 所用的方法当 RA 需要访问 个目的网段, 那么需要存储 个 BGP 路由, 这样对路由器的内存是有一定要求的 当内存不足时可能会出现部分网络无法访问, 或者 BGP 邻居关系重新建立 条件通告这个功能就是解决上述问题的 下面具体介绍一下这个功能的处理流程 : 首先在 RA 上配置一个 LOOKBACK 接口 ( 假设为 /32), 把该地址发布到 BGP, 并且只发送给 RB; 185
188 网络之路 ROUTE TO NETWORK RC 会通过与 RB 的 IBGP 邻居关系学习到该路由 ; 在 RC 上启用条件通告, 判断条件为 : 是否存在 /32 的 BGP 路由, 如果存在则不发送任何路由给 RA; 如果不存在, 发送路由给 RA; 这样当网络正常的时候 RA 只有从 RB 学习到路由, 当 RB 或者 RA 与 RB 之间的链路出现故障那么 RA 会只有从 RC 学习到的路由 动态 RT 最早在 RFC2547 里定义了 MPLS-L3VPN 的网络模型, 该 RFC 具体描述了在 MPLS-L3VPN 里设备的角色以及数据封装传输的过程, 以及 BGP 需要的相应扩展 BGP 为了支持 MPLS-L3VPN, 除了增加了 VPNv4 的能力之外, 还在发送 VPNv4 路由的时候在路径属性里增加了扩展团体属性 Route-Target(RT) 该属性的 TYPE 值为 16 属于可传递属性, 该属性的作用是根据团体属性的值来决定是否接受某条 VPNv4 路由 请看图 4: RC n.n.n.n/32 RT 100:1 BackBone VPN2 VPN1 RA n.n.n.n/32 RT 100:1 RB VPN1 图 4 未配置动态 RT 前拓扑 RA 从 VPN1 学习到的路由以 VPNV4 的形式发送给 RB,RC 同时携带 RT 属性 在 RB 与 RC 上有相关 VPN 的配置, 可能在开始部署的时候 VPN2 并不想接受 VPN1 的路由所以当路由 N.n.n.n/32 到达 RC 的时候, 因为 RT 的值和本地的配置值不匹配, 该路由被丢弃掉 ; 当路由 N.n.n.n/32 到达 RB 的时候, 因为 RT 的值和本地的配置值匹配, 路由被接收 可能会存在这么一个需求 :VPN1 虽然与 VPN2 是隔离的, 但是 VPN2 需要访问部分 VPN1 的网络资源, 那么解决办法有以下三个 : VPN1 重新配置相关的 RT 规则, 缺点 : 所有路由的 RT 属性都被修改, 可能都被 VPN2 接收 186
189 深入讨论最新进展综述篇 VPN2 与 VPN1 融合, 缺点 : 无法完成隔离的需求, 需要用 ACL 来隔离而且修改配置可能会引起路由震荡 利用动态 RT 的特性我们主要讲解一下如何用动态 RT 这个特性来解决该问题, 主要分为一下几个步骤 : RA 发送路由的时候, 可以利用动态 RT 的特性来区分发送的路由, 不同的路由附加上不同的 RT 组, 如图 5( 假设 VPN2 需要访问 VPN1 内部的 M.m.m.m/32 服务 ); RC m.m.m.m/32 RT 100:1 200:1 BackBone VPN2 VPN1 RA m.m.m.m/32 RT 100:1 200:1 VPN1 RB 图 5 配置动态 RT 后拓扑 动态 RT 对 M.m.m.m/32 这条路由附加了两个 RT 属性 :100:1 200:1 由于 VPN2 默认配置是可以接受 200:1 的路由的, 所以这条路由会被收到 VPN2 的路由表 对于其他路由由于动态 RT 对其不感兴趣, 所以不做修改依然只有 100:1 这一个 RT 值 ; 在 RB 上的处理和以前一样, 只要路由的 RT 列表里面存在 100:1 就可以被接受 ; 邻居动态建立 熟悉 BGP 配置的读者可能知道在配置 BGP 的时候需要指定邻居的 AS 和邻居的具体地址, 这主要是为了保证邻居建立的可靠性和安全性 但是随着 BGP 的广泛部署, 可能有时候不能确定邻居的具体地址, 或者需要建立多少个邻居, 因为这些邻居可能是通过 ADSL 或者 DHCP 等动态方式动态获得的 IP 地址, 尤其在 Hub&Spoke 组网这种问题更为常见 邻居动态建立特性就是为了解决该问题, 该特性解决的问题以及注意事项如下 : 至少需要有一个邻居设备有固定的 IP 地址和 AS 号码, 我们称它为 RA; 187
190 网络之路 ROUTE TO NETWORK RA 上需要配置一个邻居的地址池, 来确定邻居的 IP 地址范围 ; RA 上需要配置一个 AS 的号码池, 来确定邻居的 AS 范围 ; 当建立邻居的时候 RA 需要检测邻居的 IP 地址与 AS 号码是否在相应的范围内 ; 邻居的安全可以通过 TCP 的 MD5 保障 ; 实现上需要把 RA 在 BGP 的状态机停留在 ACTIVE 比较合理 TTL 安全检测 BGP 存在 2 种邻居关系 : 内部邻居关系 (IBGP), 外部邻居关系 (EBGP) 建立这两种邻居关系的时候 IBGP 是不检测 TTL 的,EBGP 在缺省是发送个 TTL 等于 1 的协议报文 但是当网络存在安全威胁的时候, 通过 TTL 安全检测可以防止潜在的安全隐患 请看图 6:!BGP"#$% 图 6 TTL 安全检测功能描述拓扑 RA 和 RB 建立 EBGP 邻居关系, 默认 RB 发送给 RA 的 TTL 为 1 如果存在攻击者模拟 RB 发送的数据包, 可能会影响 RA 的性能甚至 RA 的路由选路 如果 RA 与 RB 开启了 TTL 安全检测功能, 那么 RA 可以设定 RB 发过来的 BGP 协议报文的 TTL 必须为 255 那么即使存在攻击者, 当攻击数据被 RB 转发给 RA 的时候 TTL 必然减 1, 这样 RA 接受到一个 TTL 非 255 的协议报文会自动丢弃, 从而达到防攻击的效果 4 字节 AS AS (Autonomous System number, 自治域系统号 ) 是拥有同一选路策略, 在同一技术管理部门下运行的一组路由器的集合 BGP 的 RFC 里留给 AS 的范围是 2 个字节, 所以 AS 的范围为 , 其中 以上的为私有 AS 但是鉴于 IPv4 地址空间不够这个前车之鉴, 在 RFC4893 里记录了一个 BGP 的新功能 4 字节 AS(BGP Support for Four-octet AS Number, 一般用 M.N 来描述 ) 由于 BGP 在邻居协商以及路由发送接受的时候都需要利用 AS 这个属性, 所以 RFC4893 里也对 188
191 深入讨论最新进展综述篇 相应的属性的扩展变化做出了解释 为了便于读者理解, 下面列出了 RFC4893 定义的相关新的属性以及说明 由于该特性最大的变化是 AS 的变化, 所以所有的属性扩展都是基于 AS 的相关属性, 只是属性的 TYPE 值的变化 AS4_SEQUENCE: 记录了该路由传递过程中所经过的 AS; AS4_SET: 当出现聚合的时候, 记录了聚合路由所合并的 AS; AS4_CONFED_SEQUENCE: 在联盟中使用, 作用和 AS4_SEQUENCE 类似 ; AS4_CONFED_SET: 在联盟中使用, 作用和 AS4_SET 类似 ; AS4_AGGREGATOR: 记录了聚合者的 AS 号码 ; 细心的读者可以发现上面所描述的属性与 2 字节的 AS_PATH 相关属性具有相同的作用, 所以对于熟悉 BGP 的使用者来说很好理解 接下来我们会讨论一下在网络迁移的过程中存在部分路由器只支持 2 字节 AS 的时候的过渡方法, 请看图 7: /24 RA RB RC as_path: 图 7 迁移组网拓扑 RA 与 RC 为支持 4 字节的 AS 功能的路由器,RB 为只支持 2 字节的 AS 功能的路由器 如果出现上图这种情况, 我们需要解决以下这些问题 : RFC4893 给了一种建议, 里面定义了一个公用 2 字节 AS 号码 AS_TRANS, 也就是说需要一个单独的 2 字节 AS 为专门用于衔接 4 字节 BGP 路由器与 2 字节 BGP 路由器, 并且 AS_TRANS 不能被其他路由器或者组织使用 ; 如上图 RA 收到一条四字节 AS 的路由,AS 号码为 1.1; RA 与 RB 建立邻居, 需要令 RB 认为 RA 的 AS 号为 AS_TRANS; RA 发送路由给 RB 的时候把 AS_TRANS 记录在 AS_SEQUENCE 里面, 把 1.1 与自己的 AS 号码 按照 BGP 要求的顺序记录在 AS4_SEQUENCE; RB 对于不识别的属性 AS4_SEQUENCE 不作处理依然保留, 它只按照 BGP 的规则来发送路由 189
192 网络之路 ROUTE TO NETWORK 给 RC 当然它认为 RC 的 AS 号码也是 AS_TRANS, 这样路由发送的过程如图 8( 我们假设 AS_TRANS 为 23456): /24 RA RB RC as_path:1.1 as_path: as4_path: as_path: as4_path: 图 8 路由发布说明 这样当 RC 收到从 RB 来的路由会把 AS_TRANS 按照顺序来替换为 AS4_SEQUENCE 里所记录的相应的地址, 在 RC 上把 AS4_PATH 属性还原为 有些更复杂的情况是关于聚合的时候 4 字节 AS 与 2 字节 AS 相关的聚合属性如何处理, 本文就不作过多描述了, 有兴趣的读者可以参看 RFC4893 里面的相关章节 正则表达式过滤团体属性 团体属性是一个可选传递的属性, 具体定义在 RFC1997 该属性为一个 32BIT 的字段可以记录在 BGP 路由的路径属性当中, 按照 RFC 的定义从 0x 到 0x0000FFFF 和从 0xFFFF0000 到 0xFFFFFFFF 是被预留出来的, 其他部分都可以被网络规划者所使用 目前, 网络规划者和路由器厂商都习惯把该属性分为 2 部分 : 前 16 位一部分, 后 16 位一部分 因为我们知道 AS 号的范围是 2 个字节, 所以可以用前 16 位来代表 AS, 后 16 位一般位用户自定义的数值 比如一个常见的团体属性表达方法可能是 1111:1 团体属性在过滤路由的时候有着自己独有优势, 同时也可以根据用户的规划使管理者可以迅速的知道某些路由的特殊用途 用户可以定义一些业务与团体属性的后 16 位对应, 比如在一个 SP 网络里定义 101 代表 WWW 服务器路由,102 代表 MAIL 服务器路由,103 代表 VOIP 设备路由 那么在 AS100 发布这些路由的时候, 可能就需要对相应的路由设置上相应的团体属性 (100:101,100:102,100:103) 当然, 对于其他 AS 来说, 可能会不需要 VOIP 的服务, 所以在 AS 边界可以通过对团体属性的过滤完成 (deny 100:103) 上述方法在 AS 数量比较少的时候是可行的 当存在大量 AS 并且都按照相同的规则发布路由, 如果依然根据刚才的方法过滤路由, 对于配置者来说可能是一个挑战 所以可以利用正则表达式过滤团体属性这个功能来完成 我们假设, 要过滤所有的 MAIL 服务的路由, 那么只需要配置 deny.*:102 即可 关于正则表达式的具体用法, 可以参考本刊的相关章节 190
193 深入讨论最新进展综述篇 保存多条相同前缀的标签路由 保存多条相同前缀的标签路由 这个特性从文字上理解不是很好理解, 我们还是从实际 网络中遇到的问题来具体说明这个特性的作用, 请看图 9: /32 RA RB / /32 AS100 AS200 图 9 路由发布的方向 AS300 RA 从 AS100 的两个 EBGP 邻居收到了到 /32 的路由 如果 RA 上配置了负载分担功能, 那么 RA 访问 /32 的时候可以同时利用两条路径 当 RA 把路由发送给 RB 的时候, 虽然 RA 的 BGP 路由表里有两条最优的 BGP 路由, 但是 RA 会认为他们是同一条路由 所以 RA 只会发送一条路由给 RB 当 RB 需要访问 /32 的时候, 会先把数据发给 RA, 再由 RA 负载分担 这样依然可以到达有效利用带宽的效果 但是, 当网络需要进行 MPLS 转发的时候, 问题可能就不这么简单了 我们以标签路由为例 ( 该标签路由可以是 IPv4 路由, 也可以是 VPNv4 路由 ), 请看图 10: /32 Label 101 RA /32 Label 201 RB /32 Label 102 AS100 AS200 AS300 图 10 未支持保存多条相同前缀的标签路由功能前路由发布说明 191
194 网络之路 ROUTE TO NETWORK RA 依然从 AS100 的两个 EBGP 邻居学习到了 /32 的路由, 但是有一点小变化, 这条路由是按照 RFC3107 所定义的标签路由 这样当 RA 访问 /32 的网络时候, 不会再走 IP 转发, 而是走 MPLS 转发 如果 RA 上配置了负载分担功能, 依然可以实现负载分担, 这个和 IP 转发的情况一样 但是 RB 可能会有点小麻烦, 因为 RA 仍然只会发送一条路由给 RB 这样当 RB 访问 /32 的时候也是先走 MPLS 转发 当数据到 RA 的时候,RA 根据入标签查找出标签, 也就是 MPLS 转发表 ( 注意不再是 IP 转发表!) 然而很遗憾在 RA 上的 MPLS 转发表只有两种可能, 分别是 : 表 1 标签映射 1 OUT LABEL IN LABEL 表 2 标签映射 2 OUT LABEL IN LABEL 或者 这样当 RB 访问 /32 的时候, 在 RA 上无法实现负载分担 保存多条相同前缀的标签路由 就是为了解决这种问题, 该特性记录在 RFC3107 后半部分, 属于 BGP 的一种新能力, 代码为 4 RFC 上原文的描述如下 : A BGP speaker that is capable of handling multiple routes to a destination (as described above) should use the Capabilities Optional Parameter, as defined in [BGP-CAP], to inform its peers about this capability. The value of this capability is 4. [1] 该特性要求,BGP 在区分路由的时候, 不能只根据前缀判断还要根据标签值 我们可以重新回顾以下刚才的那个问题, 见图 11. 当 RA 与 RB 都支持该特性,RA 在发送路由给 RB 时认为 /32 LABEL 101 与 /32 LABEL 102 是两条不同的路由, 所以都会发送给 RB 同时 RB 也认为这两条路由虽然前缀相同但标 192
195 深入讨论最新进展综述篇 /32 Label 101 RA RB /32 Label /32 Label /32 Label 102 AS100 AS200 AS300 图 11 支持保存多条相同前缀的标签路由功能前路由发布说明 签值不一样, 所以不是同一条路由 当 RB 启动负载分担的功能后, 访问 /32 时可以封装上不同的标签 (201 和 202) 然后发送数据给 RA RA 接受到数据时, 根据入标签查找出标签 这个时候 RA 上的 MPLS 转发表如下 : 表 3 标签映射 3 OUT LABEL IN LABEL 通过 保存多条相同前缀的标签路由 特性, 可以使得网络带宽更有效的被利用 最后需要说明一点,BGP 在发送路由撤销的时候是不携带任何属性的 但是启用这个特性后, 需要在撤销路由的时候明确标签值, 来告诉邻居具体要撤销掉哪条路由 动态更新邻居能力 传统 BGP 在变更相关能力配置的时候, 需要断掉邻居关系重新建立 举个例子 : 一台正在转发数据的 BGP 路由器, 由于需要提供 VPLS 能力, 所以需要配置上相关的能力地址族 这样导致了和其他 BGP 邻居关系的重新建立, 这样必然会导致转发数据的丢失 整网路由的震荡等 路由的重新学习等问题 动态更新邻居能力这个特性, 可以在配置新的能力地址族的时候发送新的 OPEN 报文, 同时邻居动态地把新增加的能力记录下来 这样可以保证在邻居关系不会重新建立前提下, 提供了更多其他业务服务 这个特性对保证网络稳定性很有效果, 但是目前该特性还无具体的 RFC 193
196 [ 缩略语 ] 缩写 英文原文 中文释义 AS Autonomous System 自治系统 BGP Border Gateway Protocol 边界网关协议 EBGP Exterior Border Gateway Protocol 外部边界网关协议 EGP Exterior Gateway Protocol 外部网关协议 GR Graceful Restart 优雅重启动 IBGP Interior Border Gateway Protocol 内部边界网关协议 IGP Interior Gateway Protocol 内部网关协议 L3VPN Layer 3 VPN 三层 VPN MBGP Multiprotocol extension Border Gateway Protocol 多协议扩展边界网关协议 MED MULTI_EXIT_DISC 多出口鉴别 MPLS Multiple Protocol Label Switch 多协议标签交换 NLRI Network Layer Reachability Information 网络层可达性信息 RR Route Reflector 路由反射器 VPN Virtual Private Network 虚拟私有网
197 主办单位 :H3C 测试中心 策划 : 刘宇陈旭盛杜祥宇 主 编 : 陆宇翔 编 委 : 张宇弟 贾欣武 程锋章 姜杏春 陈磊 朱皓 杨默寒 许亮 叶翀 孙丽 高国义 智晓彦 曹霞 杜一鸣 吾生也有涯而知也无涯以有涯随无涯殆已 庄子 养生主 ROUTE TO NETWORK ROUTE TO NETWORK ROUTE TO NETWORK ROUTE TO NETWORK 网络之路
1 1 2 OSPF RIP 2
MPLS VPN 1. TCP/IP IP IP IP IP 1 1 2 OSPF RIP 2 2 RIP OSPF BGP DVMRP IS- IS IP 1. Unicast Routing Protocol Multicast Routing Protocol RIP OSPF BGP IS-IS DVMRP PIM-SM PIM-DM 2. IGP EGP IGPRIP OSPF IS-ISEGP
目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas
目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding
目录 1 IPv6 快速转发 IPv6 快速转发配置命令 display ipv6 fast-forwarding aging-time display ipv6 fast-forwarding cache ipv6 fas
目录 1 IPv6 快速转发 1-1 1.1 IPv6 快速转发配置命令 1-1 1.1.1 display ipv6 fast-forwarding aging-time 1-1 1.1.2 display ipv6 fast-forwarding cache 1-1 1.1.3 ipv6 fast-forwarding aging-time 1-3 1.1.4 ipv6 fast-forwarding
...31 (POTS) Internet VPN VPN VPN ATM ( ) CPE VPN L2TP PPTP ( ) IPSec ( ) VPN (PP-VPNs) MPLS VPN BGP/MPLS VPN RFC2547bis ( ) RFC 2547bis VPN RFC 2547b
RFC 2547bis: BGP/MPLS VPN Juniper 网络公司, 爱立信公司,2001 年 3 月...2 BGP/MPLS VPN...2...3...3...3...4...4...4...5...6 BGP/MPLS VPN...7...7...8 VPN-IPv4...8 BGP...9...9...10 BGP...11 VPN...13 PE...13...14 VPN...16
untitled
7.1 7.1.1 IP R1 N N,R1,M IP 1 7.1.2 [Quidway]display ip routing Routing Tables: Destination/Mask proto pref Metric Nexthop Interface 0.0.0.0/0 Static 60 0 120.0.0.2 Serial0 8.0.0.0/8 RIP 100 3 120.0.0.2
財金資訊-80期.indd
IPv6 / LINE YouTube TCP/IP TCP (Transmission Control Protocol) IP (Internet Protocol) (node) (address) IPv4 168.95.1.1 IPv4 1981 RFC 791 --IP IPv4 32 2 32 42 IP (Internet Service Provider ISP) IP IP IPv4
目录 简介... 3 通过 Local_Pref/MED 属性控制 BGP 路由走向... 4 测试拓扑... 4 业务要求... 4 详细配置过程... 5 设备基础配置... 5 IGP 的配置... 5 BGP 的配置... 7 BGP 属性调整前路由检查 针对 LP/MED 路由
FortiGate 通过控制 BGP 的 Local_Pref 与 MED 等属性 以控制路由走向 版本 1.0 时间 2016 年 1 月 支持的版本 FortiGate v4.0.x v5.0.x 5.2.x 5.4.0 作者 状态 反馈 刘康明 已审核 [email protected] 目录 简介... 3 通过 Local_Pref/MED 属性控制 BGP 路由走向... 4
Chapter #
第三章 TCP/IP 协议栈 本章目标 通过本章的学习, 您应该掌握以下内容 : 掌握 TCP/IP 分层模型 掌握 IP 协议原理 理解 OSI 和 TCP/IP 模型的区别和联系 TCP/IP 介绍 主机 主机 Internet TCP/IP 早期的协议族 全球范围 TCP/IP 协议栈 7 6 5 4 3 应用层表示层会话层传输层网络层 应用层 主机到主机层 Internet 层 2 1 数据链路层
目录 简介... 3 BGP 重发布进 OSPF 环境拓扑图... 3 BGP 重发布进 OSPF 路由过滤... 4 FGT200B 关键配置... 4 接口 IP 配置... 4 Route-Map... 4 BGP 的配置... 5 FGT100E 关键配置... 5 接口 IP 及 BGP
BGP 与 OSPF 之间重发布时使用 Route-Map 进行路由过滤 版本 1.0 时间 2017 年 9 月 5 日星期二 支持的版本 FortiGate v5.0 v5.2 v5.4 v5.6 作者 状态 反馈 刘康明 已审核 [email protected] 目录 简介... 3 BGP 重发布进 OSPF 环境拓扑图... 3 BGP 重发布进 OSPF 路由过滤... 4
计算机网络概论
1 repeater bridge router gateway V.S OSI Repeater(Hub) 1 Repeater 2 3 ( Hub 4 Bridge 1 Bridge 2 N N DL1 DL1 DL2 DL2 Ph1 Ph1 Ph2 Ph2 1 2 Bridge 3 MAC Ethernet FDDI MAC MAC Bridge 4 5 6 7 50873EA6, 00123456
通过动态路由协议实现链路备份
通过动态路由协议实现链路备份 实验名称 通过动态路由协议实现链路备份 实验目的 掌握通过在不同链路上配置不同的路由协议实现链路备份 背景描述 你是公司高级网络管理员, 公司内部有一个很重要的服务器所在网段为 192.168.12.0/24, 平常访问通过 R1,R3 的 OSPF 路由协议, 为了保证该网段随时能够访问, 不能因为链路故障出问题, 要求你实现一个备份冗余的功能, 请给予支持 实现功能
动态路由选择协议、RIP
学习沉淀成长分享 动态路由协议 RIP 红茶三杯 ( 朱 SIR) 微博 : t.sina.com/vinsoney Latest update: 2012-06-01 课程目标 动态路由协议概述 RIP RIP 基础实验 动态路由协议概述 什么是路由 什么是动态路由协议 动态路由协议的分类 什么是路由 192.168.10.0/24 172.16.1.0/24 e0 s0 Protocol Connected
IP-Routing-05.pdf
RI P R I P - 2 RIP -1 R I P - 2 DV RIP -1 RIP-2 16... RIP-2 RIP-2 RIP -1 R I P - 2 RIP-2 RIP-2 RIP-2 V L S M disc ontiguous addr ess sp ace C I D R Cla ssless In ter -Dom ain Routing 121 1 2 2 IP RIP-2
IP505SM_manual_cn.doc
IP505SM 1 Introduction 1...4...4...4...5 LAN...5...5...6...6...7 LED...7...7 2...9...9...9 3...11...11...12...12...12...14...18 LAN...19 DHCP...20...21 4 PC...22...22 Windows...22 TCP/IP -...22 TCP/IP
Segment Routing MPLS数据平面 中文版
Segment Routing MPLS data plane 段路由 MPLS 数据平面 Clarence Filsfils Kris Michielsen SR MPLS 数据平面 SR 利用了现有的 MPLS 数据平面 如何检验 SR-MPLS 的转发 Segment Routing 数据平面 MPLS 数据平面的 SR 操作 SR 利用了现有的 MPLS 数据平面 Segment MPLS
ebook140-8
8 Microsoft VPN Windows NT 4 V P N Windows 98 Client 7 Vintage Air V P N 7 Wi n d o w s NT V P N 7 VPN ( ) 7 Novell NetWare VPN 8.1 PPTP NT4 VPN Q 154091 M i c r o s o f t Windows NT RAS [ ] Windows NT4
Microsoft Word - chp20路由重分布.doc
第 20 章路由重分布 当许多运行多路由的网络要集成到一起时, 必须在这些不同的路由选择协议之间共享路由信息 在路由选择协议之间交换路由信息的过程被称为路由重分布 (Route Redistribution) 20.1 路由重分布概述 路由重分布为在同一个互联网络中高效地支持多种路由协议提供了可能, 执行路由重分布的路由器被称为边界路由器, 因为它们位于两个或多个自治系统的边界上 路由重分布时计量单位和管理距离是必须要考虑的
OSPF over IPSec及路由冗余
OSPF over IPSec 及路由冗余 版本 1.0 时间 2011 年 12 月 作者 胡丹丹 ([email protected]) 支持的版本 FortiOS v4.x 状态 草稿 第 1 页共 10 页 目录 1. 目的... 3 2. 环境介绍... 3 3.IPSec VPN 配置... 4 4.OSPF 配置... 5 4.1 GateA 配置... 5 4.2 GateB 配置...
ebook67-10
10 10.1 r o u t e I C M P R I P (Routing Infromation Protocol) T C P / I P O S P F B G P I n t e r n e t B 10.2 routing daemon 9-1 9. 2 I P routing mechanism r o u t e routing policy I n t e r n e t I
display bgp instance-info display bgp link-state display bgp network display bgp non-stop-routing status 1-
目录 1 BGP 1-1 1.1 BGP 配置命令 1-1 1.1.1 additional-paths select-best 1-1 1.1.2 address-family ipv4 1-2 1.1.3 address-family ipv6 1-3 1.1.4 address-family link-state 1-4 1.1.5 advertise-rib-active 1-4 1.1.6
Microsoft PowerPoint CN 19
OSPF: Open Shortest Path First Distributed Link state protocol Using SPF algorithm OSPF: Open Shortest Path First OSPF --- Three Key Points Who: Exchange Link State with ALL routers Flooding What: Link
实验二、路由器的基本配置
实验十 静态路由和直连路由引入配置 一 实验目的 1. 掌握路由引入的配置 2. 理解路由引入的原理 二 应用环境 1. 在某些应用环境中需要将静态路由引入到某些动态路由协议里 三 实验设备 DCR-1751 两台 四 实验拓扑 五 实验要求 配置表 : Router-A Router-B F0/0 192.168.0.1/24 F0/0 192.168.2.1/24 S1/1 (DCE) 192.168.1.1/24
Session Dan Gill 2 IP WAN WAN? Networker NSC-114 RST-271 NSC-211 : MTBF: MTTR: MTBF MTTR : MTBF? MTTR? MTTR MTTR MTTR MTBF MTTR Mom-and-apple-pie MTBF MTBF (UPS, ) Mom-and-apple-pie Increase MTBF MTBF?
第 7 章 下 一 代 网 际 协 议 IPv6 141 足 的 措 施 只 能 是 权 宜 之 计 (3) 路 由 表 膨 胀 早 期 IPv4 的 地 址 结 构 也 造 成 了 路 由 表 的 容 量 过 大 IPv4 地 址 早 期 为 网 络 号 + 主 机 号 结 构, 后 来 引 入
第 7 章 下 一 代 网 际 协 议 IPv6 本 章 是 有 关 下 一 代 网 际 协 议 IPv6 的 描 述, 重 点 介 绍 IPv6 的 产 生 原 因 IPv6 的 地 址 与 IPv6 首 部 格 式 等 通 过 本 章 的 学 习, 读 者 应 重 点 掌 握 和 理 解 以 下 内 容 : IPv4 向 IPv6 发 展 的 必 然 性 IPv6 的 新 特 性 IPv6 地
2.1.5 export route-policy filter-policy export filter-policy import import route-policy ipv6-fam
目录 1 MCE 命令... 1-1 1.1 MCE 配置命令... 1-1 1.1.1 description... 1-1 1.1.2 display bgp vpnv4 vpn-instance group... 1-1 1.1.3 display bgp vpnv4 vpn-instance network... 1-3 1.1.4 display bgp vpnv4 vpn-instance
TCP/IP TCP/IP OSI IP TCP IP IP TCP/IP TCP/IP
TCP/IP : TCP/IP TCP/IP OSI IP TCP IP IP TCP/IP TCP/IP 1. ASCII EBCDIC Extended Binary-Coded Decimal Interchange Code 2. / (1) (2) Single System Image SSI) (3) I/O (4) 3.OSI OSI Open System Interconnection
AL-M200 Series
NPD4754-00 TC ( ) Windows 7 1. [Start ( )] [Control Panel ()] [Network and Internet ( )] 2. [Network and Sharing Center ( )] 3. [Change adapter settings ( )] 4. 3 Windows XP 1. [Start ( )] [Control Panel
动态路由选择协议、RIP
学习沉淀成长分享 动态路由协议 RIP 红茶三杯 ( 朱 SIR) 微博 :http://t.sina.com/vinsoney Latest update: 2012-06-01 Content 动态路由协议概述 RIP RIP 基础实验 动态路由协议概述 什么是路由 什么是动态路由协议 动态路由协议的分类 什么是路由 IP header Data FE1/0 PC1 192.168.1.1/24
实施生成树
学习沉淀成长分享 Spanning-tree 红茶三杯 ( 朱 SIR) 微博 :http://t.sina.com/vinsoney Latest update: 2012-06-01 STP 的概念 冗余拓扑 Server/host X Router Y Segment 1 Switch A Switch B Segment 2 冗余拓扑能够解决单点故障问题 ; 冗余拓扑造成广播风暴, 多帧复用,
untitled
1 2 3 4 5 A 800 700 600 500 400 300 200 100 0-100 10000 9500 9000 8500 8000 7500 7000 6500 6000 2006.1-2007.5 A 1986.1-1991.12 6 7 6 27 WIND A 52.67 2007 44 8 60 55 50 45 40 35 30 25 20 15 10 2001-05 2002-02
路由器基本配置
路由器基本配置 本章内容 路由器的基本操作 实验练习 常用的路由器配置方法 TFTP Console MODEM AUX telnet web 任何 Interface AUX 备份接口, 一般用于路由器的管理备份接口 路由器的操作模式 : 配置模式 1. 线路配置模式 Router(config-line)# 配置路由器的线路参数 2. 路由协议配置模式 Router(config-router)#
MASQUERADE # iptables -t nat -A POSTROUTING -s / o eth0 -j # sysctl net.ipv4.ip_forward=1 # iptables -P FORWARD DROP #
iptables 默认安全规则脚本 一 #nat 路由器 ( 一 ) 允许路由 # iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT ( 二 ) DNAT 与端口转发 1 启用 DNAT 转发 # iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 dprot 422 -j DNAT to-destination
00-MPLS分册索引
MPLS 分册索引 手册版本 产品版本 20091028-C-1.00 Release 6605 及以上版本 MPLS 分册简介 MPLS 分册内容如下 : 手册名称 手册说明 MCE MPLS 基本配置 MPLS L2VPN MPLS L3VPN VPLS MPLS TE MCE 功能是 Multi-CE 的简称, 具有 MCE 功能的交换机可以在 BGP/MPLS VPN 组网应用中承担多个 VPN
BYOD IP+Optical (IP NGN) API 4. End-to-End (Service Aware) 5. IP NGN (IP Next Generation Network) ( ) Prime Carrier Management Access Edge Co
BYOD 228 2015 IT open source DIY ( ) Up/Down HP NNMi WhatsUp Gold Nagios HP SiteScope WhatsUp Gold HP NNMi WhatsUp Gold Cacti MRTG HP ispi Performance for Metrics WhatsUp Gold ( ) Open source Agent End-to-End
投资高企 把握3G投资主题
行 业 研 究 东 兴 证 券 股 份 有 限 公 司 证 券 研 究 报 告 维 持 推 荐 白 酒 行 业 食 品 饮 料 行 业 2016 年 第 21 周 周 报 投 资 摘 要 : 上 周 市 场 表 现 和 下 周 投 资 策 略 上 周 食 品 饮 料 行 业 指 数 下 跌 0.89%, 跑 输 沪 深 300 指 数 1 个 百 分 点 食 品 饮 料 细 分 行 业 1 个 上
NNM_Advance_DS_FNL.qxd
HP OpenView Network Node Manager Advanced Edition 7.01 Network Node Manager Advanced Edition () Network Node Manager Extended Topology Problem Diagnosis Network Node Manager HP Network Node Manager - HP
Computer Networks and Internets
Part XIV 网络互连路由 ( 静态和动态路由 ; 路由信息的传播 ; BGP, RIP, OSPF; 组播路由 ) 术语 转发 传递 ( Forwarding) 指数据报传输 由主机或路由器执行 使用路由表 路由 (Routing) 专指路由信息的传播 由路由器执行 插入 / 修改路由表中的值 2 两大类别的 IP 路由 Static routing: 静态路由 系统启动时初始化路由表 除非检测到错误,
PowerPoint 演示文稿
华 为 最 高 级 别 技 术 认 证 演 讲 人 : 徐 一 鸣 / [email protected] 职 位 : HCIE 讣 证 系 统 架 构 师 HCIE 深 度 解 析 目 录 1 2 3 4 为 什 么 参 加 HCIE 讣 证 HCIE 讣 证 考 试 大 揭 秘 怎 么 获 得 HCIE 讣 证 HCIE 相 关 信 息 获 取 途 径 为 什 么 选 择 HCIE? 知
IS-IS路由协议中文教程v1
IS-IS v1.0 Chapter 0 Preface Statement BSCI Building Scalable Cisco Internetworks Configuring IS-IS Protocol IS-IS IS-IS OSI TCP/IP IS-IS OSPF Cisco System BSCI Student Guide Outline 1 OSI IS-IS 2 IS-IS
ebook140-9
9 VPN VPN Novell BorderManager Windows NT PPTP V P N L A V P N V N P I n t e r n e t V P N 9.1 V P N Windows 98 Windows PPTP VPN Novell BorderManager T M I P s e c Wi n d o w s I n t e r n e t I S P I
2-2
... 2-1... 2-2... 2-6... 2-9... 2-12... 2-13 2005 1000 2006 20083 2006 2006 2-1 2-2 2005 2006 IMF 2005 5.1% 4.3% 2006 2005 3.4% 0.2% 2006 2005 911 2005 2006 2-3 2006 2006 8.5% 1.7 1.6 1.2-0.3 8.3 4.3 3.2
NSC-161
IP Session IP? IP Cisco IP IP IP IP IP? LAN Software Bluetooth,, 802.11 IP IP IP QoS IP Trust Domain (TD 1 ) TD 2 AR AR AP AP (MN) (MN) IP IP ( ) (MR) IP LAN MR (AP) IP 802.11 (AL) LAN/PAN 802.11, 802.15,
Simulator By SunLingxi 2003
Simulator By SunLingxi [email protected] 2003 windows 2000 Tornado ping ping 1. Tornado Full Simulator...3 2....3 3. ping...6 4. Tornado Simulator BSP...6 5. VxWorks simpc...7 6. simulator...7 7. simulator
Quidway S3526系列交换机R0028P01版本发布
MSR V7 系列路由器和 MSR V5 系列路由器野蛮式对接 L2TP over IPSEC 典型配置 一 组网需求 : 要求 MSR3020 和 MSR3620 之间路由可达,PCA 使用 MSR3620 上的 loopback 0 口代替,PCB 由 MSR3020 上的 loopback 0 口代替, 并且有如下要求 : 1 双方使用野蛮模式建立 IPsec 隧道 ; 2 双方使用预共享密钥的方式建立
D. 192.168.5.32 E. 192.168.5.14 答 案 :C 3. 工 作 站 A 配 置 的 IP 地 址 为 192.0.2.24/28. 工 作 站 B 配 置 的 IP 地 址 为 192.0.2.100/28. 两 个 工 作 站 之 间 有 直 通 线 连 接, 两 台
CCNP 学 前 测 试 题 都 选 自 官 方 的 全 真 考 试 题, 共 100 道 题 实 际 测 试 选 60 道 题, 同 官 方 正 式 考 题 数 目 基 本 一 致, 因 此 等 于 是 模 拟 考 试, 采 用 网 上 形 式 进 行 测 评 学 前 测 评 目 的 是 为 了 检 验 大 家 对 CCNA 阶 段 知 识 掌 握 的 程 度, 同 时 对 CCNA 最 核 心
一.NETGEAR VPN防火墙产品介绍
NETGEAR VPN NETGEAR 6 http://www.netgear.com.cn - 1 - NETGEAR VPN... 4 1.1 VPN...4 1.2 Dynamic Domain Name Service...4 1.3 Netgear VPN...4 Netgear VPN... 6 2.1 FVS318 to FVS318 IKE Main...7 2.1.1 A VPN
RAQMON Context Setting MG PDA Applications RTP / FTP/ HTTP TCP/UDP S ignaling control plane (e.g. RS VP, NS IS) Streaming Media, Transaction, Bulk dat
Realtime Application QOS Monitoring (RAQMON) Dan Romascanu [email protected] 1 RAQMON Context Setting MG PDA Applications RTP / FTP/ HTTP TCP/UDP S ignaling control plane (e.g. RS VP, NS IS) Streaming
epub 61-2
2 Web Dreamweaver UltraDev Dreamweaver 3 We b We b We Dreamweaver UltraDev We b Dreamweaver UltraDev We b We b 2.1 Web We b We b D r e a m w e a v e r J a v a S c r i p t We b We b 2.1.1 Web We b C C +
Microsoft PowerPoint - 数据通信-ch1.ppt
主 要 内 容 与 基 本 要 求 主 要 内 容 数 据 通 信 与 计 算 机 网 络 计 算 机 网 络 的 发 展 过 程 分 类 以 及 主 要 性 能 指 标 ; 分 组 交 换 的 基 本 原 理 及 其 与 电 路 交 换 报 文 交 换 的 联 系 与 区 别 ; 计 算 机 网 络 的 协 议 与 体 系 结 构 第 1 章 概 述 基 本 要 求 掌 握 分 组 交 换 电 路
经华名家讲堂
5.1 5.1.1 5.1.2 5.2 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.3 5.3.1 5.3.2 5.3.3 / 5.3.4 / 5.3.5 / 5.4 Internet 5.4.1 Internet 5.4.2 Intranet 1. 2. 1 31 5 5.1 5.1.1 Internet 1 Host 20 60 IBM 2000 2 20 60 20 60
<B1B1BEA9B9E2BBB7D0C2CDF8BFC6BCBCB9C9B7DDD3D0CFDEB9ABCBBEB4B43F3F12FB6CB293>
本 次 股 票 发 行 后 拟 在 创 业 板 市 场 上 市, 该 市 场 具 有 较 高 的 投 资 风 险 创 业 板 公 司 具 有 业 绩 不 稳 定 经 营 风 险 高 退 市 风 险 大 等 特 点, 投 资 者 面 临 较 大 的 市 场 风 险 投 资 者 应 充 分 了 解 创 业 板 市 场 的 投 资 风 险 及 本 公 司 所 披 露 的 风 险 因 素, 审 慎 作 出
A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内
A API Application Programming Interface 见 应 用 程 序 编 程 接 口 ARP Address Resolution Protocol 地 址 解 析 协 议 为 IP 地 址 到 对 应 的 硬 件 地 址 之 间 提 供 动 态 映 射 阿 里 云 内 容 分 发 网 络 Alibaba Cloud Content Delivery Network 一
目 录(目录名)
目录 目录...1-1 1.1 域名解析配置命令... 1-1 1.1.1 display dns domain... 1-1 1.1.2 display dns dynamic-host... 1-1 1.1.3 display dns server... 1-2 1.1.4 display ip host... 1-3 1.1.5 dns domain... 1-4 1.1.6 dns resolve...
産 産 産 産 産 爲 爲 爲 爲 185 185
産 産 184 産 産 産 産 産 爲 爲 爲 爲 185 185 爲 爲 爲 産 爲 爲 爲 産 186 産 爲 爲 爲 爲 爲 爲 顔 爲 産 爲 187 爲 産 爲 産 爲 産 爲 爲 188 産 爲 爲 酰 酰 酰 酰 酰 酰 産 爲 爲 産 腈 腈 腈 腈 腈 爲 腈 腈 腈 腈 爲 産 189 産 爲 爲 爲 爲 19 産 爲 爲 爲 爲 爲 爲 191 産 192 産 爲 顔 爲 腈
CCIE学习笔记——BGP
CCIE 学习笔记 BGP( 文档 + 实验 ) Editor:Edison E-mail:[email protected] QQ:21478604 如有疏漏之处请不吝赐教如有转载请注明作者及出处 耗时一个多礼拜, 终于 BGP 整理完毕,BGP 之庞大, 查了很多资料, 才完成这个笔记 实力有限, 包涵 BGP 还有很多更细的内容, 需要大家自己去研究, 还是多看书, 多实验, 多问, 多想
第3章
本 章 涵 盖 以 下 主 题 全 局 单 播 地 址 路 由 和 子 网 划 分 : 本 节 通 过 与 IPv4 相 比 较, 介 绍 了 IPv6 地 址 IPv4 路 由 的 概 念, 以 及 怎 样 进 行 IPv6 子 网 划 分 IPv6 全 局 单 播 地 址 的 分 配 : 本 节 探 讨 了 怎 样 将 全 局 单 播 地 址 分 配 到 主 机 或 其 他 设 备 上 IPv6
Microsoft Word - NBMA中的OSPF网络类型.doc
文档名称 :NBMA 中的 OSPF 网络类型 文档分类 : 路由技术 撰 写 :Magic 收档日期 :2008-05-01-1 - OSPF 在 NBMA 中的五种运行模式 : OSPF 模式 首选 NBMA 子网地址 Hello 定时器 广播 全互联或部分互联 相同 10s 非广播 全互联或部分互联 相同 30s 点到多点 部分互联或星型 相同 30s 点到多点 非广播 部分互联或星型 相同
基于点到点链路的 OSPF 的初始配置
基于点到点链路的 OSPF 的初始配置 目录 简介先决条件要求使用的组件规则带有串行接口 IP 地址的点对点链路上的 OSPF 网络图配置带有未编号接口的点对点链路上的 OSPF 网络图配置验证验证带有串行接口 IP 地址的 OSPF 的配置验证带有未编号接口的 OSPF 的配置故障排除相关信息 简介 在高级数据链路控制 (HDLC) 和点对点协议 (PPP) 等点对点链路上, 开放最短路径优先 (OSPF)
1. 发 行 情 况 格 力 地 产 于 2014 年 12 月 25 日 发 行 9.8 亿 元 可 转 债 其 中, 原 股 东 优 先 配 售 2.1225 亿 元 (21.225 万 手 ), 占 本 次 发 行 总 量 的 21.66% 网 上 向 一 般 社 会 公 众 投 资 者 发
衍 生 品 市 场 衍 生 品 市 场 转 债 研 究 转 债 研 究 证 券 研 究 报 告 证 券 研 究 报 告 转 债 定 价 报 告 2015 年 1 月 11 日 格 力 转 债 (110030) 上 市 定 价 分 析 公 司 资 料 : 转 债 条 款 : 发 行 日 到 期 日 期 限 转 股 期 限 起 始 转 股 日 发 行 规 模 净 利 润 2014-12-25 2019-12-24
Microsoft Word - chp21路由优化.doc
第 21 章路由优化 在当今高性能的网络中, 为了保证网络的伸缩性 稳定性 安全性和快速收敛, 必须对网络进行优化 路由过滤和策略路由是路由优化的常用方法 21.1 路由优化概述 路由过滤是指在路由更新中抑制某些路由不被发送和接收, 被动接口 分布控制列表 重分布结合路由策略等都可以实现路由过滤 策略路由提供了根据网络管理者制定的标准来进行数据包转发的一种机制 基于策略的路由比传统路由能力更强, 使用更灵活,
Symantec™ Sygate Enterprise Protection 防护代理安装使用指南
Symantec Sygate Enterprise Protection 防 护 代 理 安 装 使 用 指 南 5.1 版 版 权 信 息 Copyright 2005 Symantec Corporation. 2005 年 Symantec Corporation 版 权 所 有 All rights reserved. 保 留 所 有 权 利 Symantec Symantec 徽 标 Sygate
Microsoft Word - 201502-T-REC-Y1314-200510C.doc
国 际 电 信 联 盟 ITU-T Y.1314 国 际 电 信 联 盟 电 信 标 准 化 部 门 (10/2005) Y 系 列 : 全 球 信 息 基 础 设 施 网 际 协 议 问 题 和 下 一 代 网 络 互 联 网 的 协 议 问 题 传 输 虚 拟 专 用 网 络 功 能 分 解 ITU-T Y.1314 建 议 书 ITU-T Y 系 列 建 议 书 全 球 信 息 基 础 设 施
PS PS GMM SM.zte.com.
WBUB-010-1 ZXWN PS V0411.zte.com. PS PS GMM SM.zte.com. PS TMSI Packet-Temporary mobile subscriber identification number P-TMSI) GPRS MS P- TMSI 4 BCD 3G TS 23.003 MSC SGSN SGSN P-TMSI 11 MSC TMSI 00 01
目录 1 IP 地址 IP 地址配置命令 display ip interface display ip interface brief ip address 1-5 i
目录 1 IP 地址 1-1 1.1 IP 地址配置命令 1-1 1.1.1 display ip interface 1-1 1.1.2 display ip interface brief 1-3 1.1.3 ip address 1-5 i 1 IP 地址 1.1 IP 地址配置命令 1.1.1 display ip interface display ip interface 命令用来显示三层接口与
幻灯片 0
S7500E OLT 设备 MPLS VPN 广电应 用开局指导 日期 :2010 年 4 月 密级 : 杭州华三通信技术有限公司 广电网络架构与需求背景 省骨干网 DHCP Server imc MVM VoD Server 广电城域网核心层 广电城域网接入层 S7500E OLT(PE) MPLS VPN 域 无源分光器 楼道同轴网 光节点 ONU ONU CE ONU CE CE STB PC
KillTest 质量更高 服务更好 学习资料 半年免费更新服务
KillTest 质量更高 服务更好 学习资料 http://www.killtest.cn 半年免费更新服务 Exam : 350-001-LAB : Title CCIE-ROUTING AND SWITCHING QUALIFICATION (Lab exam) Version : Demo 1 / 28 N1. 2 / 28 Part-1 Bridge and Switching 1.1 vtp
end to end 7.2 OSI 7 OSI 3 A B 7.2 Packet Routing LAN WAN 7.1.2 141
7 IP IP ARP ICMP IP OSI 3 7.1 7.1.1 7.1 DTE0/1 DCE0/1 DCE0/1 DCE2DCE3 DCE4 7.1 DTE1 DTE2 DCE1 DTE1 DCE2 DCE3 DCE4 MAC DCE2 DCE5 DTE1 DCE1 DCE3 DCE6 DTE2 DCE4 7.1 140 end to end 7.2 OSI 7 OSI 3 A B 7.2
水晶分析师
大数据时代的挑战 产品定位 体系架构 功能特点 大数据处理平台 行业大数据应用 IT 基础设施 数据源 Hadoop Yarn 终端 统一管理和监控中心(Deploy,Configure,monitor,Manage) Master Servers TRS CRYSTAL MPP Flat Files Applications&DBs ETL&DI Products 技术指标 1 TRS
附件9 电梯运行安全监测管理信息平台技术规范 第11部分:系统信息安全技术规范(征求意见稿)
ICS 35.240.01 M 63 备 案 号 : - 北 京 市 地 方 标 准 DB11/ XXX.1 XXXX 电 梯 运 行 安 全 监 测 管 理 信 息 平 台 技 术 规 范 第 11 部 分 : 系 统 信 息 安 全 规 范 Technical Specification for Management Information Platform of Elevator Operation
09.实验九:内部网关协议RIP与OSPF
计算机网络 实验指导 实验九 : 内部网关协议 RIP 与 OSPF 一 实验目的 1 进一步理解路由器的工作原理; 2 掌握 RIP 的基本原理和概念 ; 3 掌握 OSPF 的基本原理和概念 ; 4 掌握基于 GNS3 仿真平台进行网络实验的方法 二 实验学时 2 学时 三 实验类型 综合性 四 实验需求 1 硬件每人配备计算机 1 台, 计算机接入实验室局域网, 每小组配备交换机 2 台, 路由器
信息管理部2003
23 7 3 22 28451642 E-mail [email protected] 23 1 23 5 22 2 3 4 628 6688 866 62 52 956 46 817 912 696 792 6.5% 1: 2: -2.% -1.5% -19.% -27.6% 33.6 3.45 [2.22%] 5A:6.94 1A:9.89 2A:9.51 3A:8.44 22.14 11.23 1-1-12
BGP router identifier , local AS number 345 BGP table version is 1, main routing table version 1 Neighbor V AS MsgRcvd MsgSent TblVer InQ Out
BGP 技术笔记 红茶三杯 CCIE 学习文档 文档版本 : 2.0 更新时间 : 2013-01-26 文档作者 : 红茶三杯 文档地址 : http://ccietea.com 1 基本概念 1.1 知识点 1. 每个 AS 都有一个标识号, 范围是 1~65535, 其中 64512~65535 是保留私用的 2. BGP 的更新由 TCP 协议承载, 使用的端口号是 179 因为 BGP 要求使用
9 Internet 10 Internet
1 2 3 4 5 6 Internet 7 8 9 Internet 10 Internet 11 12 1 1.1 1.2 1.3 1.4 1.5 1.6 1.1 1.1.1 20 50 20 60 ARPANET ARPANET Internet 20 70 ISO International Organization for Standardization TCP/IP 20 90 Internet
Microsoft Word - 路由信息协议RIP.doc
文档名称 : 路由信息协议 RIP 文档分类 : 实验文档 ( 综合性 ) 撰 写 :Magic 收档日期 :2008-05-08-1 - Rip 综合性实验, 拓扑如下 : 实 验 批注 [M1]: 默认不是 V1, 也不是 V2, 发送 V1, 接收 V1 和 V2 1. 配置成 V2 版本, 发送接收 V2 版本的路由选择更新 2. 配置成 V1 版本, 发送接收 V1 版本的路由选择更新 3.
第 1 章 概 述 1.1 计 算 机 网 络 在 信 息 时 代 中 的 作 用 1.2 计 算 机 网 络 的 发 展 过 程 *1.2.1 分 组 交 换 的 产 生 *1.2.2 因 特 网 时 代 *1.2.3 关 于 因 特 网 的 标 准 化 工 作 1.2.4 计 算 机 网 络 在
计 算 机 网 络 ( 第 4 版 ) 课 件 第 1 章 计 算 机 网 络 概 述 郭 庆 北 [email protected] 2009-02-25 第 1 章 概 述 1.1 计 算 机 网 络 在 信 息 时 代 中 的 作 用 1.2 计 算 机 网 络 的 发 展 过 程 *1.2.1 分 组 交 换 的 产 生 *1.2.2 因 特 网 时 代 *1.2.3 关 于 因 特
目录 1 IP 地址配置命令 IP 地址配置命令 display ip interface display ip interface brief ip address i
目录 1 IP 地址配置命令... 1-1 1.1 IP 地址配置命令... 1-1 1.1.1 display ip interface... 1-1 1.1.2 display ip interface brief... 1-3 1.1.3 ip address... 1-4 i 1 IP 地址配置命令 1.1 IP 地址配置命令 1.1.1 display ip interface 命令 display
Segment Routing和 LDP 共存 中文版
Segment Routing Co-existence with LDP 段路由与 LDP 的共存 Clarence Filsfils Kris Michielsen Segment Routing 与 LDP 的共存 与 LDP 和其它 MPLS 控制协议共存 从 LDP 简单迁移到 Segment Routing Segment Routing 与 LDP 控制平面共存 与其它 MPLS 标签分发协议共存
PowerPoint Presentation
推 票 蕴 含 的 投 资 机 会 卖 方 分 析 师 重 点 报 告 效 应 研 究 证 券 分 析 师 刘 均 伟 A0230511040041 夏 祥 全 A0230513070002 2014.4 主 要 内 容 1. 卖 方 分 析 师 推 票 的 时 滞 性 蕴 含 了 事 件 投 资 机 会 2. 卖 方 分 析 师 重 点 报 告 首 次 效 应 3. 卖 方 分 析 师 重 点 报
eigrp
学习沉淀成长分享 EIGRP 红茶三杯 ( 朱 SIR) 微博 :http://t.sina.com/vinsoney Latest update: 2012-06-01 课程目标 EIGRP 协议概述 EIGRP 的配置及验证 EIGRP 协议概述 EIGRP 简介 EIGRP 的协议特点 EIGRP 的三张表 EIGRP 数据包 初始路由发现 EIGRP metric DUAL 算法 EIGRP
