BGP基础

运行了BGP协议的路由器,其所维护的路由表,是包含了整个互联网的所有路由信息

BGP特点
  • BGP是基于TCP协议进行数据传输,必须先建立TCP连接,再建立BGP会话连接。

  • 仅具备触发更新,而不再进行周期更新。

  • BGP协议只传递路由信息,不会暴露AS内部的拓扑信息。

  • 通常BGP被称为无类别的路径矢量协议

    • 无类别----传递时携带掩码信息

    • 矢量----方向性:谁传递给我的路由信息,谁就是我的下一跳。

    • 路径矢量----将一个AS看做一个整体,从而计算下一跳。

BGP与IGP协议有本质上的区别,IGP协议主要的任务是将AS内部的未知网段信息计算获取到路由信息,而BGP则主要是将通过IGP协议计算出的路由信息进行搬运,并不会计算路由信息

BGP特征
  • 可控性

    • BGP使用大量的路径属性,取代了IGP协议中的Cost,来对路由信息进行管控。

  • 可靠性

    • 依靠TCP完成可靠性建设。TCP端口179

    • 两台运行BGP协议的设备,需要网络管理员手工配置邻居的IP地址,从而实现数据通讯。

  • AS-BY-AS

    • 在BGP的视角当中,会将一个AS看做为一个整体

    • 因为BGP是将一个AS看做一个整体,但是在该整体内部数据传输时,并非相同,故BGP默认不支持负载均衡功能

BGP的对等体关系

BGP因为传输层使用的是TCP协议,所以,只要在TCP协议可以正常建立会话的基础上就可以完成BGP会话的建立工作-------BGP支持非直连建邻。----前提网络可达。----->BGP协议的搭建是建立在IGP协议之上

  • EBGP

    • 位于不同自治系统的BGP路由器之间的BGP对等体关系。

    • EBGP对等体一般使用直连方式建立邻居关系,故而,TTL数值被设定为1

    • 两台路由器之间要建立EBGP对等体关系,需要满足如下条件

      • 两台路由器所属的AS不同--->判别方式:本地设备通过网络管理员的配置知晓对端的AS,从而判断是否处于相同AS。

      • 配置EBGP时,peer命令所指定的邻居IP地址必须为网络可达,保证TCP连接可以正常建立。

  • IBGP

    • 位于相同自治系统的BGP路由器之间的BGP对等体关系。

    • IBGP对等体一般使用非直连建邻,故而TTL数值被设定为255

缺省情况下,BGP协议使用报文出接口作为TCP连接的本地接口IP。但是在某些情况下,我们可以指定BGP对等体之间的会话IP地址;例如,在IBGP对等体关系中,常使用环回接口地址作为通讯的源地址。原因是因为loopback接口非常稳定,而且可以借助AS内的IGP协议实现冗余来保证可靠性。

总结:

  • 无类别路径矢量协议

  • BGP使用单播更新来发送数据,基于TCP实现通讯。

  • 增量更新

  • 具有丰富的路径属性来取代IGP中的度量值参数,从而控制选路。

  • 可以在控制层流量的出入口通过路由策略实现可控性

  • 默认不被用于负载均衡-----会通过各种选路规则选择出一条最优路径信息。

  • BGP支持认证以及路由聚合。

BGP数据包


 

Route-refresh-----路由刷新包

作用:用来要求对等体重新发送指定地址族的路由信息

一般为本端修改了相关路由策略之后让对方重新发送update报文,本端执行新的路由策略重新计算BGP路由。----前提提交为双方均支持路由刷新功能。

open包

TCP建立之后发送的第一个BGP报文,用于建立BGP对等体之间的连接关系。该过程无非就是进行参数协商的过程。

  • AS号

    • 不管接收到的open报文中的AS号是否与本地AS号相同,都不会影响到BGP对等体关系的建立。

    • 但是,如果open报文中的AS号,与本地建邻时由网络管理员编写的AS号不同,则邻居关系无法建立

      • BGP对等体在建立邻居时,会配置对等体所在的AS号,如果对端发送的open报文中所包含的AS号与本地配置不同,才会导致建邻失败。

  • RID

    • 如果两端RID相同,则对等体关系建立失败。

  • 认证字段

    • 如果认证方式或者认证数据不通,则导致建邻失败。

    • 该字段永远以MD5形式,存储在TCP的选项字段中。

  • Hold Time----保活时间

    • BGP在建立对等体关系时两端需要协商该参数,并保持一致。但是该参数并不会影响BGP对等体关系的建立

    • 如果两端的保活时间不同,则按照较小的一端数值来执行。

    • 如果在该时间内未收到对端发送来的报文信息,则认为BGP连接断开。该时间默认为180S,报文的周期发送时间为保活时间的三分之一,即60S。

    • 该参数可以设置为0,此时代表不发送keepalive报文周期保活。

    • 因为BGP会话是基于TCP会话建立,只要TCP判断连接断开,则BGP会话断开,故保活机制对于BGP而言并不那么重要,而设定保活机制原因仅仅是因为TCP判断会话断开所需要的时间过长,为了加快收敛速度,添加保活机制。

  • 路由刷新功能

keepalive包

作用:主要用来进行周期保活,临时充当确认报文

keepalive报文发送时间默认为保活时间的三分之一。

keepalive报文的确认实际上是针对open报文中的参数信息进行确认。而非open报文本身。TCP协议进行确认的目的是为了保障数据传输的可靠性,而keepalive报文确认的目的是为了告知对端本地认可你的参数内容。

当收到的open报文中的参数通过验证,则回复keepalive报文;如果未通过验证,则回复notification报文。

Update包-----更新包

作用:用于在对等体之间传递路由信息,可以用于发布和撤销路由

  • 撤销路由字段长度

  • 撤销路由列表

    • length---->待撤销路由的掩码信息

    • perfix---->传输的IP地址前缀信息。

  • 路径属性字段长度

  • 路径属性列表

  • NLRI---->网络层可达信息

    • 内容与撤销路由列表相同

BGP的状态机

OSPF的状态机是在描述整个协议的完整工作过程,而BGP的状态机仅描述的是对等体关系建立过程中的状态变化。-----因为BGP将邻居建立过程以及BGP路由收发过程完全隔离

IGP协议在启动后,需要通过network命令激活接口,从而使接口具备处理IGP协议报文的能力。且network命令另一重含义就是发布路由,所以IGP协议无法将邻居建立过程以及路由收发过程隔离。

但是BGP协议在启动后,每一个接口都具备处理BGP报文的能力,不需要其他任何操作,所以可以将邻居建立过程以及路由收发过程进行分割。

  • Idle----空闲状态

    • 等待网络管理员手工指定邻居信息,IP地址以及AS号

    • 当指定邻居信息后,会进入一个检查环节,需要检查手工指定的IP地址在本地路由表中是否可达,只有可达,才可以正常建立TCP会话,如果不可达,则邻居关系建立失败,停留在Idle状态。

  • Connect----连接状态

    • 该状态会开启一个连接重传定时器---32秒

      • 当该计时器时间超时,则本端重新发送一次TCP连接请求报文。在该时间段内没有收到任何一个回复报文。

    • 如果此时本地判断TCP状态进入到establish状态,则认为TCP连接建立成功,进入到opensent状态。

    • 如果此时本地收到的是拒绝报文,则认为TCP连接建立失败,进入到Active状态。

    • 如果BGP在连接重传定时器时间内,没有收到对等体的响应,那么BGP会继续尝试与对等体建立TCP会话,并一直处于该状态

  • Active----尝试状态

    • 第一次TCP会话建立失败,则进入该状态。

    • 如果建立成功,则进入opensent状态;如果建立失败,则停留在active状态。

    • 使用在connect状态开启的连接重传定时器来发送链接建立请求报文,当建立成功后,该计时器才会被关闭。

  • opensent状态

    • 本地发送出open报文,同时也将收到对端发送的open报文,并予以回复。

    • 如果收到的open报文中的参数本端认可,则回复keepalive报文;否则回复notification报文。

    • 如果回复keepalive报文,则进入openconfirm状态;如果回复notification报文,则进入idle状态。

  • openconfirm状态

    • 等待对等体对于本地发出的open报文参数的回复。

    • 如果收到的是keepalive报文,则认为BGP会话建立成功,进入到establish状态。

    • 如果收到的是notification报文,则认为BGP会话建立失败,断开TCP连接,回到idle状态。

  • Establish状态----建立状态

    • BGP会话建立的标志

    • 在该状态可以发送除了open报文以外的所有BGP数据报文。

 

BGP的工作过程
  1. 基于IGP、静态、直连路由协议实现IP可达---->前置要求,不是BGP工作过程

  2. 启动BGP协议,并指定邻居关系。

    1. 邻居之间使用单播进行数据传输,通过三次握手,建立TCP会话通道。

    2. 之后所有的数据通讯均基于TCP会话通道来传输,并由TCP协议来提供传输的可靠性机制。

  3. 使用open报文和keepalive报文进行邻居之间参数的协商,以及对等体关系的建立。

    1. open报文用来携带参数信息

    2. keepalive报文用来进行参数确认

    3. 最终生成BGP邻居表

  4. 使用update报文来传输BGP路由信息。该信息中将携带前缀信息、前缀长度以及路径属性。

    1. 设备会将自己发送的以及收到的所有BGP路由信息记录在BGP路由表中。

    2. 设备会对比不同路由表单,将其中最优的路由信息加载到全局路由表中。

  5. 此时路由收敛完成,BGP对等体之间使用keepalive报文进行周期保活(可选)。默认为180S,可以设置为0关闭周期保活性质。

  6. 如果出现出错误,使用notification报文告警;如果出现结构突变,使用update报文进行增量更新。

BGP的防环
EBGP的水平分割机制

专门为了解决EBGP对等体之间的环路问题

通过AS_Path属性进行防环,该属性会记录下该路由信息所经过的所有AS的AS号。当设备收到一条路由信息时,会查看该属性内容,如果其中存在有与本地AS号相同的信息,则不接受该路由信息。

 

IBGP的水平分割机制

 

BGP规定:当路由器从一个IBGP对等体学习到某条BGP路由时,它将不能再把这条路由信息通告给任何IBGP对等体------IBGP水平分割机制

解决思路:

  1. 将原本的IBGP对等体关系替换为EBGP对等体关系----在同一个AS下--------联邦

  2. 手工设定让某台路由器将从IBGP学习到的路由信息传递给某个IBGP对等体-----路由反射器

  3. 构建全互联的IBGP对等体关系。----暂时常用。

BGP的路由黑洞

 

BGP同步更新规则----为了避免BGP路由黑洞问题

当一台路由器从自己的IBGP对等体学习到一条IBGP路由时,它将不能使用这条路由或者将这条路由通告给其他设备,除非他又从IGP协议中学习到这条路由信息------要求IBGP路由与IGP路由同步

华为与思科默认禁止使用该规则,华为不允许打开该规则,思科允许打开该规则

解决方法:

  1. 让两台运行BGP设备在物理或逻辑上直连

  2. 所有设备运行BGP协议----暂时最常用

  3. 将BGP路由引入到IGP中。

  4. MPLS----多协议标签交换----现网环境使用的解决方案

 BGP基础配置

BGP的路由发布
通过network命令发布路由信息

在BGP中,network命令只能用来发布路由信息。对于BGP而言,只要是路由表中存在的路由信息,都可以通过network命令发布,并且发布的路由必须时本地可用的路由信息

[r1-bgp]network 1.1.1.1 32  ----发布1.1.1.1/32的路由信息

  发布路由时,网络号和掩码信息必须与全局路由表中的信息一致

[r1]display bgp routing-table   ----查看BGP路由表

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值