今天海翎光电的小编为大家介绍一下BGP的相关基础知识,文章浅显易懂,适合对BGP完全没有了解的同学。 BGP(边界网关协议)是将互联网联合在一起的路由协议,海翎光电的小编将解释在哪些情况下我们需要 BGP 以及它是如何工作的。在您继续阅读之前,我应该告诉您“忘记”迄今为止您对RIP、OSPF和EIGRP等路由协议的了解……这三种路由协议有一个共同点:它们都是 IGP(内部网关协议)。我们只在我们的自治系统中使用它们,但它们不可扩展以用于像 Internet 这样大的网络。 RIP、OSPF 和 EIGRP 都不同,但它们有一个共同点……它们都想找到到达目的地的最短路径。当我们查看 Internet 时,我们并不关心找到最短路径,而是能够操纵流量路径更为重要,我们目前在 Internet 上使用的路由协议只有一种,即 BGP。 让我们先看一些场景,以便了解为什么以及何时需要 BGP:

现在几乎所有东西都连接到互联网,在上图中,我们有一个连接到 ISP(Internet 服务提供商)的客户网络,我们的 ISP 正在确保我们可以访问 Internet,我们的 ISP 为我们提供了一个可用于访问 Internet 的公共 IP 地址。为了确保客户方 LAN 上的每个人都可以访问 Internet,我们使用NAT/PAT(网络/端口地址转换)将我们的内部私有 IP 地址转换为这个单一的公共 IP 地址。当您只有需要访问 Internet 的客户端时,此方案非常适合。在我们的客户 LAN 上,我们只需要一个指向 ISP 路由器的默认路由,我们就完成了。对于这种情况,我们不需要 BGP...

也许客户有几个需要从 Internet 访问的服务器……也许是邮件服务器或网络服务器,我们可以使用端口映射并将正确的端口转发到这些服务器,因此我们仍然只需要一个 IP 地址,另一种选择是从我们的 ISP 获取更多公共 IP 地址,并使用这些地址来配置不同的服务器。对于这种情况,我们仍然不需要 BGP……

如果我想要更多的冗余怎么办?出现单点故障并不是一个好主意,我们可以在客户端添加另一个路由器并将其连接到 ISP,可以将主链接用于所有流量,并使用另一个链接作为备份,这种情况我们还是不需要BGP,可以用默认路由解决: 这将确保您的 IGP 使用主链路发送所有流量,一旦链路出现故障,您的 IGP 将确保所有流量都沿备用链路发送,你可以考虑一下......我们可以在这两个链接之间做任何负载平衡吗?会很难么? 除非出现故障,否则您的 IGP 将沿主链路发送所有流量,而不会沿备用链路发送任何流量。您可以使用相同的度量发布默认路由,拥有 50/50% 的负载分担。如果我想在主链路上发送 80% 的出向流量,在备用链路上发送 20% 怎么办?上面的方法不会实现此需求,但使用 BGP 是可能的。

一、BGP 含义
Border Gateway Protocol,边界网关协议,协议优先级为 255,目前所使用的版本为 v4。边界网关路由协议,EGP 网关协议,适用于大型路由网络结构,以 AS 为一个节点,每个 AS 有唯一确定的 AS-ID 用于标识。
二、BGP 版本
① 2006 年定义单播 IPV4 网络 MP-BGP
② MP-BGP 在 IPv6 单播网络上的应用称为 BGP4+
③ 在 IPv4 组播网络上的应用称为 MBGP(Multicast BGP)
① IBGP:Internal Border Gateway Protocol ,内部边界网关协议,用于在 AS 内部的 BGP协议 ② EBGP:External Border Gateway Protocol,外部边界网关协议,用于在 AS 之间的 BGP协议,默认数据包中的 TTL 值为 1 跳,邻居建立使用直连端口建立,通常两个 AS 之间是不存在 IGP 路由协议的,所以 AS 之间使用直连链路建立邻居 BGP 使用 TCP 进行路由更新,保证路由传递的可靠性,源端口号随机,目的端口号为179。 BGP 使用 TCP 进行路由更新,保证路由传递的可靠性,源端口号随机,目的端口号为179。 IBGP 使用水平分割,EBGP 使用 AS-Path 属性。 路由信息携带不同的 BGP 路由属性,为 BGP 选路提供了多种多样的方式。 BGP 支持无类域间(CIDR)路由,支持手工汇总和自动汇总。 (1)、自动聚合:默认情况下,自动聚合时关闭的。自动汇总不会自动汇总 BGP 邻居发送的路由以及使用 Network 命令通告的路由,只能聚合自身 import 注入的路由条目。当开启自动聚合后,BGP 路由默认会以主类路由进行聚合。此时聚合路由的属性为 Aggregate 属性使用以下命令进行自动聚合:[H******-bgp]summary automaticØ [H*****-bgp]network 1.1.1.1 32 (2)、手动汇总:BGP 手动路由聚合时,可以手动控制聚合路由的掩码长度,修改聚合路由属性等,手动路由聚合又有 两种方式: 首先创建静态路由将网段聚合并指向 null0,BGP 采用 network 方式通告出去,由于直连优先级高于静态,优先选择直连的下一跳接口,当直连网段出现问题,匹配静态送往 Null0。 在 R1 上配置静态路由:[Huawei]ip route-static 172.16.0.0 255.255.0.0 NULL 0preference 254 使用 network 宣告出去:[Huawei-bgp]network 172.16.0.0 16[H****-bgp]aggregate 172.16.0.0 255.255.0.0 detail-suppressed 注 1:默认聚合路由只继承 Community 属性和起源属性(如果明细都为 i,则为 i,有一个为?,则为?) 注 2:默认聚合后的路由不会携带任何的 AS-path 属性,为了防止环路,如果想要携带 AS-path 属性,后面增加命令 as-set,此时汇总路由会继承所有明细路由的 AS 号,为无序的AS 号,如果增加了 AS-SET 之后,聚合路由会将明细路由的 AS-Path 放入 AS-SET 属性中,如果明细路由消失或属性修改都会造成聚合路由的抖动增加;如果明细路由的AS-PATH id 完全一致,此时聚合路由的 AS-PATH 类型为 AS-Sequence 注 3:如果不加 detail-suppressed,会将明细路由和汇总路由全部发送出去,使用detail-suppressed 命令只通告汇总路由,此时汇总路由的属性为ATOMIC_Aggregate,用于通告下游的路由器成员信息被抑制,此时的汇总路由不会携带 Community 属性 注 4:为了让聚合后的路由继承明细路由的路由属性,聚合命令后面增加attribute-policy 1,此时在定义 Route-policy,规划属性值 注 5:origin-policy 的作用,定义 route-policy,当满足 if 条件中的路由条目时,聚合路由才会生效,如果定义的路由消失,则聚合路由为 ATOMIC_Aggregate 注 6:suppress-policy 的作用是用于过滤掉某些明细路由,定义 route-policy,当满足 if 条件中的路由条目,明细路由就会被过滤掉,如果只抑制了一部分明细路由,属性依旧为 Aggregate;如过抑制了全部的明细路由,属性为 ATOMIC_Aggregate 注 7:同 IGP 路由手动聚合对比,BGP 路由聚合,默认明细汇总都发布,IGP 只发布汇总路由;汇总之后 IGP 不会自动生成一条指向 Null0 的路由,而 BGP 路由汇总之后会自动生成一条指向 Null0 的汇总路由 在 peer 对等体的时候,可以使用命令发布默认路由给对端邻居:[H******-bgp]peer 192.168.1.1 default-route-advertiseBGP 携带了大量的属性信息,并支持 13 种选路规则。 BGP 支持 MD5 认证方式,如果是 MD5 方式,路由器会根据 BGP 报文的某些字段和密钥计算出一个 128bit 的散列值,然后将 BGP 报文连同散列值发送给邻居。邻居路由器收到以后,会在本地基于收到的 BGP 报文和相同的密钥在进行一次 HASH 运算。如果计算出的散列值与接收到的散列值相同,则认证通过。[H******-bgp]peer 192.168.1.1 password cipher h******/h***** BGP 默认不使用附载分担,即使存在多条路径也会使用选路规则选出一条“最优路由”将其放入路由表中。开启附载分担方式:① 选路规则前 9 条一模一样(AS ID 顺序也一样),可以使用命令 maximumload-balancing bgp 进行附载分担,当比较到下一跳的 IGP 开销值一样时,会进行流量的负载分担② 当 BGP 路由中的下一跳地址在 IGP 路由表中存在附载分担,此时流量会附载分担① 在通告给 EBGP 邻居时会将 NEXT_Hop 属性设置为自身的接口 IP 地址③ 在 AS_PATH 属性中增加自己的 AS-ID BGP 扩展性强,在承载多协议路由时,在 MP NLRI 中增加属性值(TLV)进行扩展。
上面海翎光电的小编介绍了BGP的含义、BGP版本、BGP分类、BGP 特性等,接下来咱们继续这个话题。
① Idle 初始状态
② Connect 连接状态
③ Active 失败等待状态
④ Open Sent 协商状态
⑤ Open confirm 连接确立状态
⑥ Established 确定建立状态
BGP 初始状态。在 Idle 状态下,BGP 拒绝邻居发送的连接请求。只有在收到本设备的Start 事件后,BGP 才开始尝试和其它 BGP 对等体进行 TCP 连接,并转至 Connect状态。Start 事件是由一个操作者配置一个 BGP 过程,或者重置一个已经存在的过程或者路由器软件重置 BGP 过程引起的。连接状态,双方配置命令后,谁先配置完成谁先主动发起建立 TCP,源端口随机,目标端口 179,在 Connect 状态下,BGP 启动连接重传定时器,等待 TCP 完成连接Ø 如果 TCP 连接成功,那么 BGP 向对等体发送 Open 报文,并转至 OpenSent 状态Ø 如果对方无响应,则 5S 后发送第二份组播报文,依旧没有响应,等待大约 25S 时候周期后开始下一轮的 TCP 报文发送,对方一直无响应,则停留在 Connect(对端没有去往本端的路由)Ø 如果对方回应拒绝建立 TCP 连接,则不在继续发送 TCP 报文,在大约 25S 后进入Active 状态注:如果控制 TCP 的主动端和被动端可以使用命令 peer listen-only,此时设备只侦听对端,而不主动建立;或者控制主动端的连接端口地址失败等待状态,huawei 设备依旧为主动建立连接,Active 状态一个时间周期(大约25S)只发送一次 TCP 报文。Ø 如果收到拒绝建立 TCP 报文(没有启用 BGP),则一个时间周期只发送一次,并停留在此状态Ø 如果对方无响应(无本端路由,比如进入 Active 状态,对端路由撤销掉了),一个时间周期后回到 Connect 状态协商状态,TCP 连接建立成功后,发送 open 报文后,进入 OPENSENT 状态,开始等待对端接收对端的 Open 报文Ø 根据 Open 报文中的 AS 号、版本号、认证码等进行检查。当接收到对端的 Open报文后,发现 Open 报文无误,会立刻发送 Keep alive 报文,并进入下一状态 。Ø 如果发现收到的 Open 报文有错误,那么 BGP 发送 Notification 报文给对等体,并转至 Idle 状态OPEN 检测不通过的原因:注:BGP Hold-Timer 时间不一致不影响邻居的建立等待对端的 keep alive 报文,当收到对端的 keep alive,进入下一状态。当成功接收对端 Keep Alive 报文后,进入 Established 状态,是一种稳态,并周期的发送 Keep Alive 报文。BGP 协议中,连接一旦建立,BGP Speaker 将把自己产生的所有 BGP 路由通告给对等体,有多条路径时,BGP Speaker 只会选最优的给自己使用放入 IP 路由表中,BGPSpeaker 只会选最优的给邻居对等体。用来查看当前的邻居,使用 display bgp peer 查看:⑧ Pref Rcv:从邻居学到多少 BGP 路由条数② EBGP 路由,发布给所有 EBGP 和 IBGP 对等体② IGP 同步开启,无相应的 IGP 路由(不加入 IP 路由表中)③ 存在相同的 IGP 路由(不加入 IP 路由表中)⑤ Cluster List 中包含本 RR 的簇 ID(不接受此 BGP 路由)⑥ Originator ID 和本路由器的 Router ID 相同(不接受此 BGP 路由)⑦ 使用 BGP 命令 bgp-rib-only(最优 BGP 路由不会放入 IP 路由表中)① >为最佳路由,存在多条路径时,BGP 会选择最佳路由放入路由表并传递给邻居② *为最优化路由,表示当前路由有效,当没有*标明此路 由不是最优③ i 为 IBGP 邻居学到的路由条目,如果位空表示本地产生或 EBGP 学到的路由