BGP协议

BGP协议

BGP是一个外部网关协议,实现在两个自治系统(Autonomous System)之间传递路由信息,BGP着重于控制路由传播与选择最优路由的协议,它是基于矢量路径算法的动态路由协议。

EGP与IGP区别

EGP(Exterior Gateway Protocol)是外部网关协议,它是动态路由协议的一种,另一种是IGP。常用的EGP协议目前只有BGP,在AS之间都是通过BGP协议传播数据。

IGP(Interior Gateway Protocol)是内部网关协议,工作于AS自治系统内,常见的IGP协议有RIP、OSPF、ISIS,IGP着重于发现路由与计算路由。

注:BGP与OSPF是应用最广泛的两个路由协议,外部网关协议与内部网关协议中的两个网关指的是AS自治系统。

路由来源

BGP与IGP协议与路由来源息息相关,路由器转发报文基于路由表,路由表则涉及了路由来源。
路由来源方式有以下三种:

  1. 直连路由
  2. 静态路由
  3. 动态路由

注:直连路由接口连接链路,接口配置IP,此条路由会被其他路由器学习到、静态路由:使用IP Route Static命令配置

自治系统Autonomous System

自治系统(AS)是由技术管理机构管理、使用统一选路策略的一些路由器的集合。AS间传递信息时会携带AS编号,如AS65000与AS65001两个编号分别代表两个不同的AS组合。

AS编号有公网与私网之分,公网编号由国际组织管理分配,与IP类似。

  1. 公网编号范围:1~64511
  2. 私网编号范围:64512-65535

注:公网上AS与AS之间传播消息,只能使用公网编号,私网编号可以在不同AS内随意使用,不同运营商都可以用相同编号,但不可发布在公网。

AS间路由器如何通过BGP传递路由信息?
BGP协议_第1张图片
AS65000自治系统的边缘路由器 与AS65001边缘路由器要同时运行两个进程。

AS65000允许OSPF与内部路由器进行路由学习,也同时与AS65001交互,分别运行OSPF与BGP,从BGP学习到的路由信息,要传递到整个AS的路由器,那么便需要把BGP的路由信息导入到 OSPF进程里面,OSPF进程就会在里面进行通告,其实这个边缘路由器起到的作用就是:引入外部路由,同理,AS65001的边界路由器工作原理也是如此。

为什么用BGP(EGP)?
BGP协议_第2张图片
如图,AS1、AS2、AS3分别代表移动联通电信三个运营商,内部分别有三台HTTP服务器,当服务器需要被其他用户访问时。

*静态路由配置

通过在RTA、RTB与RTC上分别配置ip route static命令,配置去往3个路由器的静态路由条目,在AS1中的RTC上,把静态路由导入到内部OSPF进程中,AS1的路由器则就可以学习到这RTA与RTB的路由。

缺点:静态路由配置需手动配置,假若AS2内有若干台服务器,那配置静态路由的条目也需要若干条。

动态路由OSPF协议配置:

OSPF可以把路由引入 ,把3.3.3.3导入OSPF进程内, RTA与RTC路由器之间运行OSPF,会带来一个问题。

缺点:A与C分属不同的运营商,它们通过OSPF建立连接,A将C的整个路由表学习到,等同于获得了C的网络拓扑,内部路由器数量、网络规模大小,在运营商(公司)之间,这是不被允许的,属于商业机密,所以AS之间不允许使用OSPF来连接。

动态路由协议BGP配置:

AS之间通过BGP协议来精确控制学习路由,所谓精确路由传递,即AS3内的Http服务器,可以允许AS2内的用户访问,却不被AS1内用户访问,这就是BGP的精确控制。

BGP的基本工作机制

BGP协议_第3张图片
BGP有四种工作机制:
工作机制

  1. 建立邻居

  2. 发布路由

  3. 传递路由

  4. 链路维护

BGP工作过程

建立-发布-传递-维护:
1. 邻居建立过程:在路由器上配置BGP,路由器便有了bgp路由表,最初,bgp路由表为空,BGP不会自动学习或发现路由。(如A与B直连,接口上有IP与链路,但是信息不会进入BGP路由表内)
2. 路由发布过程:AS1内IP为1.1.1.1的路由,要让其他AS用户网络都能学习到,需要通过命令: [RTA-BGP]Network 1.1.1.1 24 发布到BGP路由表,配置完,BGP内就有了这条路由。
3. BGP路由传递:RTA传递路由,会将路由交给邻居B->C->D,最终每个AS内的路由器都会学习到此路由。RTA传递BGP路由是可控制的,由它决定是否传递给B、C、D某台路由器。
4. 链路维护:RTA与RTB之间,属于邻居,需要维护链路,对链路进行周期性检测是否可以用

工作机制 对应消息类型
建立邻居 Open
发布路由 Network、import
传递路由 Update
链路维护 keep-alive、Notific atiol、router-refresh

BGP消息类型?

BGP报文有五种类型:

  1. Open:负责和对等体建立邻居关系。
  2. Update:该消息被用来在BGP对等体之间传递增量路由信息。
  3. Keep-Alive:该消息在对等体之间周期性地发送,用以维护连接。
  4. Notification:当BGP Speaker检测到错误的时候,就该发送该消息给对等体。
  5. Route-refresh:用来通知对等体自己支持路由刷新能力。

BGP为什么没有对Update消息的确认呢?Update丢失了怎么办?

Update消息带有路由增量信息,却并没有对Update的确认消息,在OSPF内,有LSR、LSU、LSACK ,ACK就是对LSU的确认。

那bgp为什么没有呢,BGP是应用层协议,它基于TCP,TCP是面向连接的可靠传输协议,TCP内自带消息确认机制,可保证报文不会丢失,所以BGP内不会对Update进行确认。

BGP报文信息

BGP报文头部中包含Header、Message、Data,在Header中,Type最重要,它有占1Byte。

Type数值 Type数值代表含义
1 Open-------报文信息:Version:BGPV4、My Autonomous System(自治区域编号、Hold Time:时间内未收到Keepalive,TCP断开连接、BGP Identifier:类似OSPF的路由ID、Opt Param Len:可选参数TLV结构、Optional Parameters(variable):最开始发送它,用来建立TCP连接
2 Update-------Withdrawn Routes Length增加撤销路由、Withdrawn Routes撤销数量、Path Attribute Length路由属性,AS-Path属性即放此处,路由属性根据具体的路由相关联、Path Attribute新增路由放置处、 Network Layer Reachability Information新增路由
3 Notification------Error Code [1]消息头错误、[2]Open消息错误、[3]Update消息错误、[4]保持时间超时、[5]状态机错误、[6]终止
4 Keepalive(KeepAlive报文只有报文头,默认60s发一次,180s超时(Hold Time))
Route-refresh报文

BGP的入口路由策略发生了变化,本地BGP,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。

应用场景
BGP协议_第4张图片
RTA发布两条路由(1.1.1.1、2.2.2.2)给RTB,RTB将路由学完后要改策略,只接收1.1.1.1的,拒绝接收2.2.2.2,则要在RTB上应用新的策略,RTB发布Route-refresh ,RTA再重新发布路由,B应用新的路由策略之后,允许接收1.1.1.1,拒绝接收2.2.2.2,Route-refresh应用成功。

BGP状态机

BGP协议_第5张图片

  1. idle (初始化状态):idle是BGP初始状态,尚未配置BGP,BGP拒绝任何进入的连接请求 ,配置BGP后,进入connect
  2. Active(尝试建立连接):BGP将尝试进行tcp连接的建立,是BGP的中间状态
  3. connect(建立tcp连接):连接建立后,BGP间可通信。如果双方路由器都配置了BGP,那么connect就可以成功建立连接。只有一方配置,BGP建立会失败,进入Active状态,失败重试,如失败次数太多又会回到connect。双方都配置了BGP,并且正确,tcp建立完成,进入 open-sent,
  4. open-sent:进入此状态,设备会发送open消息,收到open消息后,设备进入open-confirm。
  5. open-confirm:此状态会发送keepalive消息给对方,并启动计时器,定期收到keeplive消息。keeplive消息收到,进入establish
  6. establish(建立完成状态):此状态发送update,同步路由,定期发keeplive消息。

如果open-sent、open-confirm、Established有一处建立出错的话,发idle报文,tcp连接全部断开,回到idle状态。

BGP工作原理

BGP工作过程四步骤:

1.邻居建立
2.路由发布
3.路由通告
4.链路维护

BGP邻居类型?

BGP是基于TCP连接的邻居关系,它的端口号:179
BGP协议_第6张图片
如图,路由器RTA、RTB与RTC都属于BGP邻居关系,RTB与RTC为直连路由,RTA与RTB非直连路由,RTA与RTB它们也可以建立邻居关系,因为BGP邻居关系是建立在TCP连接的基础之上。

BGP的邻居关系

BGP协议_第7张图片
BGP的两种邻居关系分别是?

一、IBGP:Internal BGP,如图,路由器RTB与RTD都属于AS200,他们是属于IBGP,IBGP要求两个设备在同一AS内。

二、EBGP:External BGP,如图,路由器RTE与RTD属于不同AS,那么他们属于EBGP,EBGP是指两设备不在同一AS内。

BGP怎么建立邻居?

BGP不能自动发现邻居,必须手动指定邻居,BGP是基于TCP,TCP基于IP,TCP属于传输层,在网络层肯定有IP头,IP头部内有目标IP与源IP,想建立TCP连接就必须知道源目标IP,那么BGP就需要知道源、目的IP才可以指定对端IP。
OSPF自动发现邻,依靠发送一个HELLO报文,HELLO报文内是目标IP是一个主播的IP地址224.0.0.6。

两种不同邻居关系如何做配置?

EBGP邻居关系配置:
BGP协议_第8张图片
RTE与RTD为EBGP邻居关系

[RTE] bgp 300 #指定bgp 300
[RTE-bgp]peer 20.0.0.1 as-number 200 #peer-邻居的意思,指定邻居为 20.0.0.1 as编号是200.

[RTD]bgp 200 #指定bgp 200
[RTD-bgp]peer 20.0.0.2 as-number 300 #peer-邻居的意思,指定邻居为 20.0.0.2 as编号是300.

通过这两条配置,RTE与RTD就可以建立EBGP的关系。

IBGP邻居关系配置与EBGP邻居配置方法一致。
RTB与RTD属于IBGP关系,它们的邻居配置:
(RTB与RTD非直连路由,在AS内部允许OSPF可让它们建立连接,建立BGP的前提需要保证路由可达)
[RTB]bgp 200
[RTB-bgp]peer 4.4.4.4 as number 200

[RTD]bgp 200
[RTD-bgp]peer 2.2.2.2 as number 200

EBGP多跳和指定更新源
BGP协议_第9张图片
路由器RTE上需要通过loopback地址来建立BGP邻居,
需要配置:peer 4.4.4.4connect-interface loopback 0。

EGBP、IBGP中TTL默认值在应用中的缺陷及解决办法:

BGP作为传输层协议,封装在IP协议中,在IP报文内有一个参数为TTL,而EBGP与IBGP均有一个TTL的默认值,分别是EBGP默认为1,IBGP默认为255。

BGP属于应用层协议,封装在IP报文内,IP报文中带有一个TTL的参数,EGBP与IBGP分别有一个TTL值,EBGP的TTL默认值为1,IBGP的TTL默认值为255。
EBGP默认为1的TTL值,在使用直连路由建立BGP邻居时,对TTL值无关紧要,但再使用"loopback"建立逻辑接口时的直连路由上,会导致TTL跳数不够,而导致报文无法转发。
在EBGP邻居关系下的RTE与RTD中,因为RTD创建了loopback环回接口,RTE发送报文给RTD时,RTE>RTD为一跳,RTD>loopbook0为一跳,EBGP的TTL值为1,小于跳数2,报文被丢弃,无法转发到loopback环回接口
为了解决上述问题,确保报文转发至loopback0,配置一条命令:
[RTE-bgp]peer 4.4.4.4 ebgp-max-hop 2
此命令作用:从路由器发送给loopback0的报文,会将其IP报文头部的TTL值置为2,这便实现了与loopback的通信。

IBGP关系的路由器D与路由器B建立邻居关系使用LOOPBACK

[RTE-bgp] peer 4.4.4.4 connect-interface loopback 0

loopback0接口,省略了一步配置最大跳数。IGBP邻居关系TTL默认为255,为最大值,IEBGP之间配置的区别。

BGP协议_第10张图片

BGP路由发布

  1. Network
  2. import

发布BGP路由的途径一:network命令
BGP协议_第11张图片
network发布路由的路由必须是存在的路由。

 [RT2] bgp 200   //进入bgp模式
 [RT2-bgp]  network 18.0.0.1 255.255.255.255   //把路由通过network命令注入RT2-bgp路由表中
 [RT2-bgp]  network 18.0.0.2 255.255.255.255   //bgp掩码 255.255.255.255与ospf-0.0.0.0相反。

发布BGP路由的途径之二:import命令
BGP协议_第12张图片
bgp优先选择network命令,导入进入的路由。

[RT2] bgp 200                  //进入bgp模式
[RT2-bgp] import-route ospf    //把ospf路由导入进RT2的bgp路由表

ospf是可变项,也可以是rip、isis。

路由通告原则

BGP路由通告原则一

连接一建立,BGP Speaker将把自己所有BGP路由通告给新对等体,多条路径时,BGP Speaker只选择最优的路由给自己使用,BGP Speaker只把自己使用的最优路由通过给对等体。
BGP协议_第13张图片

[RTA] display bgp routing-table   //查看bgp路由表
 “*”   指的是valid 也就是“有效”的意思。
 ”>“ 指的是best "最优"的意思。

BGP路由通告原则(二)
BGP Speaker从EBGP获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP)
BGP协议_第14张图片

俗称:从EBGP过来的路由,发送给所有邻居。
BGP协议_第15张图片
如何保证下一跳可达?

EBGP转到IBGP时,默认不修改下一跳。

[RTB-bgp] peer 1.1.1.1 next-hop-local

BGP路由通告原则(三)

BGP Speaker 从IBGP获得的路由不会通告给它的IBGP邻居。
BGP协议_第16张图片
路由器RTE将192.168.1.0/24这条路由发送给路由器RTA,
根据【路由通告原则二】,RTA会通告给RTB与RTC,那么RTB能否在通告给RTD呢,不能,它是从IBGP收到的路由,不能通告给它的IBGP邻居。
假设B能通告给D,会发生什么问题?
E>A>B>D>C>A 出现环路,为避免环路,这种做法不被允许。
所以D与F学不到192.168.1.0/24的这条路由。
如何让D与F能学习到呢?

解决的办法是:IBGP全互联

IBGP全互联
BGP协议_第17张图片
BGP路由通告原则(四):

BGP speaker从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定。
BGP协议_第18张图片

这句话怎么理解,比如:A将自己10.1.1.1/24的路由信息通告给了B ,B根据原则二,B从EBGP学习的,B可以通告给IBGP,B通告给了E,E从IBGP学习的路由,

IGP与BGP同步:
BGP协议_第19张图片 A通告了10.1.1.1/24,通告给B>E>F,F要去往10.1.1.0网段的报文,要交给E,E>B(走的就是:E>D>C>B)的物理连接。但是D没有到10.1.1.0的目标网段信息,之前传的是BGP的路由信息条目,D根本无法学习到此路由,报文到D之后就无法转发了。 其实,在E上要先做判断,在做通告路由信息给F时,要看IGP(ospf)有没有整个路由信息(去往10.1.1.1IP的信息),如果没有,则不可通告给F,F返回的报文无法转发,有,可通告。

实验34分开始。

BGP路由选择工具

  1. 访问控制列表(ACL)
  2. 前缀列表(ip-prefix)
  3. 自治系统路径信息访问列表(as-path-filter)
  4. 团体属性列表(community-filter)
  5. 路由策略(router-policy)

你可能感兴趣的:(路由交换)