AS(Autonomous System):自治系统/路由选择域
AS是指由同一技术机构管理,使用同一选路策略的一些路由器的集合。
一般来说,一个公司、一个企业、一所大学就可以说是一个自治系统
AS内部使用IGP来计算和发现路由,同一个AS内部的路由器之间是相互信任的,因此IGP的路由计算和信息泛洪完全处于开放状态,人工干预很少。
不同的AS之间,使用EGP来进行通信。BGP作为EGP中的一种协议,用于在AS之间进行路由控制和优先
ASN:自治系统号
一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。
自治系统号由IANA分配,范围为:1-65535,最开始大小为2B(0~65535)。
自治系统号分为(可类比共有IP地址、私有IP地址)
公有ASN:1~64511
私有ASN:64512~65535
后来由于不够用,长度升级到了4B(45536~4294967295)
IGP:内部网关路由协议:
包含有:OSPF、RIP、IS-IS等
注重于发现和计算路由。执行在AS内部
EGP:外部网关路由协议:
包含有:EGP(目前不使用)、BGP:外部网络路由协议代表(目前AS间路由协议或者说的EGP协议一般都指的是BGP协议)
由于BGP的前身EGP由于设计简单,只能简单的传递路由信息,不会对路由进行优选,会造成环路等问题,所以就有了BGP代替了EGP。
AS之间的路由我们可以将一个AS看成一个大路由器
BGP协议被设计运行在AS之间传递路由,AS之间是广域网链路,数据包在广域网上传递是可能出现不可预测的链路拥塞或丢失等情况,因此BGP使用TCP作为其承载协议来保证可靠性。
相当于TCP连接一直存在,BGP通过Keep alive机制(不断、定时发送keepalive报文)时TCP连接不会断掉
BGP使用TCP封装建立邻居关系,端口号为179,TCP采用单播建立连接,因此BGP协议并不像RIP和OSPF一样使用组播发现邻居。单播建立连接也使BGP只能手动指定邻居。(配置的时候需要自己手动指定邻居)
先看起BGP的一端发起TCP的连接。
TCP连接(三次握手)简单介绍:
一下图为例:RTB向RTA发起建立TCP连接请求,RTA收到之后,返回一个连接请求和确认消息,RTB收到之后返回一个确认消息。连接建立完成。
)
EBGP(External BGP):运行在不同AS之间的BGP路由器建立的邻居关系为EBGP邻居关系
IBGP(Inter BGP):运行在相同AS内的BGP路由器建立的邻居关系为IBGP邻居关系
EBGP只用于不同AS之间传递路由。如图,AS 100内的RTB与BTC分别从AS 200与AS 300学习到不同的路由,怎么实现AS 200与AS 300之间路由在AS 100内的交换?
在AS 100内实现将学到的AS 200和AS 300路由进行交换,可以在拓扑中的RTB与RTC路由器上将BGP的路由引入IGP协议(图中为OSPF协议),再将IGP协议的路由在RTB与RTC路由器上引入回BGP协议,实现AS 200与AS 300路由的交换。
上述方法存在以下几个缺点:
公网上BGP承载的路由数目非常大,引入IGP协议后,IGP协议无法承载大量的BGP路由;
BGP路由引入IGP协议时,需要做严格的控制,配置复杂,不易维护;
BGP携带的属性在引入IGP协议时,由于IGP协议不能识别,可能会丢失。
因此我们用IBGP来邻居关系来解决上述问题:如上图,因为BGP使用TCP作为其承载协议,所以可以跨设备建立邻居关系。如图所示,RTB与RTC之间建立IBGP邻居关系,并各自将从其他AS学到的路由传递给对端,实现BGP路由在AS内的传递。
注意:建立IBGP邻居关系建立一般使用Loopback口IP地址,因为Loopback口为逻辑接口,且不会down,非常稳定,这样邻居关系一直处于稳定状态。EBGP邻居关系建立使用直连接口IP地址。
搭建拓扑,规划网段并配置各个接口IP地址。
以RTB举例:
[RTB]int g0/0/0
[RTB-GigabitEthernet0/0/0]ip ad 10.1.24.2 24
[RTB-GigabitEthernet0/0/0]int g0/0/1
[RTB-GigabitEthernet0/0/1]ip ad 10.1.12.2 24
[RTB-GigabitEthernet0/0/1]int lo0
[RTB-LoopBack0]ip ad 22.22.22.22 32
[RTB-LoopBack0]quit
[RTB]
第二步
AS 100内部使用IGB:OSPF协议通信。配置OSPF协议
注意:不要忘记宣告Loopback接口所在网段。
以RTB为例其余路由器相同:
[RTB]ospf
[RTB-ospf-1]a 0
[RTB-ospf-1-area-0.0.0.0]network 22.22.22.22 0.0.0.0
[RTB-ospf-1-area-0.0.0.0]network 10.0.12.0 0.0.0.255
验证RTB环回口是否能与RTC环回口通信,若正确则进行下一步:
<RTB>ping -a 22.22.22.22 33.33.33.33
PING 33.33.33.33: 56 data bytes, press CTRL_C to break
Reply from 33.33.33.33: bytes=56 Sequence=1 ttl=254 time=40 ms
Reply from 33.33.33.33: bytes=56 Sequence=2 ttl=254 time=30 ms
Reply from 33.33.33.33: bytes=56 Sequence=3 ttl=254 time=30 ms
Reply from 33.33.33.33: bytes=56 Sequence=4 ttl=254 time=30 ms
Reply from 33.33.33.33: bytes=56 Sequence=5 ttl=254 time=30 ms
--- 33.33.33.33 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 30/32/40 ms
第三步
配置BGP邻居关系:
1. 配置Router ID:标识路由器
2. 配置EBGP邻居关系:AS之间传递路由
以RTB、RTD之间建立EBGP关系为例:
[RTB]
[RTB]bgp 100
[RTB-bgp]peer 10.1.24.4 as-number 200 //BGP邻居关系的类型主要靠配置的AS号区别,peer关键字后面是对端邻居的接口IP地址,as-number后面是邻居路由器所在的AS号,AS号相同则为IBGP邻居关系;AS号不同,则为EBGP邻居关系。
[RTD]
[RTD]bgp 200
[RTD-bgp]peer 10.1.24.2 as-number 100
第四步
配置IBGP邻居关系:
本例中RTB和RTC建立IBGP邻居关系(本例使用逻辑接口建立IBGP邻居关系):
[RTB]
[RTB]bgp 100
[RTB-bgp]peer 33.33.33.33 as-number 100 //AS号相同则为IBGP邻居关系
[RTB-bgp]peer 33.33.33.33 connect-interface LoopBack 0
[RTC]
[RTC]bgp 100
[RTC-bgp]peer 22.22.22.22 as-number 100
[RTC-bgp]peer 22.22.22.22 connect-interface LoopBack 0
[RTC-bgp]
额外提供直连接口配置方法:
[RTB-bgp]peer 10.1.12.1 as-number 100
查看邻居关系display bgp peer
:
以RTB为例:
[RTB]display bgp peer
BGP local router ID : 2.2.2.2
Local AS number : 100
Total number of peers : 2 Peers in established state : 2
Peer V AS MsgRcvd MsgSent OutQ Up/Down State Pre
fRcv
10.1.24.4 4 200 41 42 0 00:39:16 Established 0
33.33.33.33 4 100 37 37 0 00:35:27 Established 0
注意:此时BGP邻居关系已经建立,但是由于没有路由引入所以没有路由表,查看BGP路由表命令:display bgp routing-table
。路由引入命令下一遍文章介绍
BGP通过报文的交互完成邻居建立、路由更新等操作,共有Open、Update、Notification、Keepalive和Route-refresh等5种报文类型。
Open报文:是TCP连接建立后发送的第一个报文,用于建立BGP邻居之间的连接关系。BGP邻居在接收到Open报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性。确认后,BGP邻居间可以进行Update、Notification、Keepalive和Route-refresh报文的交换。
Keepalive报文:BGP路由器会周期性的向邻居发出Keepalive报文,用来保持连接的有效性。(该报文内容少,无意义,只是为了保证连接不中断)
Update报文:用于在BGP邻居之间交换路由信息。Update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息。
Notification报文:当BGP路由器(BGP speaker)检测到错误状态时,就向邻居发出Notification报文,之后BGP连接会立即中断。
Route-refresh报文:Route-refresh用于在改变路由策略后请求对等体重新发送路由信息。
在Active状态下,BGP路由器总是在试图建立TCP连接。
在OpenSent状态下,BGP路由器等待邻居的Open报文,并对收到的Open报文中的AS号、版本号、认证码等进行检查。
如果收到的Open报文正确,那么BGP路由器发送Keepalive报文,并转至OpenConfirm状态。
如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态。
在OpenConfirm状态下,BGP路由器等待Keepalive或Notification报文。如果收到Keepalive报文,则转至Established状态,如果收到Notification报文,则转至Idle状态。
在Established状态下,BGP路由器可以和邻居交换Update、Keepalive、Route-refresh报文和Notification报文。