BGP基础认知1.1 AS自治系统AS自治系统是统一管理、内部路由策略一致的路由器集合是跨AS路由传递的边界单位。BGP专门用于不同AS之间路由交互。AS号规范2字节AS1655356500065535为私有AS实验内网使用公网不传递4字节AS14294967295华为默认asplain纯数字格式设备BGP进程号本地AS号单设备仅归属一个AS1.2 BGP协议核心定义与特性BGP边界网关协议是无类别路径矢量应用层协议基于TCP 179端口可靠传输使用触发式路由更新。是互联网唯一外网路由协议一旦选择了TCP协议则将无法支持组播或者广播将无法自动发现邻居关 系BGP需要手工指定邻居关系。无类别支持VLSM、CIDR汇总路由携带完整掩码路径矢量无度量值依靠AS路径、路由属性选路增量触发更新仅路由变化发送Update无周期更新AS-by-AS选路以AS为整体选路忽略AS内IGP开销BGP可以支持非直连建邻---TCPBGP的非直连建邻是建立在IGP包含静态路由的基础上1.3 BGP对等体邻接关系BGP邻接类型按照运行方式分为EBGPIBGP。EBGP外部 BGP定义运行于不同 AS 之间的 BGP 称为 EBGP。防环机制从 EBGP 邻居收到路由时如果路由携带的 AS 号包含了本地 AS 号BGP 设备会直接丢弃这条路由防止跨 AS 产生环路。默认规则EBGP 邻居之间传递路由时会修改 AS-PATH把自己的 AS 号添加到 AS 列表最前面。IBGP内部 BGP定义运行于同一 AS 内部的 BGP 称为 IBGP。核心防环规则BGP 设备不会把从 IBGP 对等体学习到的路由再通告给其他 IBGP 对等体。 并与所有IBGP建立全连接衍生问题IBGP 全连接时对等体数量过多。 解决办法部署路由反射器 RR或者BGP 联盟。BGP 两种角色Speaker发言者发送 BGP 报文的设备称为 BGP 发言者Speaker它接收或产生新的报文信息并发布Advertise给其他 BGP Speaker。所有运行 BGP 的路由器都是 Speaker。Peer对等体互相交换 BGP 报文的两台 Speaker互为 BGP 对等体。 多个对等体可以划分到同一个对等体组Peer Group简化配置。Router-ID设备唯一标识Router-ID为32位类IP标识全网唯一用于协商、选路、设备识别。选举优先级华为手动配置router-id最优最大环回接口IP最大物理接口IPRouter-ID生成后静态固化修改接口IP不生效需重启BGP进程更新。BGP报文BGP对等体间通过报文交互其中keepalive报文周期性发送其余报文为触发式发送Open建邻协商报文协商基础参数不匹配直接断连open报文中携带的信息MY Autonomous System自身AS号和对端指定的AS号对比相同则建立对等体关系不同则建立失败Hold time用于协商后续keepalive报文的发送时间默认180s。虽然不是影响邻居关系建立的因素但是执行的时候必 须相同如果对等体双方时间不同则会选择双方之间较小的作为执行标准BGP Identifier自身的RIDBGP对等体建立后BGP路由器发送BGP Update报文向对等体通告路由器Keepalive保活报文无数据维持邻居存活默认1/3保活时间60sUpdate核心路由报文增量发布/撤销路由、携带BGP属性Notification报错报文检测异常立即发送并断连回IdleRouter-refresh用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备才会发送和响应此报文。携带自己是否开启该功能如果双方都开启则可以使用该功能否则不能使用但是不影响邻居关系建立保活机制默认Keepalive 60s发送Hold-Time 180s超时两端Hold-Time取最小值生效收到Update可重置保活计时器TCP建连源地址规则默认以出接口物理IP为TCP建连源地址环回口建邻必须配置peer x.x.x.x connect-interface LoopBack0核心原则本端TCP源IP必须与对端peer配置IP一致否则建邻失败IBGP / EBGP 邻居区别IBGP同AS设备TTL255支持非直连建邻EBGP跨AS设备TTL1默认仅直连建邻EBGP环回跨设备建邻需开启多跳ebgp-max-hop 10BGP六状态机固定顺序Idle→Connect→Active→OpenSent→OpenConfirm→EstablishedIdle空闲初始状态不建连异常断连后退回Connect连接发起TCP握手32s超时重传Active活跃TCP建连失败重试状态OpenSentOpen报文已发送TCP已通等待对端Open回应OpenConfirmOpen报文已经确认协商通过等待KeepaliveEstablished连接已经建立邻居正常可交互路由、生效策略在BGP对等体建立过程中常见3个状态是IdleActiveEstablishedBGP对等体关系建立启动 BGP 的一端先发起 TCP 连接假如R1 先启动 BGPR1 使用随机端口号向 R2 的179 端口发起 TCP 连接完成 TCP 连接的建立。三次握手建立完成之后R1、R2 之间相互发送Open 报文携带用于对等体建立的参数参数协商正常之后双方相互发送 Keepalive 报文收到对端发送的 Keepalive 报文之后对等体建立成功。此后双方定期发送 Keepalive 报文用于保持连接。具体过程1Idle 状态该状态是 BGP 的初始状态。在 Idle 状态下BGP 拒绝邻居发送的连接请求。只有在收到本设备的 Start 事件后BGP 才开始尝试和 BGP 对等体进行 TCP 连接并转至 Connect 状态。Start事件是触发 BGP 从Idle空闲状态开始发起 TCP 连接的启动事件。触发 Start 事件的 3 种场景管理员配置 BGP 进程或者配置邻居peer x.x.x.x as‑number xxx手动重置 BGP 邻居reset bgp all或者reset bgp 65001设备系统内部重启 BGP 进程。只有在Idle 空闲状态收到 Start 事件才会生效在 Connect、Active、OpenSent 等其余状态收到 Start 事件设备不会做任何操作状态不变华为。2Connect 状态该状态下BGP 启动连接重传定时器Connect Retry默认32秒等待 TCP 完成连接0。如果 TCP 连接成功那么 BGP 向对等体发送 Open 报文并转至 OpenSent 状态。如果 TCP 连接失败那么 BGP 转至 Active 状态。如果连接重传定时器超时BGP 仍没有收到 BGP 对等体的响应那么 BGP 继续尝试和 BGP 对等体进行 TCP 连接停留在 Connect 状态。3在 Active 状态下该状态BGP 总是在试图建立 TCP 连接。①如果 TCP 连接成功那么 BGP 向对等体发送 Open 报文关闭连接重传定时器并转至OpenSent 状态。②如果 TCP 连接失败那么 BGP 停留在Active 状态。③如果连接重传定时器超时BGP 仍没有收到 BGP 对等体的响应那么 BGP 转至Connect 状态。4OpenSent 状态该状态下BGP 等待对等体的 Open 报文并对收到的 Open 报文中的AS 号、版本号、认证码等进行检查。①如果收到的 Open 报文正确那么 BGP 发送Keepalive 报文并转至OpenConfirm 状态。②如果发现收到的 Open 报文有错误那么 BGP 发送Notification 报文给对等体并转至Idle 状态。5OpenConfirm 状态BGP 等待 Keepalive 或 Notification 报文。如果收到 Keepalive 报文则转至Established 状态如果收到 Notification 报文则转至Idle 状态。6Established 状态BGP 邻居正常状态该状态下BGP 可以和对等体交换 Update、Keepalive、Route-refresh 报文和 Notification 报文。①如果收到正确的 Update 或 Keepalive 报文BGP 认为对端正常保持 BGP 连接。②如果收到错误的 Update 或 Keepalive 报文BGP 发送 Notification 报文通知对端并转至Idle 状态。③Route-refresh 报文不会改变 BGP 状态。④如果收到 Notification 报文BGP 转至Idle 状态。⑤如果收到 TCP 拆链通知BGP 断开连接转至Idle 状态。BGP 对等体之间的交互原则BGP 设备只把最优路由加入 BGP 路由表只向对等体发布最优路由1从 IBGP 对等体获得的 BGP 路由只发布给 EBGP 对等体。2从 EBGP 对等体获得的 BGP 路由发布给所有 EBGP 和 IBGP 对等体。3存在多条去往同一目的地的有效路由时仅将最优路由发布给对等体。4路由更新时只发送更新的 BGP 路由。5对等体发送的所有路由BGP 设备都会接收。同步机制华为默认关闭同步开启时IBGP路由必须存在IGP表才可转发给EBGP用于防黑洞现代组网用RR/全互联替代默认关闭同步。next-hop-local 下一跳优化EBGP传IBGP路由默认不修改下一跳导致AS内下一跳不可达。ASBR配置该命令后发给IBGP的路由下一跳改为自身保证全网可达。peer 3.3.3.3 next-hop-localBGP路由反射器 RR为保证 IBGP 对等体之间的连通性IBGP 邻居必须全连接。 若 AS 内部共有 n 台 BGP 设备则连接数为n(n-1)/2。当设备数量越多邻居数量爆炸式增长配置工作量、CPU 与带宽开销极大。解决方案部署路由反射器 RR不用维持 IBGP 全连接。路由反射器角色RR路由反射器允许将从 IBGP 对等体学到的路由反射给其他 IBGP 对等体。Client客户机与 RR 建立反射邻接关系的IBGP设备在AS内部客户机只需与RR直连Non-Client非客户机既不是 RR 也不是客户机。在AS内部非客户机与RR 之间、所有非客户机彼此之间依然必须保持 IBGP 全连接。Originator路由始发者AS 内产生这条路由的原始设备。依靠Originator_ID防止集群内路由环路。Cluster集群一台 RR 它所有客户机构成一个集群。依靠Cluster_List防止集群间路由环路。在将一台路由器指定为路由反射器的同时需要指定一个或者多个他的IBGP对等体作为客 户client其余的IBGP对等体为非客户RR和所有的客户之间将形成一个整体---反射簇使用RR的RID作为反射簇的簇ID反射规则从非客户机学到的路由只发给所有客户机。从客户机学到的路由发布给全部非客户机 其他所有客户机不发给路由始发的那台客户机。从 EBGP 对等体学到的路由发布给所有客户机与非客户机。只有可用且优的路由信息才能被反射RR防环Cluster-ID默认等于RR的Router-ID标识反射簇originator_id起源者ID一条反射的路由需要携带该属性记录的是该路由的始发者 ID如果一条路由中已经存在了起源者ID则将不会修改如果设备收到一条路由包含本地的RID则将不再学习防止路由回传cluster_list(簇列表)---当一条反射路由离开一个反射簇时需要将该反射簇的簇ID记录在簇 列表中如果设备看到簇列表中有自己的簇ID时将不再学习该路由双RR冗余必须相同Cluster-ID防环路联邦路由反射器 RR适合中小型 AS超大运营商 AS上百台设备单 RR 集群压力巨大、层级复杂易环路。BGP 联邦把一个大 AS 逻辑拆成多个子 ASSub-AS子 AS 之间走 EBGP子 AS 内部走 IBGP大幅减少 IBGP 全连接数量专门用于超大型运营商骨干网。核心概念联邦 ASConfederation AS对外只暴露1 个公有 AS 号整个联邦在互联网、其他运营商眼里仍是单一 AS外部设备感知不到内部拆分。子 ASMember Sub-AS联邦内部拆分的小型私有 AS只用私有 AS 号64512~65535不会广播给外部邻居 子 AS 之间建立联邦 EBGP 邻居子 AS 内部正常 IBGP。两种邻居区分联邦 IBGP同一子 AS 内路由器遵循 IBGP 规则不修改下一跳、不重置 MED、不删除本地优先级联邦 EBGP不同子 AS 之间行为近似普通 EBGP但保留原 AS-Path、不插入子 AS 号对外发送关键特性核心特性和普通 EBGP 最大区别AS-Path 隐藏隔离 子 AS 之间传递路由时会把子 AS 号写入 AS-Path路由传递出联邦发给外部真实 EBGP 邻居时所有子 AS 号全部剥离只携带对外统一的联邦 AS 号外部看不到内部子 AS 划分。 例联邦总 AS 100子 AS 64510、64511 内部 AS-Path64510 64511发给运营商 AS 200 时AS-Path 变为100路由属性保留 普通 EBGP 邻居会重置Local-Pref、MED、下一跳 联邦 EBGP保留全部 IBGP 属性仅增加子 AS 号到 AS-Path路由策略、选路逻辑和 IBGP 一致。防环路机制同一子 ASIBGP 水平分割防环跨子 AS收到 AS-Path 包含自身子 AS 号直接丢弃避免联邦内环路。拓扑逻辑示例联邦公有 ASAS 100拆分两个子 ASsub-AS 64510、sub-AS 64511sub-AS 64510 内部两台路由器 R1、R2IBGP 全连接sub-AS 64511 内部两台路由器 R3、R4IBGP 全连接边界路由器 R2 - R3联邦 EBGP 邻居R4 连接外部运营商 AS 200普通 EBGP路由传递流程外部路由AS200→ R4 (sub64511) → R3 (IBGP) → R2 (联邦 EBGPAS-Path 加 64511) → R1 (IBGP) R1 向外部发路由时剥离 64510/64511仅携带 AS100 发给对端。​​​​​​优点彻底解决大 AS IBGP 全连接爆炸每个子 AS 独立 IBGP连接数大幅下降对外拓扑透明其他运营商看不到内部拆分无路由互通障碍跨子 AS 传递保留本地优先级、MED 等选路属性便于整网统一选路策略可按地域、业务拆分子 AS运维隔离骨干、城域分离。缺点配置复杂度高于路由反射器适合超大型网络中小企业没必要部署所有联邦路由器必须统一配置联邦 AS 号漏配会产生路由环路、路由不可达私有子 AS 号仅内部生效规划时不能和公有 AS 冲突。BGP属性1. Origin 属性作用标记路由注入 BGP 的来源用来区分路由优先级。 优先级从高到低IGP通过network命令注入OriginIGP优先级最高。EGP通过 EGP 协议学习OriginEGP优先级次之。Incomplete通过其他方式引入import-route引入OriginIncomplete优先级最低。2. AS-Path 属性必防环AS-Path记录路由途经的所有 AS 编号。防环规则 如果收到路由的 AS-Path 列表里包含本地 AS 号设备会拒收这条路由避免 AS 之间产生环路。当 BGP Speaker 传播自身引入的路由时1当 BGP Speaker 将这条路由通告给 EBGP 对等体时便会在 Update 报文中创建一个携带本地 AS 号的 AS‑Path 列表。2当 BGP Speaker 将这条路由通告给 IBGP 对等体时便会在 Update 报文中创建一个空的 AS‑Path 列表。当 BGP Speaker 传播从其他 BGP Speaker 的 Update 报文中学习到的路由时1当 BGP Speaker将这条路由通告给 EBGP 对等体时便会把本地 AS 编号添加在 AS‑Path 列表的最前面最左面。收到此路由的 BGP 设备根据 AS‑Path 属性就可以知道去往目的地所要经过的 AS。离本地 AS 最近的相邻 AS 号排在前面其他 AS 按顺序依次排列。2当 BGP Speaker 将这条路由通告给 IBGP 对等体时不会改变这条路由相关的 AS‑Path 属性。3. Next_Hop 属性Next_Hop 属性记录了路由的下一跳信息。BGP 的下一跳属性和 IGP 的有所不同不一定就是邻居设备的 IP 地址。通常情况下Next_Hop 属性遵循下面的规则1BGP Speaker 在向 EBGP 对等体发布某条路由时会把该路由信息的下一跳属性设置为本地与对端建立 BGP 邻居关系的接口地址。2BGP Speaker将本地始发路由发布给 IBGP 对等体时会把该路由信息的下一跳属性设置为本地与对端建立 BGP 邻居关系的接口地址。3BGP Speaker 在向IBGP 对等体发布从 EBGP 对等体学来的路由时并不改变该路由信息的下一跳属性。4. Local_Pref 属性Local_Pref 属性表明路由器的 BGP 优先级用于判断流量离开 AS 时的最佳路由。当 BGP 的设备通过不同的 IBGP 对等体得到目的地址相同但下一跳不同的多条路由时将优先选择 Local_Pref 属性值较高的路由。Local_Pref 属性仅在 IBGP 对等体之间有效不通告给其他 AS。Local_Pref 属性可以手动配置如果路由没有配置 Local_Pref 属性BGP 选路时将该路由的 Local_Pref 值按默认值 100 来处理。5. MED 属性MEDMulti-Exit Discriminator属性用于判断流量进入 AS 时的最佳路由。当一个运行 BGP 的设备通过不同的 EBGP 对等体得到目的地址相同但下一跳不同的多条路由时在其他条件相同的情况下将优先选择 MED 值较小者作为最佳路由。MED 属性仅在相邻两个 AS 之间传递收到此属性的 AS 一方不会再将其通告给任何其他第三方 AS。MED 属性可以手动配置如果路由没有配置 MED 属性BGP 选路时将该路由的 MED 值按默认值 0 来处理。BGP 选路策略当到达同一目的地存在多条路由时BGP 依次对比下列属性来选择路由优先选择协议首选值PrefVal最高的路由。该属性仅在本地有效为华为设备私有属性。优先选择本地优先级Local_Pref最高的路由。 若无本地优先级BGP 将该路由默认本地优先级取值为 100。依次优选路由来源手动聚合路由 自动聚合路由 network 引入路由 import-route 引入路由 从对等体学习的路由。优先选择AS 路径AS-Path最短的路由AS-Path 为空的路由更优。按照 Origin 优选顺序IGP EGP Incomplete。同一 AS 内收到的路由优先选择 MED 值更低的路由。优先顺序EBGP 路由 IBGP 路由。优先选择到达 BGP 下一跳的 IGP 度量值metric最小的路由。优先选择 Cluster_List 最短的路由。优选 Router-ID 最小设备发布的路由若路由携带 Originator_ID则比较 Originator-ID优先选择 Originator_ID 更小的路由不再比较 Router-ID。优先选择从 IP 地址最小的对等体学习到的路由。