1,防环/黑洞/同步/全互连(为出现大于号,现在通常都是要下一跳可达+关同步)
a)EBGP邻居传来的路由可以通过AS_PATH防环,所以收到的不会有问题,因此直接是优化的(>),也就是直接装表、再传给EBGP邻居或IBGP邻居。
b)IBGP邻居传来的路由由于是在同一个AS,所以没法通过AS_PATH防环,于是BGP规定IBGP只能传一跳。
c)BGP还有2个问题。 问题一:BGP规定从EBGP学到的路由,传给IBGP邻居,不改变下一跳。这样通常对AS内部路由器来说,这个下一跳地址是不可达的。 问题二:由于水平分割,IBGP邻居只能传一跳,所以设想就是把2个IBGP建立在网络边缘。但是中间的路由器成了黑洞。(简而言之,即IBGP下一跳可达性问题,以及路由黑洞问题,只有解决这2个问题后IBGP传来的路由才是优化的)
d)典型的组网变成下图所示。假设图中A宣告一条路由dest,传给B,B直接是优化的,正常装表并传给E。问题一就是E收到这条dest路由时,下一跳是A的地址,这地址是AS外的地址通常是不可达的。问题二就是中间的C和D并不知道这条dest路由。(再强调下,EBGP传来的直接就是优化的,能够直接装表并往下传)
e)这时路由器E怎么办呢?BGP规定只有解决了这2个问题,E收到B(IBGP邻居)传来的dest路由才是优化的(>),才能正常装表,并传给F。(否则不是坑了F么,不解决的话自己内部都还没法访问这条dest路由)
f)问题一的解决方法:B对E说next-hop-self,把下一跳改为自己;或者是,E写一条关于下一跳地址的静态路由,使得下一跳可达。问题二的解决方法:将BGP路由重发布到IGP中,使得AS65102内所有的路由器都知道dest这条路由。这个重发布只能在B上做,因为B关于这条dest是优化的,E上的这条dest是非优化的。
g)重发布让IGP内部的路由器不堪重负,因为可能C和D后面还接着很多路由器,但实际上假如这条dest路由只是想借道65102去往65103,65102内部的很多路由器无需知道这条路由。于是问题二可以不去解决,直接在E上把同步关掉即可,这样,E上的这条dest路由也能有>号,并且正常装表并传给F。(别忘了关同步只是解决问题二,要想出现大于号,问题一还是要照样解决的)
h)下一跳可达,关掉同步后,2个问题解决了,路由层都优化了,可以正常在传递了,但有什么问题呢?在传递数据时,C和D又变为黑洞了,怎么解决呢?需要依靠所有路由器运行IBGP并fullmesh或者MPLS。
i)总结IBGP路由层面打通方法:下一跳可达+开同步+BGP重发布进IGP;下一跳可达 + 关同步。(即IBGP邻居传来的路由优化的条件)
j)总结IBGP数据层面打通方法:下一跳可达+开同步+BGP重发布进IGP;下一跳可达 + 关同步 + All run and fullmesh/MPLS。
详见2-5。
1.1,防环
EBGP的水平分割:AS之间的防环,路由器不收带有自己AS号的路由更新。(控制层面)
IBGP的水平分割:从IBGP收到的路由不会通过给另一个IBGP。(控制层面)
RR的防环:RR打破了IBGP只传一跳的规则,所以需要通过cluster-id防环
1.2,黑洞
由于防环机制的存在,BGP中间途径的路由器不会获知外部的路由。
黑洞举例:假设(A)-EBGP-(B-C-E)-EBGP-(F),B和E建立IBGP,此时A ping F不会通,因为A查去往F得仍给B,B查去往F需要扔给E(假设E开了nexthopself),递归查找经过C/D去E,但包到了C/D后就丢弃了,因为C/D没有路由去往F。
1)AS65101中的路由条目传到AS65103
EBGP:AB,EF。 IBGP:BE
控制层面:ABEF
数据层面:FE,到D和C会被丢弃
2)解决方法
物理线路full mesh(关同步):不会用,代价贵,都直连了有路由
逻辑线路full mesh(关同步):全连接,所有路由器运行BGP并运行BGP,即BCDE全部建立BGP邻居关系(无需直连),可以用RR,联盟
重发布(开同步):将BGP重发布到IGP,只能实验环境做,实际中要想这么做只能通过ACL导一部分
MPLS(关同步):BGP内部通过标签走,不通过路由走,实际上就是利用了CEF解决递归查找的功能
3)BGP路由黑洞,C和D能传BE之间的路由,但是不能传数据,这是因为:
控制层面源目的在变,分为三段(源A到目的B,源B到目的E,源E到目的F,每一段都有路由),通过TCP传路由。
数据层面源目的不变,源F目的A,中间C和D没有路由
1.3,同步
BGP的同步:为了确保宣告出去的路由都不会有黑洞问题,开启同步后,BGP只会将IGP和BGP同步后(通过重发布)的路由宣告出去,即宣告的路由不可能有黑洞。
现在,思科路由器默认禁止同步。
1.4,全互连
要所有路由器都能更新路由,所有经过路由器运行BGP并且full mesh,full mesh只需路由可达,无需直连。
不是全互联,可能导致两个问题:1,更新发不过去,例如防环中的那个例子。2,更新发过去了,但数据包过不去,例如黑洞例子。
2,BGP建邻居配置命令
2.1,基本三步,邻居三步
基本三步:router-id,no au,no sy (高版本后2步默认已经有)
邻居三步:neighbor,update-source,multihop(EBGP)/next-hop-self(IBGP)
备注:
neighbor语句中,后面的地址是端口地址,不是路由器的Router-ID。
邻居三步,如果EBGP用直连建立,则只有neighbor;
邻居三步,如果EBGP邻居一边用环回口,一边用物理口,则用物理口的那边需配multihop,用环回口那边即使不声明updata-source l0也行,因为BGP的TCP连接只需要一边发起能通即可。
邻居三步,如果IBGP用连接骨干网的物理口建立,则只有neighbor和next-hop-self(不用update-source是因为物理口已经被宣告进IGP),甚至如果IGP中有到EBGP直连口的路由,则只有neighbor。
邻居三步,如果IBGP用环回口建邻居,则要包含三步,其实update-source只要一端声明也可建立连接。
2.2,命令说明
1)no auto-summary
把任何一种协议重分布的BGP中时,如果默认是auto-summary时会发生自动汇总
仅仅是发生在重分布的时候,其他情况与汇总无关
自动汇总:汇总成一个主类网络,现在一般都关,都无类了
下一跳0.0.0.0代表是自己发出的
把协议重分布到BGP:
auto-summary:不携带原有的下一跳和metric,自动汇总成主类
no auto-summary:携带原有IGP的下一跳和metric,不会自动汇总
2)update-source
BGP无法像IGP那样自动发现邻居,需要由BGPneighbor手工指定,该命令默认源IP(更新源)是出接口IP。
IBGP建立邻居用环回口时,需要更改update-source
EBGP建立邻居用环回口时,需要调整update-source、multihop
实际上建邻居连接只需要保证一方满足。
两边都是默认路由无法建立邻居(为了防环),一边静态一边默认可以建立邻居。
3)next-hop-self
当从EBGP对等体学到的路由,传给IBGP对等体时,不会改变原来的下一跳,而这个下一跳对于内部网络来说,很可能不可达。
解决方法:使外部EBGP更新源接口可达,或者用next-hop-self更改更新源。一般都用后者。
4)ebgp-multihop
用于EBGP,配合update-source命令,通过环回口建邻居。
EBGP默认只能1跳,所以如果EBGP用环回口建立邻居,需要更改为多条。(IBGP默认就是多跳,无需此命令)
3,MA网络中,BGP下一跳的特列
34之间EBGP邻居,4访问2的下一跳会更改为1
ICMP的重定向:3发现接口收到的报文又从该接口发出去了,就会发起ICMP重定向
4,BGP路由通告
a)当存在多条路径时,BGP路由器只选最优(没有负载均衡情况下)
b)BGP只把最优路由传递给BGP peer
c)从EBGP邻居学到的会向所有BGP邻居通告(直接是优化的,包括EBGP邻居和IBGP邻居)
d)从IBGP邻居学到的不会向IBGP邻居通告(为了防环,RR除外)
e)从IBGP邻居学到的只有优化了才能往EBGP邻居传(重发布,或者关同步,但关同步会产生的黑洞,解决方法见1)
假设R1从邻居学到路由,传递情况如下:
|
从R2(IBGP邻居)学到
|
从R4(EBGP邻居)学到
|
传给R3(IBGP邻居)
|
不传
开RR时能传,(但GNS实验发现传的时候下一跳不变,nexthopself也没用,只能依靠IGP到达R2了)
|
1)传,next-hop仍然R4。不优。
2)需静态或nexthopself,并关同步或重发布后变优。
3)如果关同步还需fullmesh/RR解决黑洞问题。
|
传给R5(EBGP邻居)
|
传,next-hop变成R1。
直接是优化>,装表往后传。
|
传,next-hop变成R1。
直接是优化>,装表往后传。
|
另外,如果把R4(EBGP邻居)学到路由重发布到IGP,只能在R1上做,R1是优化的,R2和R3都没有大于号。
凡是IBGP邻居传来的路由,即使IBGP邻居是相邻的,该路由也是不优的,必须关闭同步才优。
5,BGP的auto-summary与aggregate
BGP开启auto-summary时,可以network主类路由,路由表中一旦有该主类下的明细路由,主类路由就会被宣告给对方,否则BGP必须要路由表中有路由时才会被宣告给对方。
auto-summary命令作用的对象:(1)重分布进bgp的igp或(2)直连或(3)静态路由,应该还有(4)通过IGP学到的路由。如果这些路由是子网路由,在进bgp表时将被自动汇总成有类路由条目。
auto-summary命令不作用的对象:(1) network通告的路由,(2)ibgp或ebgp邻居通告的路由,如果是此类产生的路由,在show ip bgp表中将是子网路由,这些路由再通过ibgp或ebgp通告给邻居时,根据此原则,无论邻居是否启用auto-summary,接收到的都将是子网路由条目。
总结:
只要在show ip bgp表中存在的路由,都会不变地传给ibgp或ebgp的邻居,而不管邻居或自己是否启用auto-summary命令。
将BGP重发布进入IGP时,自动汇总后network的路由,不会被灌回去,但是aggregate汇总宣告的路由,会被灌回去,要用route-map防止灌回。
汇总范围:
auto-summary:只能主类,例如10.0.0.0/8
aggregate:随意,例如10.0.0.0/16
汇总方法:
auto-summary:
方法1:开启auto-summary,network 10.0.0.0,前提是需路由表有10.0.0.0/8下的任意一条明细路由。注意前提是路由表里有,并且要到BGP下network主类。
方法2:开启auto-summary,重发布IGP至BGP,所有IGP中的明细路由都会自动汇总变成主类路由。
aggregate:
手工汇总BGP表里有的路由,无论是自己network的,还是BGP邻居传过来的,都行!aggregate 10.0.0.0 255.0.0.0。注意前提是必须要BGP表里有,并且要到BGP下agg汇总!
抑制明细:
auto-summary:不会抑制明细
aggregate:不会抑制明细,想抑制需要aggregate后面加上no-summary
将BGP重发布回IGP时路由灌回:
auto-summary:不会灌回
aggregate:会灌回到IGP,本路由器sh ip route发现是一条指向null0的汇总路由,其他IGP域内的路由器也会收到该路由,如果不想收到需要做过滤
6,BGP的default-information originate
两种方法产生默认路由:详见BGP配置7
1)当本地有默认路由时并且重发布到BGP时,用default-information orignate可传递给所有邻居默认路由,注意这条必要BGP表里有默认才行,默认BGP不会将0.0.0.0传给对方,一定要有这条命令才会传,即想传默认路由给对方,一定要重发布含默认路由的+这条命令
2)或者单独的network 0.0.0.0 mask 0.0.0.0 也可产生,OSPF本地无默认路由时可以强行加上always指定,BGP没有always
3)或者本地nei 对端PE default-orignate,可强制产生默认路由,无论本地有没有默认路由,注意模拟器的版本中这条命令本地的BGP表中没有0.0.0.0,对端有,但本端会有一段说明给对方下放了默认路由
- HCNP Routing&Switching之BGP防环机制和路由聚合
前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...
- BGP - 1,基本概念
1,BGP知识点 a)AS号:私有(64512-65535),公有(0-64511). b)什么时候使用BGP:有数据穿越本AS前往其他AS:本AS有多条到其他AS的连接:必须要做策略. c)BG ...
- eBGP&iBGP 总结
3.4 BGP 原文地址:http://mp.weixin.qq.com/s?src=3×tamp=1500043305&ver=1&signature=XwiIVV ...
- HCNA Routing&Switching之RIP防环机制
前文我们了解了RIP的基础概念.RIP的特点.RIP报文格式.RIP度量以及RIP配置认证等相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/150085 ...
- 路由信息协议(RIP)的防环机制
防环机制 1-记数最大值(maximum hop count):定义最大跳数(最大为15跳),当跳数为16跳时,目标为不可达. 2-水平分割(split horizon):从一个接口学习到的路由不会再 ...
- 【OSPF】防环机制详解
我们在提到OSPF的时候,时常喜欢说的一句话就是,OSPF能够计算出无环的路由,那么OSPF究竟是如何规避路由环路的呢?OSPF与距离矢量路由协议不同,运行OSPF的路由器之间交互并不是路由信息,而是 ...
- BGP与BGP机房 国内网络运营商的主流网关解决方案
边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议. BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议. BGP 构建在 EGP ...
- BGP的那些安全痛点(转)
0x00 BGP(RFC 1771. RFC 4271)定义 全称是Border Gateway Protocol, 对应中文是边界网关协议,最新版本是BGPv4. BGP是互联网上一个核心的互联网去 ...
- BGP路由协议详解(完整篇)
原文链接:http://xuanbo.blog.51cto.com/499334/465596/ 2010-12-27 12:02:45 上个月我写一篇关于BGP协议的博文,曾许诺过要完善这个文档,但 ...
随机推荐
- CEF 文件下载
转载:https://blog.csdn.net/liuyan20092009/article/details/53819473?locationNum=6&fps=1 转载:https:// ...
- django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件
一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用 {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...
- topcoder srm 525 div1
problem1 link 最后剩下的是中间的一个矩形.所以可以直接枚举这个矩形,如果它含有的硬币个数等于$K$,则再计算移动的最少次数,更新答案. problem2 link 首先,每个节点发送每种 ...
- Kubernetes(k8s)入门、单机版安装、kuberctl指令、k8s服务实例
1.切换root .关闭centos自带的防火墙 # systemctl disable firewalld # systemctl stop firewalld .安装etcd和kubernetes ...
- %lld 和 %I64d的区别
参考一个博客的链接:https://blog.csdn.net/thunders01/article/details/38879553
- Nuget EPPlus的使用
EPPlus:网站 Supported Functions Excel Merge Operate public class ExcelMergeOperate { private static Lo ...
- ngnix简介以及如何实现负载均衡原理
1 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况.那么负载均衡的前提就是要有多台服务器才能实现, ...
- Nginx教程---01.Nginx入门
create by 三七二十一 LZ参考视频(年代久远,但万变不离其宗): 链接:https://pan.baidu.com/s/1O_MmN0c3ckM6vbk08n8Qkg 密码:z9zr 01_ ...
- 判断是否在同一个线程-GetCurrentThreadId()用法
线程 在一个程序中,这些独立运行的程序片断叫作"线程"(Thread),利用它编程的概念就叫作"多线程处理".利用线程,用户可按下一个按钮,然后程序会立即作出响 ...
- 每日质量NPM包拖拽文件上传_react-dropzone
一.react-dropzone 官方定义: Simple HTML5-compliant drag'n'drop zone for files built with React.js. 理解: 一个 ...