BGP产生原因
为方便管理规模不断扩大的网络,网络被分成了不同的AS(Autonomous System,自治系统)。早期,EGP(Exterior Gateway Protocol,外部网关协议)被用于实现在AS之间动态交换路由信息。但是EGP设计得比较简单,只发布网络可达的路由信息,而不对路由信息进行优选,同时也没有考虑环路避免等问题,很快就无法满足网络管理的要求。 BGP是为取代最初的EGP而设计的另一种外部网关协议。不同于最初的EGP,BGP能够进行路由优选、避免路由环路、更高效率的传递路由和维护大量的路由信息。
BGP介绍
BGP特点:
1.BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。
2.BGP能够承载大批量的路由信息,能够支撑大规模网络。
3.BGP提供了丰富的路由策略,能够灵活的进行路由选路,
4.并能指导对等体按策略发布路由。 BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。
5.BGP提供了路由聚合和路由衰减功能用于防止路由振荡,通过这两项功能有效地提高了网络稳定性。
6.BGP使用TCP为传输层协议,TCP端口号179。路由器之间的BGP会话基于TCP连接而建立
7.BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会周期性更新)。
8.BGP能够承载大批量的路由前缀,可在大规模网络中应用。
BGP对等体关系
与ospf,isis的邻居关系类似,但是BGP的对等体是基于TCP建立的所以相互建立BGP对等体的两台设备之间不要求必须直连,能保证互通即可。
BGP的对等体关系分为两种:EBGP(与本设备建立对等体关系的设备不在同一个AS内)和IBGP(与本设备建立对等体的设备在同一个AS内)
BGP对等体的建立过程
1.先启动BGP协议的路由器向对端发起TCP连接建立,使用TCP的179端口
2.双方TCP连接建立成功后相互发送Open报文携带参数,建立对等体关系
3.参数协商正常后发送keepalive报文,当收到对端的keepalive报文时对等体建立成功,之后就再特定的时间间隔发送keepalive报文保持连接
4.BGP对等体关系建立之后,BGP路由器发送BGP Update(更新)报文通告路由到对等体,然后对等体发TCP的ack报文进行确认
我也做了相应的抓包,进行分析
BGP报文类型
报文类型 | 作用 | 发送时刻 |
Upen | 协商BGP对等体参数,建立对等体关系 | BGP TCP连接建立成功之后 |
Update | 发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或路由变化时向对等体发送Update报文 |
Notification | 报告错误信息,中止对等体关系 | 当BGP在运行中发现错误时,发送Notification报文将错误通告给BGP对等体 |
Keepalive | 标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接 |
Route-refresh | 用于在改变路由策略后请求对等体重新发送路由信息。只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由 |
BGP状态机
Idle:启用BGP后开始准备TCP连接
Connect:在建立TCP连接的过程中,如果失败进入Active状态重试,认证是在本状态完成的。
Active:TCP没有建立成功,反复尝试
OpenSent;TCP连接已经建立成功发送携带参数的Open报文协商对等体的建立
OpenConfirm;参数协商成功,发送keepalive报文,等待对方的keepalive报文
Establish:已经收到对方的keepalive报文,之后就发送update报文通告路由信息
BGP对等体表
Peer:对等体ip地址
V:版本
AS:对等体的AS号
Up/Down:这个邻居关系up/down的时间
state:邻居状态
PrefRcv:prefix received,从该对等体收到的路由前缀数目
BGP路由表
Network:目的网络/掩码
NextHop:下一跳
MED:开销
LocPrf:本地优先级
PrefVal:优先级(华为私有)
Path:经过的区域(出区域的时候会加上本区域的AS号,入区域时不会)
Ogn;路由起源 i:由IGP协议生成(network) E:标识由EGP协议生成 ?:由其他方式引入生成(import)
与IGP路由协议不同BGP并不会发现路由只会将已经存在的路由注入到自己的BGP路由表中然后通告给自己的对等体。BGP可通过network和import两种方式注入路由
BGP通告原则
只发布有效且最优路由。
从EBGP对等体获取的路由,会发布给所有对等体。
IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体。
BGP同步规则指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它将不能使用该条路由或把这条路由通告给自己的EBGP对等体,除非它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。