目录
BGP是什么
AS
EGP协议
IGP协议
EGP和IGP的区别
IGP协议追求
EGP协议的追求
BGP协议
BGP的特性
可靠性
可控性强
AS-BY-AS
具有丰富的属性来取代IGP中度量进行选路
默认不被用于负载均衡
不需要周期更新
无类别路径矢量
BGP数据包
Open
Keeplive
Update
Notification
BGP的工作过程
EBPG和IBGP
BGP路由黑洞
解决方法
BGP的防环机制
水平分割
EBGP水平分割-针对AS之间的环路
IBGP水平分割-针对AS内部的环路
配置
建立直连的EBGP邻居关系
建IBGP邻居
多条物理链路时建立EBGP邻居
BGP宣告
BGP是什么
无类别路径矢量型EGP协议、边界网关路由协议
BGP 是唯一一个用来处理像英特网大小的网络的协议,也是唯一能够妥善处理好不相关协议间的多路连接的协议。 BGP 构建在 EGP 的经验之上。 BGP 系统的主要功能是和其他的 BGP 系统交换网络可达信息。网络可达信息包括列出的自治系统(AS)的信息。这些信息有效地构造了 AS 互联的拓扑图并由此清除了路由环路,同时在 AS 级别上可实施策略决策
AS
在互联网中,有一个个自治系统,然后这个自治系统有唯一标识得编号AS
AS标准编号16位二进制 0-65535
1-64511 公有
64512-65535私有
还有扩展编号同样是32位2进制
每一个互联网用户都在AS内,比如说你使用电信,那你就在电信的AS中,然后要和其他运营商的网络通讯那样就会用到BGP
(CIDR Report可以查看AS号的网站)
EGP协议
EGP被称为外部网关路由协议 只有两种协议EGP、BGP,BGP 构建在 EGP 的经验之上。
IGP协议
IGP被称为内部网管路由协议 rip ospf之类的
EGP和IGP的区别
IGP协议追求
无环(选路佳)
收敛快
占用资源少
EGP协议的追求
可控性强
可靠性
AS-BY-AS
BGP协议
在中国每个运营商都有自己的AS号,那么他们之间要相互沟通,他们之间肯定需要设备保证通讯,这台设备单独属于那个运营商,另外一个运营商都会不满。所以需要解决这个设备的归属问题
这就需要中间放两个设备,一个设备在电信一个设备在联通然后两个设备之间用BGP然后靠BGP传输路由。BGP就可以在两台设备上运行传输相应的路由,注意BGP没有算法,而是转发本地路由表中来自其他协议生成的路由条目;AS之间正常存在大量的BGP邻居关系,且BGP协议不会计算最佳路径;因此在BGP协议中管理员需要进行策略来干涉选路;
BGP的特性
可靠性
BGP协议设备间需要交互大量的路由条目,但又不能选择周期更新来占用链路资源,故只能进行触发更新;且BGP协议工作环境中为节约成本,必然出现非直连需要建立邻居关系,也就是单播邻居。BGP基于TCP工作,这样可以保证BGP的可靠性,tcp只能单播,基于TCP 179端口工作
可控性强
BGP协议主要负责搬运IGP协议产生的路由,类似多点双向重发布,对选路不做计算所以需要管理员大量手工的干涉选路。所以需要可控性强。BGP承载于IGP上。
AS-BY-AS
BGP里面是一个AS到一个AS。可以类比RIP协议以路由作为一跳,一跳到一跳
具有丰富的属性来取代IGP中度量进行选路
多个参数控制协议(ospf等协议选路考的是度量,BGP没有度量选路靠的是各种属性,不计算路由,是比一些值,直接选)
默认不被用于负载均衡
通过各种选路规则仅仅产生一.条最佳路径(BGP每一个圈都是一个as传输路由对每个as内部的路由有多复杂不知道,所以负载均衡不可取,和ospf和rip不一样他们之间的那个圈都是路由复杂不复杂一下就能看出来,人为可以负载均衡但是要确定路是一样长的)
不需要周期更新
BGP之间不是周期更新,BGP传输的AS之间的路由动辄好多条,次次周期更新太麻烦了,占用资源也高
无类别路径矢量
距离矢量的升级版--AS--BY--AS(共享路由带掩码,公网汇总会汇出超网)
BGP数据包
BGP基于TCP的179端口工作;故BGP协议中所有的数据包均需要在tcp会话建立后
BGP通过TCP的会话来进行传输及可靠性的保障
首先通过TCP的三次握手来寻找到邻居
Open
仅负责邻居关系的建立,正常进收发一次即可;携带route-id;这个rid可以各两个一样,但是还是建议rid全网唯一,他们之间不传拓扑只穿路由
Keeplive
保活
邻居刚建好的时候会很快的发几个,然后才是一分钟一个
周期1min查询邻居关系是否存在;实际保活TCP会话;holdtime默认3min,死亡时间3分种,三分钟没有发数据,会话就断了,邻居也就断了,tcp会话在邻居关系就在
Update
携带路由条目
目标网络号+各种属性
tcp会保证所有包的可靠性
Notification
出现错误数据时收发
(对比一下ospf协议,BGP没有hello包,没有hello包因为靠的是tcp,tcp可以建立就代表可以建立邻居关系,tcp三次握手相当于hello包的发现功能)
BGP的工作过程
BGP没有算法
启动配置完成后,邻居间基于tcp的179端口通过tcp三次握手建立tcp三次会话,(邻居间已知对端单播地址,地址可达,BGP承载于IGP上首先内网要通)会话建立后,所有BGP数据包全部局域TCP会话进行传递和可靠性保障,邻居间正常只收发一次open报文交互RID,相互认识,建立邻居关系,生成邻居表。邻居关系建立后:正常每一分钟发一次Keeplive包周期保活tcp邻居建立后是没有任何路由,是之后管理原根据网络实际需要,选者性将本地路由表中通过任何来源产生的路由条目。宣告到BGP协议,由BGP通过更新包UPDATE共享给所有BGP邻居然后会生成一个BGP表,这个表装载本地发出及接受到的所有BGP路由,仅将本地BGP表中最优(属性最好)路由条目加载于本地路由表中,选路不一定最优,这个选路仅仅基于BGP选路规则;默认不支持负载均衡无周期,只有keeplive保活
EBPG和IBGP
EBPG不同AS之间的BGP
IBGP同一个AS的BGP
下图有例子
BGP路由黑洞
上图做为例子来解释
看C和D他们不运行BGP,F传路由给E,E传给B的时候经过D和C,但是D和C不运行BGP,所以没有去往A的路由,然后F传给A的信息就会被C和D丢掉,C和D就成了黑洞
总结
BGP可以非直连建邻;从所有运行BGP协议的路由器路由表来看,目标可达;
但当流量正在转发时,流量需要经过下一跳转发,中间只要经过未运行BGP的路由,就没有去往目标网段的路由,就会产生路由黑洞
解决方法
BGP之间连接一个物理线
缺点
成本高
B和E之间来一个tunnel
转发效率低
设备所有设备运行BGP
成本高
将BGP的路由重发布一下
也不合适
BGP的路由太多,导入到小路由将会出现问题,实验环境可以尝试,真实环境不建议
MPLS多协议标签交换
下一章内容
MPLSvpn
这个VPN和专线最想的一个
BGP的防环机制
水平分割
EBGP水平分割-针对AS之间的环路
产生环路的条件
以上面的图片作为例子一号AS的路由传给二号AS再传给三号AS的路由再传回一号路由,这样就成环了。
解决方法水平分割
BGP的路由条目中携带者众多参数,包裹各种BGP属性;其中有一种AS-pash属性
该属性用于记录该路由条目经过过的所有AS编号,然后这个路由从那发出来的再回去是看见AS编号,就会发现这个条路由是自己发过的
该属性用于记录该路由条目经过过的所有AS编号;若BGP协议学习到一条路由,属性中包含了本地的AS号,将拒绝接收
IBGP水平分割-针对AS内部的环路
IBGP路由在AS内部传输时属性不变
本地从一个IBGP邻居处,学习到的路由,不得共享给本地的其他IBGP邻居
以下图作为例子,A传一条路由给B,B传一条路由给D,但是B不可以将这个路由传给E,想传的话B和E需要建立IBGP邻居关系,这样要想正常传输路由的话,就绪要每两个路由之间都要有IBGP邻居关系,这个样子IBGR的邻居关系数量随BGP运行设备的数量指数上升,配置量极大,后期可以有条件的打破IBGP水平分割规则:联邦路由器反射器
配置
以这个图作为例子
首先配置好IP,和IBGP
然后开始配置BGP,BGP邻居关系建立,与路由条目宣告是分开的配置的
建立直连的EBGP邻居关系
R1和R2建立直连的EBGP邻居关系
[r1]bgp 1 这个1是AS号不具有本地意义
[r1-bgp]router-id 1.1.1.1手写rid,建议手写,不手写的话,会自动生成,生成方式和OSPF一样
[r1-bgp]peer 12.1.1.2 as-number 2 告诉要建的邻居接口号,再告诉AS号
要建的话双方都要建下面配置R2
[r2]bgp 2
[r2-bgp]router-id 2.2.2.2
[r2-bgp]peer 12.1.1.1 as-number 1
建邻居配置完成后邻居间三次握手开始建立tcp会话
其实不止进行了三次握手,而是六次,是双方都进行了三次握手,总共六次,然后是产生了两条tcp会话,但是两条没有用,所以会断开一条,rid小的对rid大的请求的那条将会被断掉
[r2]display tcp status 查看tcp会话已经出现先了tcp会话
会话建立,open报文收发一次,邻居关系建立
[r2]display bgp peer查看bgp邻居
peer字段代表是那个邻居
V代表版本
AS代表这个邻居是那个AS中的
MsgRcvd我从邻居这收了几个包
MsgSent我给这个邻居发过去几个包
OutQ策略
Up/Down连接建立多长时间
State表示现在的连接状态,只有两种状态建立,或者正在建立中
PrefRcv显示现在这个邻居给我发了几条路由
建IBGP邻居
R2和R3建立IGBP
注意在真实环境中,R2和R3之间的路径会很复杂,不会出现如此简单的一条直线路由,可能会出现很多条路,所以如果只用接口之间的路由是不是就只锁定了一条路,这条路断了就g了,其他几条路也是不是浪费了,所以建议用路由上的环回建IBGP邻居
配置
[r2]bgp 2
[r2-bgp]peer 3.3.3.3 as-number 2
[r3]bgp 2
[r3-bgp]router-id 3.3.3.3
[r3-bgp]peer 2.2.2.2 as-number 2
这个时候邻居关系没有建成
因为R2和R3的环回建邻,目标IP是对方的环回但是源是自己的接口IP,对方回包的时候目标是你的环回,但是源是3的接口IP,对不上,所以要改,源改成环回接口
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 在我和3.3.3.3建立的时候用我的环回0作为源IP
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
多条物理链路时建立EBGP邻居
同理R3和R4之间也是一样
直连的EDGP上存在多条物理链路时R4和R5之间相连
然后想要使用R4和R5之间的两根线,这个情况和R2、R3之间真实情况一样了,所以也用环回来建邻居,但是首先需要R4的环回和R5的环回是通的,所以需要先配置两条静态路由
[r4]ip route-static 5.5.5.0 24 45.1.1.2
[r4]ip route-static 5.5.5.0 24 54.1.1.2
[r5]ip route-static 4.4.4.0 24 45.1.1.1
[r5]ip route-static 4.4.4.0 24 54.1.1.1
然后用环回开始建邻
[r4]bgp 2
[r4-bgp]peer 5.5.5.5 as-number 3
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r5]bgp 3
[r5-bgp]router-id 5.5.5.5
[r5-bgp]peer 4.4.4.4 as-number 2
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
这个配置配置完后它的配置还是不成功,原因是因为,当时设计的时候,这个IBGP的包的ttl是255
EBGP的ttl是1,这个是保障R4和R5之间是直连,你可以在R4和R5之间直接建邻,但是不可以用环回,因为只有1的TTL跳一下就死了。要想用环回建邻,就需要修改TTL
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2
[r5-bgp]peer 4.4.4.4 ebgp-max-hop 2
BGP宣告
然后就可以开始宣告问题了
运行BGP协议的路由器可以宣告本地路由表中通过任何协议获取到的路由条目—静态、IGP、直连; 而本地通过BGP协议学习到的路由,只要在本地依然优秀,将继续将向本地的其他BGP邻居传输
(注意:宣告时,宣告的条目必须同本地路由表中的记录完全一致)
宣告1.1.1.0这个网段
[r1-bgp]network 1.1.1.0 24
[r1-bgp]display bgp routing-table 查看BGP路由
状态-- * 可用 > 优秀 *>同时存在—可以加表(路由表) 代表可以传递(传递给
本地的其他BGP邻居)
状态i若出现i代表该条目是本地通过IBGP邻居学习到的
然后查看一下R2的BGP路由表
在查看一下3的BGP路由表,发现不优秀,原因有一个同步问题,但是第四版本的BGP已经关了,同步问题:本地通过IBGP邻居学习到的路由,必须本地同时通过IGP也学习到,才能优秀。还有一个IBGP的传递属性不变,然后到了路由R3的时候下一跳不变R3没有去往12.1.1.1的路由。
配置
[r2-bgp]peer 3.3.3.3 next-hop-local 和2说一声传递路由给的R3的时候下一跳是本地
然后再给2和4建邻
[r2-bgp]peer 4.4.4.4 as-number 2
[r2-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[r2-bgp]peer 4.4.4.4 next-hop-local
[r4]bgp 2
[r4-bgp]peer 2.2.2.2 as-number 2
[r4-bgp]peer 2.2.2.2 connect-interface LoopBack 0
然后宣告4和3的环回
然后当R5传递给R4还是会出现问题
因为写了一条去往5.5.5.5的静态,然后就是产生了一个悖论,我要和5.5.5.5建邻,所以我写了一条去往5.5.5.0的静态,然后把邻居建立起来以后你又给我传递一条5.0路由
思科解决方案,路由可以传但是不可以,本地加表
华为是不可以传
但是再实际工程中这个问题不需要解决,原因,传递的路由时用户和建邻的接口不同
要是硬想要传5.5.5.5路由那就修改静态将传递过来的路由和自己写的静态不相同
[r4]undo ip route-static 5.5.5.0 24 45.1.1.2
[r4]ip route-static 5.5.5.5 32 45.1.1.2