BGP协议: 属于公有协议,位于 OSI 第 7 层,套接字为 TCP 179. 该协议本身不会产生路由,仅仅用来传递路由 一般应用于不同公司之间,可以在长时间内稳定的传输 大量的路由条目。可以赋予路由条目众多属性,从而可以 实现路由条目的灵活控制。

有的时候也将其称之为“路径矢量”,同样存在自动汇总, 但是可以人工关闭,因为BGP协议传输路由时,是有子网 掩码的。

BGP的工作原理

1、建立邻居表
      router bgp 1
	     no auto-summary  //关闭自动汇总功能;
		 no synchronization //关闭BGP与IGP的同步功能
	     bgp router-id 1.1.1.1 // 设置 BGP 的 RID;
		 neighbor 192.168.12.2 remote-as 1 //单播建立BGP邻居			
	  

	  验证命令;
      show ip bgp summary 
	       标注一下每个字段的意思;


2、同步数据库(DB\Topology\LSDB\BGP Table)
       #路由宣告成功,就会进入到数据库
	    在BGP中,BGP不会产生路由,仅仅传递路由
		所以,要宣告进入到BGP中的路由,必须已经
		存在于当前的路由表中。
		
	       -宣告:network + redistribute
		   
       #R1: router bgp 1
             network 10.10.1.0 mask 255.255.255.0
	   #R3:  router bgp 2
		     no auto-summary
			 no synchronization
			 bgp router-id 3.3.3.3
			 neighbor 192.168.23.2 remote-as 1
             redistribute  connected 
		当路由被宣告进入到 BGP 数据库时,
        如果条目的状态是 best,则进行以下动作:
            1、尝试着装入到路由表;(成功或失败)
            2、发送给自己的BGP邻居;				
    验证命令:
            show ip bgp neighbor x.x.x.x adver 
                      //查看该路由器向邻居xxxx发送了
                         哪些路由;
						 
            show ip bgp //查看本地的 BGP 数据库							 

3、创建路由表 所有的TCP协议的流量都是单波的 数据库每变化一次,路由表版本routing table version增加1

             neighbor邻居 也叫beer(对等体)


             BGP在传递路由的时候,  外:下->变
                   内:下->不变
             next-hop-self一般在AS边界

        show ip route 
		show ip route bgp 

BGP在传递路由的过程中,next-hop的变化: 1、外部邻居之间传路由,next-hop默认是变化的; 2、内部邻居之间传路由,Next-hop默认是不变的;

但是,一个AS的边界路由器传递给内部BGP邻居时, 如果不进行 next-hop的变化,则会导致内部BGP路由器 产生“下一跳”不可达的现象,所以该路由不可用。 为了解决该问题,我们在 AS 的边界路由上,对内部邻居 做“next-hop-self"; R2: router bgp 1 neighbor 192.168.12.1 next-hop-self

注意: BGP非常的稳定,所以当BGP路由发生变化时,数据库和 路由表反映的很慢,为了能够快速看到现象,我们可以 手动的清除 BGP 的数据库,分为软清和硬清两种类型。 clear ip bgp * soft --> 软清,重新进行数据库的请求 clear ip bgp * -->硬清,会直接断开建立好的BGP邻居 关系。必须慎重,现实工作尽量不用。

非直连的 BGP 邻居关系: 为了增强 BGP 邻居关系的稳定性,才考虑通过非直连的 链路IP地址进行邻居关系的建立(即通过loopback口建立) 另外,非直连建立邻居时,务必需要考虑一个“更新源检测机制” 的问题。如果更新源检测不通过,则导致邻居无法建立。

注意: BGP中的 TCP 179 ,表示的仅仅是目标端口号。

配置思路:
    1、确保内网路由互通
	      通过RIP/OSPF等其他IGP协议;
	2、建立BGP邻居关系
	     router bgp 1
		   no auto-summary
		   no synchronization
		   bgp router-id 1.1.1.1
		   neighbor 10.10.2.2 remote-as 1 
		     #neighbor,表示的是单播建立邻居;
			 #10.10.2.2 
			    &表示的是该设备主动向10.10.2.2 的TCP 179 发起连接;
				&表示的是该设备只接受10.10.2.2 发送过来的 BGP 连接请求;
	        
             #remote-as ,期望对方发送过来的AS号为1;

R1:BGP-TCP neighbor 10.10.2.2 R1:randoam---TCP-----> 10.10.2.2 : 179

R2:BGP-TCP neighbor 10.10.1.1 R2:randoam---TCP-----> 10.10.1.1 : 179

更新源检测机制(非直连) random随机

TCP连接建立,是存在delay(延迟)的, 如果两个设备之间的TCP 179连接都建立成功, 则最终仅仅会保留一个delay小的。

查看设备上已经建立的TCP连接: show tcp brief 针对BGP连接而言, 随机端口一方为互动发起方,为源。

EBGP邻居关系: 在建立外部BGP邻居关系时,必须使用直连链路,也叫作:必须遵守“直连检测机制” 直连检测机制: 即,任何两个建立外部BGP邻居关系的路由器,在建立邻居时,使用的必须都得是“直连路由”。 所为的“直连链路”,在数据包层面是通过IP头部中的TTL值等于1来指定的。 只有当BGP邻居关系是外部,并且TTL值为1的时候,才会进行“直连检测机制”的检查; 而,默认情况下,外部BGP邻居关系之间发送的所有的BGP报文,TTL值都是1;

什么是直连检测机制 去往外部邻居的IP地址时,使用的必须是直连路由; 什么时候检查直连检测机制 #建立外部邻居的时候; #并且TTL值为1的时候; 所以,通过非直连建立EBGP邻居关系的时候,都要“绕过”直连检测机制: -修改EBGP邻居之间发送的报文的TTL; router bgp 2 neighbor x.x.x.x ebpg-multihop[value] -更新源检测机制(通过非直连端口建立邻居时) neighbor x.x.x.x update-source y.y.y.y -直连检测机制(通过非直连端口建立EBGP邻居时候) neighbor x.x.x.x ebgp-multihop[value]