BGP--->基础理论、邻居建立、邻居状态
BGP--->基础理论、邻居建立、报文类型、邻居状态
为什么需要BGP?
在EBGP协议中,引入了AS(自治系统的概念)。(AS是指由同一个技术管理机构管理,使用同一的选路策略的一些路由器的集合。)
AS内部使用IGP来计算和发现路由,不同的AS之间的连接需求推动了BGP的出现。BGP作为外部网关协议,用于在不同AS之间进行路由控制和优选。
BGP基础理论
BGP是一种基于TCP协议的应用层路由协议,所以邻居关系不会自动建立,需要手动配置。
BGP使用的TCP 179端口进行工作。
BGP是一种单播通信,DIP是要事先知道的。
BGP的建立邻居的地址,要保证其互通性。
BGP邻居建立
BGP邻居类型
1、EBGP邻居:运行在不同AS之间的BGP邻居建立的邻居关系
EBGP邻居建立:
①直连物理接口配置EBGP邻居
bgp 1
peer 10.1.12.2 as-number 2 使用物理接口与as 2建立邻居
邻居的地址是本端向该邻居发送BGP报文的目的地址,同时这个地址也是对端向本端发送BGP报文的源地址
注意:
源地址默认情况下是去往邻居地址路由的出接口IP
默认情况,EBGP邻居之间发送的BGP报文的TTL=1,即强制要求EBGP邻居直连
特殊情况:
当用多条物理链路建立连接时,R1上引入的路由信息发送给R2时,会从上下两条链路分别发送,R1收到的路由信息翻倍,当路由条目十分巨大时会导致R2增加了性能负担。(此时应该选择用loopback接口建立邻居,保障bgp邻居可靠性的同时也不会产生过多路由信息)
②用loopback接口配置EBGP邻居
bgp 1
peer 2.2.2.2 as-number 2 使用环回口与as 2建立邻居
peer 2.2.2.2 connect-interface LoopBack0 指定向邻居发送BGP报文的源地址为loopback0的源地址。(默认的源地址时出接口IP)
peer 2.2.2.2 ebgp-max-hop 10 当EBGP邻居之间存在多跳时,指定EBGP邻居发送BGP报文的TTL值。 (仅在EBGP邻居使用,默认TTL=1;IBGP邻居默认TTL=255)
2、IBGP邻居:运行在相同AS之间的BGP邻居建立的邻居关系
IBGP邻居建立:
bgp 1
peer 2.2.2.2 as-number 1 使用环回口与as 1建立邻居
peer 2.2.2.2 connect-interface LoopBack0 指定向邻居发送BGP报文的源地址为loopback0的源地址。(默认的源地址时出接口IP)
IBGP邻居不用考虑TTL值,因为IGP默认TTL=255
BGP邻居的建立过程:
报文类型
OPEN报文
邻居建立和能力参数的协商(至少有一个地址族能力要一致。)
1、邻居参数协商
①自身AS号:要和邻居指定的AS号一致,否则邻居无法建立
②BGP router id:不能冲突,否则邻居关系无法建立
③hold time:邻居失效时间,默认是180s,如果不一致,则协商小的时间
④BGP version:默认目前运行的BGPv4,一般不存在版本不同的情况
2、BGP邻居能力的协议
①地址族协商一致,不一致导致邻居无法建立,默认IPv4单播地址族
②路由刷新能力,即手动触发更新能力
③是否支持4字节AS号的能力
keepalive报文
默认每隔60s周期性发送,如果180s没有收到keepalive报文,则认为BGP邻居失效,断开TCP连接
updata报文
BGP路由传递以及撤销
updata消息主要用来公布可用路由和撤销路由,Updata中包含以下信息:
①网络层可达信息(NLRI):用来公布IP前缀和前缀长度
②路径属性:为BGP提供环路检测,控制路由优选
③撤销路由:用来描述无法到达且从业务中撤销的路由前缀和前缀长度
router-refresh报文
用于手动进行BGP路由的触发跟新,或者用于ORF(依赖于路由刷新功能)功能
notification报文
通知报文用于报错,收到该报文只有一个结果就是断开TCP连接
邻居状态
邻居建立流程图:
BGP的TCP连接建立过程
查看是那个路由器先发起的TCP连接,因为BGP使用的179端口号是被动等待连接的,所以哪个地址后面跟着 :179 端口,就证明是被连接的一方
(下图是2.2.2.2路由器先发起的tcp连接,1.1.1.1路由器是被动接收 )
Idle(空闲)
Idle是BGP连接的第一个状态,在空闲状态,BGP在等待一个启动事件,启动事件出现以后,BGP初始化资源,复位连接重试计时器,发起一条TCP连接,同时转入Connect(连接)状态。
一直停在Idle状态的原因:
①没有去往邻居地址的路由,无法发起TCP三次握手,也无法完成TCP的3次握手。
②邻居发起的TCP握手,被本端拒绝,拒绝的原因是邻居发起的TCP报文的源地址,不是本端指定的邻居地址。
Connect(连接)
在connect状态,BGP发起第一个TCP连接,如果连接重试计时器超时,就重新发起TCP连接,并继续保持在connect状态。
如果TCP连接成功,就转入Opensent状态;如果TCP连接失败,就转入Active状态。
一直停在connect状态的原因:
①由于邻居缺乏到本端的路由,无法回复本端的TCP连接
②邻居的BGP进程还未启动,未开放TCP 179端口,导致邻居无法回复本端的TCP连接
③或者是应答报文中途被丢弃
Active(活跃)
当发送TCP连接的路由器,能收到相应的邻居应答报文,代表2台路由器能正常交互报文,但是依然无法建立起TCP的3次握手,将进入到Active,在Active状态,BGP总是试图建立TCP连接,如果连接重试计时器超时,就退回Connect状态。
如果TCP连接成功,就转入Opensent状态;如果TCP连接失败,就继续保持Active状态,并继续发起TCP连接。
一直停在Active状态的原因:
邻居之间地址可达,但建立的BGP邻居的源目地址不匹配导致。
Opensent
代表已经成功建立起了TCP连接,且发送了open报文给邻居,并等待接受邻居发来的open报文
Openconfirm
代表收到邻居的open报文,且发送keepalive报文,等待邻居发来的keepalive报文
Established(邻居关系已建立)
在这个状态中,EGP邻居关系已经建立,BGP将和它的邻居们交换Updata报文,同时复位保持计时器
- 63
- 0
-
分享