<!-- wp:quote -->

<p>这个专题将让你成为大神</p>边界网关路由协议
<!-- /wp:quote --> <!-- wp:more --> <!-- /wp:more --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">下面这些就当前言吧</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>前面我们提到的OSPF、RIP这些协议都是IGP(内部网关路由协议),那么有内部网关路由协议,就有外部网关路由协议即EGP,EGP最大的体现就是BGP</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>动态路由协议可以按照工作范围分为IGP和EGP。IGP工作在同一个AS内,主要用来发现和计算路由为AS内提供路由信息的交换;而EGP工作在AS与AS之间,在AS间提供无环路的路由信息交换,BGP则是EGP的一种。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p> 为什么要整一个BGP这样的东西呢,原因是IGP比如OSPF、RIP这些路由协议他们的承载路由表的数目都很少,有的可能只有几十万条,几万条,而BGP可以承载的路由条目能够达到几百万条,所有在两个运营商之间必然是选择用BGP这样的协议的。</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">自治系统(AS)</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>自治系统(Autonomous System),简称AS。在前面我们讲OSPF的时候我们详细讲过这个AS,当时说的AS就是说如果这个区域运行的是同一个协议的就是一个AS,但是现在AS就需要改一下了,这里的AS是在BGP下说的了,这里的AS就是同一个技术管理机构管理、使用同一选路策略的一些路由器的集合。比如联通、电信。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>关于AS号:自治系统的编号范围是从1到65535,其中1到64511是注册的因特网编号,64512到65535是私有网络编号。这个的概念有些类似于公网IP地址和私网IP地址一样。</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">IGP与EGP(对比)</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:tadv/classic-paragraph --> <h2>IGP:</h2>
  • 运行于AS内部的路由协议,主要有:RIP,OSPF及IS-IS。
  • IGP着重于发现和计算路由。

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:tadv/classic-paragraph -->
<h2>EGP:</h2>

  • 运行与AS之间的路由协议,现通常都是值BGP。
  • BGP着重于控制路由的传播和选择最优的路由。

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:tadv/classic-paragraph -->
<h1><span style="color: #ff6600;">BGP的特征</span></h1>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>BGP(Border Gateway Protocl)是外部路由协议,用来在AS之间传递路由信息是一种增强的距离矢量路由协议(应用场景)</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

  • 可靠的路由更新机制
  • 丰富的Metric度量的方法
  • 从设计上避免了环路的发生

<p>为路由附带属性信息</p>
<p>支持CIDP(无类别域间路由选路)</p>
<p>丰富的路由过滤和路由策略</p>
<p>增量更新计算</p>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>解释一下,这里说BGP有可靠的路由更新机制,是指它在TCP之上的,用TCP来更新,之前讲过TCP和UPD,TCP是一个可靠的传播,而UDP是不可靠传播。第二点说到的这个丰富的度量方法,比如前面的RIP就是跳数,OSPF是cots值,而BGP有很多很多,而BGP后面会讲到IBGP,这个东西从设计上就避免了环路的发生。BGP在传递路由的时候每个路由都有附属的属性。BGP也支持CIDR,前面说到的RIP、OSPF也支持CIDR,BGP还有丰富的策略和过滤。</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->
<h1><span style="color: #ff6600;">BGP路由传递</span></h1>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>BGP如果想要传递路由,必须要手动建立TCP连接,才能传递。 </p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->
<p></p>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>如上图,如果想要RouterA和RouterB之间建立BGP,那么就必须要A和B能够通信,也就是说底层必须要ping通才行,可以先建立一个OSPF,或者静态,让AS2里面的设备通信,但是如果在AS1和Router A之间建立BGP那么就不需要那么麻烦了,可以直接使用直连口,因为直连口,是可以ping通的。</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->
<h1><span style="color: #ff6600;">BGP可靠的路由更新</span></h1>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>传输协议:TCP,端口号179(需要注意的是这个是目的端口号,源端口是随意产生的)</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>无需周期性更新</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>路由更新:只发送增量更新路由,意思就是只发送增加的路由条目</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>周期性发送keepAlive报文检测TCP的连通性,这个的意思就是TCP连接三次握手,四次挥手结束后就会断开,而BGP的keepAlive报文就不停的发送这个报文来维护TCP的稳定性。</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->
<h1><span style="color: #ff6600;">BGP报文种类</span></h1>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:tadv/classic-paragraph -->
<p>BGP报文有五种类型:</p>

  • open:负责和对等体建立邻居关系。(建立BGP的邻居关系而不是建立TCP的连接)
  • KeepAlive:该消息在对等体之间周期性地发送,用以维护连接。
  • Update:该消息被用来在BGP对等体之间传递路由信息。(传递的路由信息包括可达的路由信息和不可达的路由信息)
  • Notification:当BGP Speaker检测到错误的时候,就发送改消息给对等体。
  • Route-refresh:用来通知对等体自己支持路由刷新的能力。

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>现在我来做个试验抓包一下,拓扑图如下:</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->
<p></p>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>现在我们现在AR1上面配置上的G0/0/0口配置IP 地址:</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

[Huawei]sysname AR1
[AR1]interface LoopBack 0
[AR1-LoopBack0]ip address 1.1.1.1 32 [AR1]interface GigabitEthernet 0/0/0 [AR1-GigabitEthernet0/0/0]ip address 10.1.12.1 24

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>AR2配置同理:</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

[Huawei]sysname AR2
[AR2]interface LoopBack 0
[AR2-LoopBack0]ip address 2.2.2.2 32 [AR2]interface GigabitEthernet 0/0/0 [AR2-GigabitEthernet0/0/0]ip address 10.1.12.2 24

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>现在我们可以测试一下这两个直连口是能ping通的</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

[AR1]ping 10.1.12.2
  PING 10.1.12.2: 56  data bytes, press CTRL_C to break
    Reply from 10.1.12.2: bytes=56 Sequence=1 ttl=255 time=90 ms
    Reply from 10.1.12.2: bytes=56 Sequence=2 ttl=255 time=30 ms
    Reply from 10.1.12.2: bytes=56 Sequence=3 ttl=255 time=30 ms
    Reply from 10.1.12.2: bytes=56 Sequence=4 ttl=255 time=20 ms
    Reply from 10.1.12.2: bytes=56 Sequence=5 ttl=255 time=20 ms

  --- 10.1.12.2 ping statistics ---
    5 packet(s) transmitted
    5 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 20/38/90 ms

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>现在我们在AR1和AR2上面开始做BGP</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>在AR1上的配置:</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

[AR1]bgp 200
[AR1-bgp]router-id 1.1.1.1
[AR1-bgp]peer 10.1.12.2 as-number 100

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>在AR2上的配置:</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

[AR2]bgp 100
[AR2-bgp]router-id 2.2.2.2
[AR2-bgp]peer 10.1.12.1 as-number 200

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>解释一下,这里的bgp后面写的这个号码,就是AS号,AS这个概念前面也提到过了,我这里做实验就写了100200,跟OSPF不同的是,OSPF可以起多个OSPF进程,但是bgp只能起一个,第二步的routee-id这个跟OSPF上的就一样了,如果你不填写的,默认就是环回口,第三步,这个peer就是指向哪里,就是表明邻居了,peer后面的ip地址就是对端的ip地址,as-number后面跟的就是对端的as号。</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>到这里BGP就配置成功了,怎么样是不是很简单,现在我们来详细分析一下报文,你可以先停止掉当前的BGP,然后在抓包软件打开之后我们再开启BGP,这样有利于我们分析数据包,以下是我截取到的数据包图片</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->
<p></p>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>对了,如何看你的bgp邻居有没有提起来呢,我们可以输入以下命令查看</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

[AR1]display  bgp  peer  
 BGP local router ID : 1.1.1.1
 Local AS number : 200
 Total number of peers : 1          Peers in established state : 1
  Peer            V          AS  MsgRcvd  MsgSent  OutQ  Up/Down       State Pre
fRcv
  10.1.12.2       4         100        4        4     0 00:02:32 Established    

<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>看到状态为 Established 就证明你的bgp提起来了, 现在我们再回到刚才这张数据包的图片中看,首先上面三行,就是TCP的三次握手,一开始就TCP发送的SYNACK包,三次握手成功之后,bgp开始发送OPEN Message的包,我们发现没有出现update报文,原因是我们没有路由信息去传递,所以就没有,现在我们在AR1上面跟着我宣告一条路由:</p>
<!-- /wp:paragraph -->

<!-- wp:tadv/classic-paragraph -->

[AR1-bgp]network 10.1.12.1 255.255.255.255
<!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>好了,这个具体是什么意思我后面会提到,现在我们需要的是看抓包图</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>我们会发现在bgp上使用了network命令之后就会有一条 Update 的报文消息出现,这个就是我们更新了路由的报文信息</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">BGP报文头</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>看这个header报文,带有一个长度,type类型,还有一个marker,这些东西都是在TCP之上的,有长度,marker和type类型我们仔细看下面这张图,就能看到BGP的router id,等等很多信息。这就是报头</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">Open报文</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>现在来着重分析一下这个open报文,它带有version(版本),My Autonomous System(我自己的版本号)。还有一个是Hold Time,这个时间就是说bgp会过一段时间给对方发送报文,探测是否存活,这个时间就是控制发送探测报文的时间,紧接着是BGP Identifier(就是bgp的router id),还有就是Opt Param Len(可选参数的长度),这个是支持扩展bgp可以多协议</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">KeepAlive报文</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>keepalive报文只有报文头</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>这个keepalive只有报文头部,用来维护连接的所以没有什么实际的意义</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>如上图所示,就是这样,没有什么实际的意义</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">Update报文</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>上图中,update报文的前两个都是承载路由不可达的,后面的就是说该路由可达</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">Notification报文</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>错误报文都会触发这个报文哦~~注意还有当我们的bgp指向的号码错误的时候也会出现这个报文信息。</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph --> <h1><span style="color: #ff6600;">Route-refresh报文</span></h1> <!-- /wp:tadv/classic-paragraph --> <!-- wp:tadv/classic-paragraph --> <p></p> <!-- /wp:tadv/classic-paragraph --> <!-- wp:paragraph --> <p>这个报文是你要触发报文的重新接受信息就会出现,注意这个是需要在用户视图下使用命令,然后报文才会出现,命令如下</p> <!-- /wp:paragraph --> <!-- wp:tadv/classic-paragraph -->
<AR1>refresh bgp all import 

<AR1>refresh bgp all export 

<p>这两条第一个是入方向的,第二个是出方向的,当我们敲完这个命令之后就会有Router-refresh报文出现(注意:如果这个路由条目很多建议不要轻易执行,因为它会发送所有的报文给对方)</p>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:tadv/classic-paragraph -->
<h1><span style="color: #ff6600;">BGP协议中消息的应用</span></h1>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:tadv/classic-paragraph -->
<p></p>
<!-- /wp:tadv/classic-paragraph -->

<!-- wp:paragraph -->
<p>OK。本节的内容到此结束,如果你真的看懂了,就请点赞打赏一下吧,对了有错别字就评论区见吧</p>
<!-- /wp:paragraph -->

最后修改:2020 年 02 月 28 日 06 : 51 PM
请俺喝杯咖啡呗