BGP总结
http://bgp.potaroo.net:bgp信息更新网站
EGP能适用于AS之间传递路由,就分为2种:EGP,BGP(border gateway protocol),分v1,v2,v3,v4,v4+
bgp中对AS号的管辖非常严格,一个bgp上只能有一个进程,默认情况下bgp中igp的同步功能关闭;默认情况下自动汇总也是关闭的,但不是所有的IOS都是默认关闭的,若不知道,则在配置时,先将其关掉(自动汇总可能会导致主类边界,路由黑洞)
3个管理距离:外部(EBGP)=20,内部(IBGP)=200,local=200
neighbor后,会向neighbor发送TCP的SYN请求,若neighbor没有运行BGP就会回复TCP的RST消息
neighbor在BGP中的作用:
【1】向neighbor地址3次握手,目的ip:neighbor后的地址,目的端口:179(BGP端口号),源端口:随机,源ip:FIB出接口ip
【2】允许neighbor对自己的TCP179端口进行访问
BGP用TCP的原因:
考虑到TCP协议的优点:可靠(丢包低),安全(3次握手)稳定(慢)
BGP的特点:
【1】可靠性:利用TCP连接,有重传,确认和顺序等,有完整会话,可靠实现方法:ipv4中有:检测环路,使用过滤,检查下一跳,即使撤回对等体中不可达路由
【2】稳定性:原因:范围太大,不好掌控
最小宣告时间,路由衰减,软重置和路由刷新,不中断转发或优雅启动
【3】安全性
【4】可扩展性:对等会话数量和路由数量;路由反射和联邦是增强BGP网络的可扩展性的两个方法
【5】灵活性:基于属性的策略
BGP的核心:
bgp没有任何算法(没有数学理论依据),但BGP工作依靠的是其规矩
no bgp default ipv4-unicast后,不会主动进行3次握手
若想改变TCP的连接模式或者单向连接(控制bgp建立方向)
【1】可以过滤别人访问自己的179端口
【2】在neighbor后transport 后有connection连接方式(有主动建立和被动建立)
【3】默认路由也可能导致单向连接(bgp中不允许默认路由向neighbor发送TCP3次握手),但只要不是0.0.0.0/0的缺省就可以(有了默认是不允许主动3次握手,但可以被动响应)
【4】利用下面注意中的3中方法使其不能正常建立或者单向建立
注意:
【1】FIB没有路由不知道向那个接口发包,也不能建立邻居关系,因此必须要有路由,不管以何种方式学到
【2】为了增强稳定性,EBGP之间也可以用环回建邻,但是要注意TTL值要匹配,直连检测要通过,但是TTL值不影响建邻,但直连检测就影响建邻,打开ebgp的多跳,人为修改TTL值,neighbor X.X.X.X ebgp-multihop(直接回车,默认为255,且关闭直连检测);或者neighbor X.X.X.X disable-connected-check(关闭直连检测,不管TTL值),此命令之后,TTL值可能会变为255,可能为1;直连检测是判断发包的ip是否是自己的直连路由,不是就不发包,两端都要关闭
【3】此时还是不能建邻,因为自己是以接口ip访问对方,但对方允许的是我的环回访问他,两个不对应,需要改neighbor对象或者改更新源,neighbor X.X.X.X update-source lo0(改变自己发向neighbor的源地址)
show tcp brief
clear tcp tcb +tcb会话名
使用BGP的环境:
【1】ISP:因为不能写缺省,需要明细BGP路由
【2】有政治性任务:在特定区域需要临时Internet业务
【3】公司希望控制自己数据包的出口
每个BGP会主要用到3个进程:
show processes cpu查看运行的进程
【1】BGP I/O:主要记录输入输出,赴俄消息读取,对消息进行发送
【2】BGP router:BGP协议的主进行,主要进行邻接会话,更新路由表,发送路由uodate,铜鼓cli命令收集管理员的命令,执行相关功能
【3】BGP scanner(扫描):对BGP相关参数进行巡逻和监控,是3个中的一个周期性进程,每隔60s扫描一次,所以BGP路由慢,是主要原因
【4】BGP task(任务):有任务时才有
【5】BGP scheduler:有调度机制时会出现
【6】BGP event:event消息
BGP的3张表:
peer(邻居):show ip bgp neighbor(最全的,但太多了),show ip bgp summary(摘要信息)
database(BGP table):show ip bgp
路由表:show ip route bgp
在AS内部建立BGP的前提是要存在路由,不管是静态还是动态学习
在建邻的两端,只要一端有update-source就可以建立TCP会话,但一般建议两端都写,可以存在备份,一端出问题,另一端还可以建立TCP会话
在BGP建邻中,若neighbor两端的AS号一样时,TTL为255,没有直连检测;若neighbor两端的AS号不一样时,TTL为1,存在直连检测;因此存在IBGP和EBGP,存在的原因还是安全性,同一个AS,TTL可以大一点,可以不直连检测,不同AS时TTL小可以保证安全,也要直连检测,但这种可靠性只是邻居建立,和路由的可靠性恰好相反(因为希望能通过更好的方式(IGP)进行路由通告)
在BGP中,EBGP之间用直连建邻不需要改跳数和关闭直连检测;但用环回建立时要注意直连检测问题
关掉对等体命令:
neighbor X.X.X.X shutdown
BGP的数据报文:
open:type:1;version:4;my as;
hold time :180s BGP identifier:bgp router-id; 选项:所支持的IGP协议栈;用于建立邻居关系
keeplive:type:4;维持邻居关系,keeplive time 60s
update:type:2
notification:通告消息,通知邻居出错,type:3;错误代码,错误子代码
route-reflesh message:路由刷新,不是所有厂商都有
注意:
【1】BGP中的open和keeplive消息相当于IGP中的hello;open用来发现和建立邻居,keeplive用来保持邻居关系
【2】一个update消息一次可以只通告一条路由,携带多个属性;一个update消息一次可以通告多条路由,但他们的属性必须相同;一个update消息可以同时撤销多条路由(在update包中带一个withdrawn字段)
【3】只有BGP头部的报文是keeplive,其中有marker,type,length
BGP的有限状态机:
idle:在这个状态下路由器会查找路由表,看路由表中有没有我要建立邻接管理地址的路由,如果有的话就进行3次握手。如果没有的话会一直停在这个状态
active:BGP过程试图与邻居建立一个TCP连接,主动一方
【1】如果连接成功,BGP过程将connectionretyr计时器清0.完成初始化,给邻居发送open报文并转移到发送open消息状态,hoid time 4mins
connect:该状态下BGP过程连接,被动方
以下才是真正BGP消息,之前都是TCP消息
open sent :主动发的一方
open confirm:被动发的一方
establish:
建立BGP邻居的条件:
【1】有路由
【2】EBGP之间注意直连检测
open报文中:
【3】AS号必须正确
【4】version向下兼容,所以version不同不影响建邻
【5】hold time不管改没改,一直用双方协商小的那个,所以不影响建邻
注意:在time修改时,双方协商,协商后选择小的那个,keeplive不携带,协商后发现自己的keeplive time小于或等于hold time的1/3就不变,否则自动调为1/3,总之hold一定相同,keeplive不一定相同,且永远小于等于hold time的1/3;当hold time为0时,keeplive不再发送
【6】bgp router-id相同无法建立邻居关系
BGP中routing table version可以判断路由震荡,每有一次变化加加1,若变化太快则可能出现出现问题(show ip bgp时能看到)
BGP time:
bgp scan-time +time(5-60)
scan-time:扫描时间,默认60s;scanner
可以管理入向和出向,入向管理,下一跳等;出向管理,有无新增路由需要发送出去,属性有无变化
advertisement-interval:
neighbor X.X.X.X advertisement-interval+time
通告间隔,只有达到最小的通告时间间隔后,才生成更新,EBGP30s,IBGP5s
BGP connectretry:重连接计时器,默认120s,第一次60s,第二次120s,240,480……,不能改,只能由研发修改
注意:在做BGP时,先将路由做好,确定179端口是否能互访,之后再配BGP
BGP的路由引入:
network X.X.X.X mask X.X.X.X(必须和路由表中掩码相同)
在传递路由时,传递给EBGP时,下一跳会改为本地(邻居neighbor中的地址),传递给IBGP时,下一跳不变,若想变就用next-hop-self,想去谁,将将谁的neighbor