BGP是一个外部网关协议,实现在两个自治系统(Autonomous System)之间传递路由信息,BGP着重于控制路由传播与选择最优路由的协议,它是基于矢量路径算法的动态路由协议。
EGP(Exterior Gateway Protocol)是外部网关协议,它是动态路由协议的一种,另一种是IGP。常用的EGP协议目前只有BGP,在AS之间都是通过BGP协议传播数据。
IGP(Interior Gateway Protocol)是内部网关协议,工作于AS自治系统内,常见的IGP协议有RIP、OSPF、ISIS,IGP着重于发现路由与计算路由。
注:BGP与OSPF是应用最广泛的两个路由协议,外部网关协议与内部网关协议中的两个网关指的是AS自治系统。
BGP与IGP协议与路由来源息息相关,路由器转发报文基于路由表,路由表则涉及了路由来源。
路由来源方式有以下三种:
注:直连路由接口连接链路,接口配置IP,此条路由会被其他路由器学习到、静态路由:使用IP Route Static命令配置
自治系统(AS)是由技术管理机构管理、使用统一选路策略的一些路由器的集合。AS间传递信息时会携带AS编号,如AS65000与AS65001两个编号分别代表两个不同的AS组合。
AS编号有公网与私网之分,公网编号由国际组织管理分配,与IP类似。
注:公网上AS与AS之间传播消息,只能使用公网编号,私网编号可以在不同AS内随意使用,不同运营商都可以用相同编号,但不可发布在公网。
AS间路由器如何通过BGP传递路由信息?
AS65000自治系统的边缘路由器 与AS65001边缘路由器要同时运行两个进程。
AS65000允许OSPF与内部路由器进行路由学习,也同时与AS65001交互,分别运行OSPF与BGP,从BGP学习到的路由信息,要传递到整个AS的路由器,那么便需要把BGP的路由信息导入到 OSPF进程里面,OSPF进程就会在里面进行通告,其实这个边缘路由器起到的作用就是:引入外部路由,同理,AS65001的边界路由器工作原理也是如此。
为什么用BGP(EGP)?
如图,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的精确控制。
建立邻居
发布路由
传递路由
链路维护
建立-发布-传递-维护:
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为什么没有对Update消息的确认呢?Update丢失了怎么办?
Update消息带有路由增量信息,却并没有对Update的确认消息,在OSPF内,有LSR、LSU、LSACK ,ACK就是对LSU的确认。
那bgp为什么没有呢,BGP是应用层协议,它基于TCP,TCP是面向连接的可靠传输协议,TCP内自带消息确认机制,可保证报文不会丢失,所以BGP内不会对Update进行确认。
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)) |
BGP的入口路由策略发生了变化,本地BGP,可以在不中断BGP连接的情况下,对BGP路由表进行动态刷新,并应用新的路由策略。
应用场景
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应用成功。
如果open-sent、open-confirm、Established有一处建立出错的话,发idle报文,tcp连接全部断开,回到idle状态。
BGP工作过程四步骤:
1.邻居建立
2.路由发布
3.路由通告
4.链路维护
BGP邻居类型?
BGP是基于TCP连接的邻居关系,它的端口号:179
如图,路由器RTA、RTB与RTC都属于BGP邻居关系,RTB与RTC为直连路由,RTA与RTB非直连路由,RTA与RTB它们也可以建立邻居关系,因为BGP邻居关系是建立在TCP连接的基础之上。
一、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。
两种不同邻居关系如何做配置?
[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多跳和指定更新源
路由器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路由的途径一:network命令
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优先选择network命令,导入进入的路由。
[RT2] bgp 200 //进入bgp模式
[RT2-bgp] import-route ospf //把ospf路由导入进RT2的bgp路由表
ospf是可变项,也可以是rip、isis。
BGP路由通告原则一
连接一建立,BGP Speaker将把自己所有BGP路由通告给新对等体,多条路径时,BGP Speaker只选择最优的路由给自己使用,BGP Speaker只把自己使用的最优路由通过给对等体。
[RTA] display bgp routing-table //查看bgp路由表
“*” 指的是valid 也就是“有效”的意思。
”>“ 指的是best "最优"的意思。
BGP路由通告原则(二)
BGP Speaker从EBGP获得的路由会向它所有BGP对等体通告(包括EBGP和IBGP)
俗称:从EBGP过来的路由,发送给所有邻居。
如何保证下一跳可达?
EBGP转到IBGP时,默认不修改下一跳。
[RTB-bgp] peer 1.1.1.1 next-hop-local
BGP路由通告原则(三)
BGP Speaker 从IBGP获得的路由不会通告给它的IBGP邻居。
路由器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全互联
BGP speaker从IBGP获得的路由是否通告给它的EBGP对等体要依IGP和BGP同步的情况来决定。
这句话怎么理解,比如:A将自己10.1.1.1/24的路由信息通告给了B ,B根据原则二,B从EBGP学习的,B可以通告给IBGP,B通告给了E,E从IBGP学习的路由,
IGP与BGP同步:
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分开始。