• BGP的基础知识


    BGP——边界网关协议

    IGP——内部网关协议——OSPF、RIP、ISIS

    EGP——外部网关协议——EGP、BGP

    边界网关协议BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4+,是在BGPV4的基础之上支持了更多的地址族,例如IPV6。

    AS自治系统

    由单一的组织或者机构独立维护的网络设备以及网络资源的集合。

    划分AS的原因

    • 整个世界网络范围过大,单一网络收敛很慢且延迟较大。
    • 每个网络可能是某个组织或公司建立的,它们并不想将自己辛苦建立的网络交给别人管理,所以需要进行自治。

    AS号

    为了区分不同的AS,网络世界IANA组织提出了AS号——0-65535,0和65535一般作为保留AS号来使用,1-64511作为公有AS号使用,64512-65534作为私有AS号使用。

    拓展AS号——将原本16位的AS号拓展到32位。

    BGP的一些特性

    • 高可控性——路径属性
    • 高可靠性——TCP
    • AS-BY-AS——BGP把一个AS看作一个整体

    BGP设计了很多路径属性,可以通过调用路由策略关联这些属性,达到路由控制的效果。

    我们对IGP和EGP的要求不同,IGP需要在一个AS内计算路由,所以我们要求IGP选路佳、收敛快、占用资源少;而EGP不同,EGP协议只需要传递AS已经计算好的路由,所以我们对EBP的可控性、可靠性要求更高。

    BGP传递的一定是路由条目信息

    BGP没有使用周期更新传递路由信息

    BGP存在触发更新

    BGP在传输层使用TCP进行传输:端口号——179

    BGP在建邻时必须指定建邻的对象,BGP技术支持非直连建邻

    RIP是无类别的距离矢量路由协议,BGP是无类别的路径矢量协议,无类别——在传递路由条目信息时携带子网掩码,从而减少路由黑洞的产生。

    BGP默认情况下不支持负载均衡,BGP会根据传递过来的路由信息中携带的路径属性选择最优的路径信息加载到路由表中。

    BGP把AS看作一个整体

    RIP/IGP实际上是一个算法的概念,BGP不是一个算法的概念,BGP也不需要计算路由信息,只负责转发路由即可。

    EBGP对等体——一般建议采用直连建立对等体关系

    IBGP对等体——一般采用非直连建邻

    BGP为了实现这两个原则:BGP规定EBGP对等体之间发送数据包中携带的TTL值为1,而IBGP对等体之间传递的数据包TTL值为255。

    BGP的数据包

    报文名称作用发送时刻
    Open协商BGP对等体参数,建立对等体关系BGP TCP建立连接成功之后
    Update发送BGP路由更新BGP对等体关系建立之后又路由需要发送或路由变化时向对等体发送Update报文
    Notification报告错误信息,中止对等体关系当BGP在运行中发现错误时,发送Notification报文将错误信息通告给BGP对等体
    Keepalive标志对等体建立,维持BGP对等体关系BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接
    Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文当路由策略发生变化时,触发请求对等体重新通告路由

    BGP的公共头部

    Open包

    作用:用来建立BGP对等体关系的数据报文。

    • AS号:自身的AS号,对比逻辑——对等体发过来的Open报文中携带的AS号必须和指定建邻的AS号一致,否则会导致建邻失败。
    • RID:建邻双方的RID不能一致,如果相同,会导致建立对等体失败。
    • 认证:BGP在建邻时如果做认证的话,需要对比双方认证口令,不一致则无法建立邻居关系。
    • 保活时间:类似于OSPF的死亡时间,默认180s,如果对等体双方保活时间不一致,会按照时间更小的去执行。

    Keepalive包

    • 用来周期保活BGP的邻居关系,默认是1/3的保活时间——60s
    • 用来做Open报文的临时确认包

    Update包

    传递BGP路由信息的数据包。

    BGP中的更新包,用来携带路由条目信息,包括目标网段、子网掩码以及BGP的各种属性。

    在Update包中存在撤销路由字段,我们可以直接将不可达的路由信息放在该字段下进行通告,以达到传递失效信息的目的。而不需要想RIP那样采用带毒传输的方式。

    Notification包

    告警报文,在BGP工作过程中如果出现故障出现问题,会发送Notification报文告知对等体问题的原因。

    Toute-refresh包

    一种刷新机制,用于改变路由策略后请求对等体重新发送路由信息,前提是对等体双方均支持路由刷新。

    BGP状态机

    建立对等体之间TCP会话,指定建立对等体的对象。

    BGP在建立对等体过程中,会建立两次TCP会话,会保留RID大的设备发起的TCP会话。

    BGP一共存在6种状态机

    Peer状态名称用途
    Idle开始准备TCP的连接并监视远程对等体,启用BGP时,要准备足够的源
    Connect正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的,如果TCP连接建立失败则进入Active状态,反复尝试连接
    ActiveTCP连接没建立成功,反复尝试TCP连接
    OpenSentTCP连接已经建立成功,开始发送Open包,Open包携带参数协商对等体的建立
    OpenConfirm参数、能力特性协商成功,自己发送Keepalive包,等待对方的Keepalive包
    Established已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update通告路由信息

    Idel状态下,启动BGP协议后,必须指定建立对等体的目标之后,进入下一个状态。

    必须路由可达(依靠IGP协议或者静态、直连)

    Connect状态下,BGP对等体之间开始建立TCP会话连接。如果TCP会话建立成功,则进入OpenSent状态,如果TCP会话建立失败,则进入Active状态。

    如果TCP会话(三次握手)建立成功,则进入OpenSent状态,开始发送Open报文,去建立BGP对等体关系。

    如果认可对等体发过来的Open报文中的参数,首先会回复一个Keepalive报文,用来确认Opne报文中的参数我已经认可,并且进入下一个OpenConfirm状态。

    OpenConfirm状态下,如果收到对等体发送的Keepalive报文,则进入最终状态Established。

    BGP的工作过程

    1、基于IGP(静态、直连、RIP、OSPF...)实现路由可达,原因:BGP需要建立TCP会话(单播)。

    2、指定邻居关系,邻居之间单播传输,通过三次握手,建立TCP会话通道。之后所有BGP通信都将基于TCP会话通道来进行传输。并且依据TCP提供传输的可靠性。

    3、使用Open报文和Keepalive报文进行邻居关系的建立。Open报文用来携带建邻使用的参数,Keepalive报文用于Open报文参数的确认。最终完成对等体关系的建立,生成邻居表,存储BGP对等体关系信息。

    4、建立邻居关系后,使用Update报文来共享路由条目信息。信息中将携带目标网络号,掩码几路径属性;之后,将发送以及收集到的路由信息记录在一张表中——BGP表。

    5、之后,会将BGP表中最优的路由信息(通过路由属性选择的结果)加载到路由表中。

    6、收敛完成后,将使用Keepalive报文进行对等体之间的周期保活,默认保活时间为180s(hole time),发送周期为60s。

    7、如果这个过程出现任何问题,都将使用Notification报文进行告警。

    8、如果出现结构突变(网段消失或者新增网段),则将使用Update报文进行触发更新,并通告给其他对等体。

    BGP的路由黑洞

    控制层面的可达

    数据层面实际不可达——中间设备没有运行BGP

    IGP内部存在没有运行BGP的设备,当访问BGP网段的流量来到这些设备之后,由于控制层面可达,数据层面不可达(这些设备没有运行BGP,没有BGP网段的路由信息),那么将丢弃这些流量。

    解决方案:

    • 所有设备均运行BGP
    • 重发布
    • MPLS——最早专门用来解决BGP路由黑洞研发的一种路由协议。

    同步机制——当设备学习到一条BGP路由,如果本地IGP路由表不可达,将视该BGP路由无效。默认处于关闭状态。

  • 相关阅读:
    1封开发信收获7个客户订单,怎么做到21%回复率的?(内涵英文邮件模板)
    如何看待Unity新的收费模式?(InsCode AI 创作助手)
    YOLO系列梳理(九)初尝新鲜出炉的YOLOv6
    stm32——hal库学习笔记(外部中断)
    C语言数据类型
    Linux CentOS7 vim寄存器
    Linux/Validation
    解决ASP.NET Core的中间件无法读取Response.Body的问题
    [黑马程序员Pandas教程]——DataFrame查询数据
    2022年9月19日--9月25日(ue4热更新视频教程为主,)
  • 原文地址:https://blog.csdn.net/weixin_71169037/article/details/134473310