设为首页收藏本站language 语言切换
查看: 6857|回复: 9
收起左侧

[原创] CCXX-个人吐血BGP经验总结(上)

[复制链接]
发表于 2011-7-4 16:06:20 | 显示全部楼层 |阅读模式
BGP
简介
BGP 属于路径矢量协议
他和距离矢量路由协议的区别是 :
距离矢量强调的是一个距离,即下一跳路由器,因为一台路由器下一跳地址总是他的邻居路由器
路径矢量强调的是一个下个AS,即下一跳AS。他的选路也是基于AS
不同的ISP之间有不同的AS号,不同的AS主要目的是基于管理,电信和网络各自管理各自AS内部的IGP,而AS和AS之间的路由则基于BGP,同时也是为了减少路由条目。
BGP更新利用 TCP 端口179 所以更新是可靠的更新
基础概念
一些名词
peer=neighbor
Bgpspeakers= 运行BGP的路由器

BGP管理距离   
IBGP 200      IBGP是就是同一个AS之中建立的bgp邻居关系
EBGP 20       EBGP就是在不同as之间所建立的bgp邻居关系

用EBGP是为了提供AS之间的路由,单既然用IGP就可以在一个AS内部通告路由问什么要再搞个IBGP出来
答:IBGP的作用就是为了在同一个AS内的边界路由器上互相通告更新信息,必须有个机制能让同一个AS内的BGP路由器来互相通告更新信息


BGP中的建立邻居不需要有直连的链路(这点和IGP的不同)原因是BGP使用的TCP协议,TCP是个点到点的协议他不支持组播,所以他是单播的,单播是可以被路由器转发的。由此我推理出BGP的所有报文都是单播的,因为他的邻居不直连所以无法通告组播来传递

BGP是路劲矢量协议凡矢量协议必有水品分割,BGP的水品分割分为EBGP和IBGP的水品分割
EBGP水平分割: 主要依赖AS号来防止环路(例如从某个EBGP邻居学到路由会再通告给此邻居通告命令sh ip bgp nei x.x.x.x advertised-route 查看,单对方不会接收而已),在路由被传播过程中每个传播者都加入自身的AS进去.(AS是bgp的属性之一)
IBGP水平分割:  默认的通过IBGP学到的路由不会再通告给其他的邻居,所以必须保证网络是全网状的或者通过其他手段来通告给其他IBGP)BGP的边界网关路由器从EBGP学到的路由通告给IBGP的邻居,通过IBGP接收到的路由的路由器默认不再通告给其他IBGP邻居了,所以要保持一个full mesh接口,(但是如果此路由器也是BGP的边界网关路由器,则可以通告给其他的EBGP邻居)有个例外是通告的路由如果不在路由表中的则不会通告此路由


BGP的route-id 建议和OSPF的一致不然会出问题
BGP的用环回口建立邻居的时候 neighbor x.x.x.x update-source 虽然理论上只要一边设置就可以但是建议两边都设置
BGP的 neighbor 和network 是分开的 neighbor 命令用来建立邻居,而network命令仅用来传路由(通告路由)

BGP中三张表? BGP表是什么?
答 1 路由表,bgp表,邻居表  2 sh ip bgp 可查看被注入(用network命令)BGP的路由

BGP默认不负载均衡

BGP传播和下一跳;
BGP传播的是AS的路径,所以实际的下一跳地址是通告AS路劲的bgp路由器,不像IGP总是相邻的邻居路由器,所以必须保证通过递归让bgp路由器能有下一跳地址。但是不建议用IGP或者用静态来做,推荐用 next-hop-self
原理是改变边界bgp路由器传给IBGP时路由的下一跳地址是自身的接口地址,因为可以通过IGP来到达.

BGP报文
OPEN报文 三次握手建立邻居关系  
keeplive报文 维持keeplive状态 60秒/次 dead-interval 180秒
update 传输BGP路由更新
notification 通告 当错误发生时  比如AS指向错误
OPEN报文:协商邻居关系的条件
包含 hold time 和BGP router-id (Router-id 选取和OSPF一致 手工>环回>物理接口 & 地址高>地址低)

BGP的重定向:
在多路访问网络中的一台 AS边界路由器从EBGP邻居那收到一个数据包如果要通过同一个接口再转发到另外一台IBGP邻居那里,那他就会触发一个ICMP重定向,把更优的下一跳地址告诉EBGP邻居,即EBGP邻居的路由表内路由指向的下一跳直接为更优的IBGP邻居的接口

BGP 同步和规则:
基本规则
、由eBGP邻居学来的信息肯定会传给另外的eBGP邻居。
2、由eBGP邻居学来的信息肯定会传给iBGP邻居。
3、由iBGP邻居学来的信息不会再传给另外的iBGP邻居。
4、由iBGP邻居学来的信息:
1)如果同步关了,会传给eBGP邻居,前提是通过递归有下一跳的出接口(下一跳地址可达)
2)如果同步开了,先查找自己的IGP。如果IGP里面有这个网络,就把这个网络传给eBGP;如果IGP里面没有这个网络,就不会 传给eBGP邻居。

BGP同步
所谓 BGP同步是指 从IBGP学到路由传给EBGP邻居时的规则
在开启同步情况下, 要求IBGP学到的路由必须是IGP也学到的(静态也算),才会传给ebgp邻居
而 关闭BGP同步则是,只要我IBGP学到的路由,这条路由在路由表内有(即下一跳地址可达),我不管他是静态的还是实际可不可达的,我都传递给EBGP。

BGP同步的作用是防止,在一个AS 中因为有被隔开的(没有通告BGP的路由),导致黑洞.
一般在高版本的路由器中 默认是关闭同步的,因为我们有很多种方法去解决同步问题


BGP同步是IBGP才有的
用静态或者IGP来获得下一跳 不建议这么做,建议用 nei x.x.x.x next-hop-self

社团属性
所谓社团属性
他是可选的: 路由器有可能不识别此属性(思科默认情况下)

他的传递性:(就是一跳) 社团属性值仅在neighbor后的邻居有效,邻居收到后默认不再穿这个属性给他的邻居,除非他自己也使用启动命令
      
启动命令: neighbor x.x.x.x send-community
调用命令:在启动命令之后用route-map去调用 列:nei x.x.x.x route-map x out (必须先启动后再调用不然不生效)

    not-advertise   不通告
    not-export      不通告给其他大AS(公有AS)
local-as        仅通告给联盟内小AS(联盟内的AS)

解决IBGP水品分割
1 full mesh
2 路由反射器
3 联盟

路由反射器规则
所谓路由反射器 实际就是典型的 服务端,客户端 S/C结构
路由器翻身器称为RR
通用规则
全反射(会反射给通告给我的人)
1 从客户端收到的路由会进行全反射
2 从EBGP邻居收到的路由进行全反射
3 从非客户端的IBGP邻居收到的路由不反射给其他的非客户端的IBGP邻居
命令:
nei x.x.x.x route-reflect-client 2层含义 1 设置自己为路由反射器服务端 2设置邻居为路由反射器客户端,如果neighbor是 peer-group成员则必须在peer-group中配置

联邦
概念 把一个大AS分成若干个小AS(私有AS),在小AS之间通过联邦的EBGP关系互联,所有联邦成员都必须通告自己的大AS号,联邦的EBGP邻居间要peer互指对方小as号,来互相告知对方与自己处于同一个联邦内.(联邦的IBGP邻居不需要互指)
命令
互相nei 小as号
联邦内的ebgp邻居用环回口建立邻居别忘记 multi-hop 多跳
bgp confederation identifier {公有AS}所有联邦成员必须申明公有的AS号
bgp confederation peer {联邦内EBGP邻居as}联邦内ebgp关系邻居通过peer互指对方私有as来互相告知同处于同一联邦(联邦的ibgp邻居无需告知)

BGP重分布和自动汇总
1 默认不开启自动汇总
2 如果开启自动汇总,BGP的自动汇总 只在将某种路由 重分布进 bgp中才发生
3 重分布的时候开启自动汇总则通告的路由都是主类掩码,通告路由的下一跳地址都是自己,且metric为0)(在IBGP内)
4 重分布的时候关闭自动汇总则通告的路由都是精确路由,通告路由的下一跳地址为路由表内的下一跳地址,自身直连的路由下一跳才为自己(0.0.0.0)并且明细路由的metric和路由表内相同。(默认的在IBGP域内有metric,在EBGP内无metric)
5 no auto-summary 做重分发的时候 应为明细路由有下一跳地址,所以虽然他会通告这些路由出去,但是如果邻居接受路由的接口就是这条明细路由的下一跳地址(即这条路由就是邻居传给我的),此邻居不会把此路由表放入BGP表(不然就成环路了),自然也不会通告给他的EBGP邻居。

源属性:
i AS内部的,属于AS内部路由器network
E 从EGP分发到BGP中的
? 从其他协议分发到BGP的

AS范围:
公有AS  0~64511        (需要申请的)
私有AS  64512~65535
(私有AS 是65535个AS中最后1024个,可以随便你使用的本地有效的)

BGP具体汇聚
与auto-summary差不多的但是bGP中交汇聚
BGP的汇聚,也是把多条路由汇聚成一条路由目的肯定是减少路由表的条目
汇聚方法
1 利用bgp的network 通告的是路由的特性,写一条静态的汇总路由,然后指向一个空接口,因为自身的明细路由掩码大于汇聚路由的掩码,所以这样既防止了黑洞,又汇总了路由.
步骤: 手工写一条静态汇总理由,null0,在network中通告.
缺点不灵活不能抑制明细路由

2 aggregate 汇聚
首先 通告明细路由
然后 aggregate-address 汇总地址/掩码 | {summary-only}|{suppress map} {as-set}
备注 aggregate-address必须至少汇总地址范围中包含有network中至少一条明细路由他才会传

{summary-only}(仅传汇总路由会抑制掉明细)
{suppress map} (可选参数 抑制列表 通过一个route map列表来抑制某些路由,即传汇总路由同时可选择的同时传送明细路由 要硬清才可以生效
做汇聚后本地会产生一条nullo的路由防止环路
{as-set}在汇聚路由当中添加原明细路由的某些属性(比如AS号用来防止黑洞,比如 起源属性i E ?) (如果是本地聚合的就不需要此命令了)

BGP建立邻居失败如何排错
IDLE和ACTIVE如果长期停留就是不正常状态

IDLE : IDLE就是没有到达邻居的路由

IBGP 可能是由于没有到达邻居的路由
1 nei地址写错了
2 nei了环回口但是没起IGP邻居不可达
EBGP中
除了IBGP常见问题外最常见的就是 nei 环回口,但是没有 用命令 nei x.x.x.x EBGP-multihop 导致跳数不够

ACTIVE :ACTIVE 是有达到邻居但是发送open报文后没有收到回包

发送open报文但是没有收到回包就会循环与active和idle之间
1 nei 了环回口 但是没有用命令 nei x.x.x.x update-source lo1 导致源出错
2 回包一方没有路由
3 nei 错了地址导致没有回包
4 AS号不匹配  (2台路由器之间 要么是 IBGP要么是EBGP关系 同AS就是IBGP,不同AS就是EBGP,不管他是什么关系,他发的open报文中的remote-as必须和邻居本地的as号匹配,否则也建立不起邻居)
发表于 2011-7-6 11:04:04 | 显示全部楼层
沙发 2011-7-6 11:04:04 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2011-7-6 17:35:21 | 显示全部楼层
板凳 2011-7-6 17:35:21 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2012-5-4 11:20:27 | 显示全部楼层
讲的很详细
地板 2012-5-4 11:20:27 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-6-11 15:52:23 | 显示全部楼层
谢谢分享
5# 2013-6-11 15:52:23 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-6-11 16:05:53 | 显示全部楼层
6# 2013-6-11 16:05:53 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2013-8-11 20:26:13 | 显示全部楼层
7# 2013-8-11 20:26:13 回复 收起回复
回复 支持 反对

使用道具 举报

发表于 2015-5-12 01:38:55 | 显示全部楼层
我靠,这也太详细了吧,必须顶,午夜调试中
8# 2015-5-12 01:38:55 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-26 23:25 , Processed in 0.086776 second(s), 22 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表