BGP路由协议总结 |
您所在的位置:网站首页 › 邻居发现协议使用几种类型的icmp数据包 › BGP路由协议总结 |
路径矢量路由协议
了解AS AS(Autonomous System) AS的经典定义为:在单一的技术管理下,采用同一种内部网关协议和统一的度量值在AS内转发数据包,并使用一种外部网关协议将数据包转发到其他AS的一组路由器。 分类: 公有AS(必须申请):0—64511。电信:4134;网通:9929;CN2:1609 私有AS:64512--65535网站:http://www.cidr-report.org/as6447/autnums.html 。看到所有公有AS对应的机构,可以访问BGP,请telnet route-server.ip.att.net 概要BGP是一种EGP(外部网关协议)。不同于以前的RIP,EIGRP和OSPF,它们都属于IGP(内部网关协议) BGP是一种路径矢量的路由协议,不同于RIP的距离矢量的路由协议。 BGP的开销是从源路由器到目标路由器经过的AS;而RIP的开销是从源路由器到目标路由器路径的度量值。在BGP中,一个AS相当于一个大的路由器,直接影响的是就是AS的下一跳。所以,BGP又被叫做AS-by-AS routing protocol BGP的使用什么是时候要用到BGP 大型企事业连接多个SP(多宿主) ISP之间(当一个数据包从一个AS传输到另一个AS的时候)。 AS交换点(当一个AS连接多个AS的时候)。 大型企业网ISP为什么用BGP,而不是别的IGP 方便管理,安全性能好(阻止不同AS之间的路由、过滤和认证功能) 承载的路由条目海量(10w+),而ospf(1w+),ISIS(2w+) 策略比一般的IGP更强(次优路由),更多 可扩展性强,不仅能传IPv4、v6,还能传VPNv4、组播VPN等。 BGP的特征 支持VLSM,CIDR。 支持增量更新与触发更新。 使用TCP协议作为可靠地传输机制,端口号为179 没有组播地址 60s/次,180s dead,通过keeplive包来验证TCP的连通。 属性化(metric只是属性当中的一员)。 支持大型的网络拓扑。 BGP和IGP的关系 BGP承载的是一个外部客户路由,IGP承载的是内部核心路由 IGP不会因BGP的影响而变化 BGP不会因IGP的影响而变化,直到BGP的下一跳不可达 BGP是IGP的递归查找 BGP协议报文 BGP协议报文封装![]() BGP头部字段格式: ![]() 根据BGP头部不同的Type字段,BGP Message也各有不同,主要分成5类: Open:负责和对等体建立邻居关系。 KeepAlive:该消息在对等体之间周期性地发送,用以维护连接。 Update:该消息被用来在BGP对等体之间传递路由信息。 Notification:当BGP Speaker检测到错误的时候,就发送该消息给对等体。 Route-refresh:用来通知对等体自己支持路由刷新能力; Open报文![]() ![]() ![]() ![]() 通常发生在邻居路由器做完策略后,我还没有得到更新,我就会发送一个这样的报文 通常我会利用clear命令来实现这一步骤 ![]() 由于BGP邻居关系建立在TCP连接的基础之上,所以可以通过IGP或静态路由来提供TCP连接的IP可达性 关于建立邻居使用的hello报文: 在IGP中的hello包无非就是发现建立邻居,维持邻居关系(keeplive)两大作用。 在BGP中,hello包被细分成open包(只发一次)和keeplive包(60s/次;180s dead)。![]() ![]() ![]() 更新源,即update-source。在BGP通过neighbor指邻居时,会自动带上一个update-source信息,默认是:源是本端连接对端接口IP地址,目的是neighbor指向邻居的地址。 ![]() EBGP多跳,称EBGP-multihop(EBGP多跳)。这里的hop=TTL,默认EBGP发来的路由协议报文的TTL=1,即1跳,而IBGP默认是多跳。这样问题就来了,如果EBGP是用环回口建立邻居,那么EBGP邻居之间的路由协议报文就无法抵达。针对这个问题,解决的办法很简单,修改TTL,即EBGP多跳。 邻居建立的状态机制![]() 常见的几种状态: Idle:我neighbor你了,但是我的路由表里没有你的路由。解决:IGP路由可达。 Exstablished:邻居建立。sh ip bgp summary中,可以从state字段中看到的是数字,这个数字代表我从邻居学习到了多少条路由 Active:如果出现这种情况,有四种可能性: 我的open包到你那了(说明我neighbor你了),但是你没有我的路由。 你neighbor我的地址配错了。 你根本没有neighbor我。 AS号没有配置。 BGP邻居关系实验 目的一:BGP邻居关系的建立(neighbor和update Source问题)![]() 分为IBGP和EBGP邻居关系的建立 EBGP peers: R2: R2(config)#router bgp 2 R2(config-router)#bgp router-id 2.2.2.2 R2(config-router)#neighbor 192.168.12.1 remote-as 1 R1和R2的配置一样 IBGP peers: R2(config)#router ospf 100 R2(config-router)#router-id 2.2.2.2 R2(config-router)#network 2.2.2.0 0.0.0.255 a 0 R2(config-router)#network 192.168.23.0 0.0.0.255 a 0 //所有AS内的BGP路由器都起IGP R2(config)#router bgp 2 R2(config-router)#neighbor 4.4.4.4 remote-as 2 //IBGP指R4 R2(config-router)#neighbor 4.4.4.4 update-source loopback 0 R4和R2的配置一样注意: 在IGP中,network的作用有两个:hello建立邻居和路由的通告。 在BGP中,由于是基于TCP,TCP是一个点到点的连接,不支持广播,只能单播。 所以,BGP用neighbor指邻居,而network传路由。验证: R2#sh ip bgp summary //3张表中的BGP表简要信息。 BGP router identifier 2.2.2.2, local AS number 2:自己的AS BGP table version is 1, main routing table version 1 邻居 版本 Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 192.168.12.1 4 1 6 6 1 0 0 00:03:46 0 R2#sh ip bgp neighbor //3张表中的邻居表,邻居的详细信息,很多的。 R2#sh tcp brief TCB Local Address Foreign Address (state) 65053418 192.168.12.2.32373 192.168.12.1.179 ESTAB 本路由的随机端口号 R1的179端口号 目的二:EBGP-multihopEBGP-multihop(EBGP多跳),这里的hop=TTL,默认EBGP发来的报文的TTL=1(1跳),而IBGP默认是多跳 ![]() 这里是EBGP的双线冗余,所以就不能neighbor物理口了,环回口是最佳选择。 但是EBGP的peers有没有对方的换回口的路由,怎么neighbor呢? 看!做静态路由,双线的静态路由。 回到话题,默认EBGP发来的报文的TTL=1,这~~不就意味着报文到了对方就不能再穿了? 环回口绝对是不能到了,因为环回口是另一个网络。 所以,要修改TTL=2或大于2 EBGP-multihop配置: R4和R5之间EBGP对指环回口 R5(config)#ip route 4.4.4.4 255.255.255.255 Ethernet0/1 //静态让R5上有4.4.4.4的路由 R5(config)#router bgp 3 R5(config-router)#neighbor 4.4.4.4 remote-as 2 R5(config-router)#neighbor 4.4.4.4 update-source loopback R5(config-router)#neighbor 4.4.4.4 ebgp-multihop //不配就是EBGP TTL=255 R4和上一样 目的三:路由的通告(network,show查看)![]() Network在IGP和BGP区别 在IGP中,network宣告的是接口,即路由器是宣告自己直连的本地接口。 在BGP中,network宣告的是路由,即路由器是宣告自己路由表里的路由。 PS:BGP宣告的时候,一定要学到的路由的掩码一样 Network在BGP的原则: 从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP) 从IBGP获得的路由不向它的IBGP邻居通告(除非RR) 从IBGP获得的路由是否通告给它的EBGP对等体要靠同步来决定 多条路径时,BGP会选择一条最优的路径 R1(config)#router bgp 1 R1(config-router)#network 1.1.1.0 mask 255.255.255.0 //前提是确保R1的路由表里有 R2和上一样验证 R2#sh ip bgp //这就是3张表中的BGP表 BGP table version is 3, local router ID is 2.2.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.12.1 0 0 1 i *> 2.2.2.0/24 0.0.0.0 0 32768 i //*表示这条路由是可用的;>表示是最优的路由。 R4#sh ip bgp //R1-R2-R4 BGP table version is 2, local router ID is 4.4.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 192.168.12.1 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //i表示是从内部AS学到的路由。图中,R4的1.1.1.1的路由是从R2(同AS)学到的。 //不打i的情况:本地通告和从EBGP学到的路由。例如R2学到的1.1.1.1的路由 //发现:R4的1.1.1.1是没有>号的,说明这个路由不是最优的。 目的四:解决IBGP中路由不优问题(同步和下一跳)![]() 目的三的结果告诉我,R4的1.1.1.1是没有>号的,说明这个路由不是最优的。 造成路由不是最优会导致: 不放进路由表。 不会给其他BGP邻居传这条路由。造成不优的原因有: BGP Synchronization(同步) 下一跳同步:只是针对IBGP来说的,默认的我从IBGP学习到的路由,我不会放进路由表,也不会宣告给邻居路由器。直到我从IGP也学习到这条路由。结合拓扑:R4中1.1.1.0/24路由为什么是不优的呢?是因为R4没有通过OSPF学到1.1.1.0/24。 同步的好处: 避免了数据层面的路由黑洞(路由可达,数据包去回不来)。Eg:每个路由器中都有1.1.1.0/24的路由。 确保穿越AS信息的一致性 注:同步只是针对数据层面的问题,但是解决数据的问题的方法有很多,包括MPLS。所以,现在的路由器,特别是Cisco IOS 12.2(8)T或更高的版本中,默认是关闭同步。下一跳:再来看看R4上1.1.1.0/24 R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 192.168.12.1 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //BGP中的下一跳不是路由器,而是AS,所以知道为什么下一跳不可达了吧! //想一想:R4上会有12网段的路由吗?肯定没有,因为只有R2、R3和R4运行了OSPF,但R2并没有宣告12网段到OSPF。 //这是一个下一跳不可达的问题。解决不优的方法有: 对于同步:从IGP学习到/直接关闭(no synchronization),关闭同步配置: R4(config)#router bgp 2 R4(config-router)# no synchronization对于下一跳:静态/next-hop-self ![]() 当R1把1.1.1.0/24的路由通过EBGP传到R2时,R2会自动把1.1.1.0/24路由的下一跳改成自己,这样R4中1.1.1.0/24路由的下一跳就是R2了。通过IGP,R4知道R2的。 这个命令建议在AS边界路由器向自己AS的IBGP邻居做的。 R2(config)#router bgp 2 R2(config-router)#neighbor 4.4.4.4 next-hop-? next-hop-self next-hop-unchanged R2(config-router)#neighbor 4.4.4.4 next-hop-self验证: R4#sh ip bgp Network Next Hop Metric LocPrf Weight Path *>i1.1.1.0/24 2.2.2.2 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //变成最优了,下一跳也变了(update-Source) R4#sh ip route //BGP的路由表 1.0.0.0/24 is subnetted, 1 subnets B 1.1.1.0 [200/0] via 2.2.2.2, 00:05:42 2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks //路由表里也有了1.1.1.0/24这条路由。 R5#sh ip bgp Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 4.4.4.4 0 2 1 i *> 2.2.2.0/24 4.4.4.4 0 2 i //R4优了,就会向其他BGP邻居传这条路由,所以,R5也有这条路由了。 目的五:解决数据层面的路由黑洞以及peer-group的应用前提:路由层面打通了,即1.1.1.0/24的路由在R5的路由表中了 现在,R5要向R1的1.1.1.1发送消息啦,我们看一下怎么走滴?…… R5#sh ip route 1.0.0.0/24 is subnetted, 1 subnets B 1.1.1.0 [20/0] via 4.4.4.4, 00:33:27 //1.1.1.1的路由AD是20,EBGP学习到的,下一跳4.4.4.4 R4#sh ip route 1.0.0.0/24 is subnetted, 1 subnets B 1.1.1.0 [200/0] via 2.2.2.2, 00:33:18 2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks O 2.2.2.2/32 [110/21] via 192.168.34.3, 05:21:58, Ethernet0/0 B 2.2.2.0/24 [200/0] via 2.2.2.2, 02:22:26 //1.1.1.1的路由AD是200,IBGP学习到的,下一跳是2.2.2.2(R4 neighbor 2.2.2.2了嘛!) //再看看,2.2.2.2的路由是IGP的OSPF学习到的,下一跳是R3的物理口,扔给了R3 R3#sh ip route 2.0.0.0/32 is subnetted, 1 subnets O 2.2.2.2 [110/11] via 192.168.23.2, 05:23:22, Ethernet0/1 3.0.0.0/24 is subnetted, 1 subnets C 3.3.3.0 is directly connected, Loopback0 4.0.0.0/32 is subnetted, 1 subnets O 4.4.4.4 [110/11] via 192.168.34.4, 05:23:22, Ethernet0/0 C 192.168.23.0/24 is directly connected, Ethernet0/1 C 192.168.34.0/24 is directly connected, Ethernet0/0 //发现:R3上并没有1.1.1.0的BGP路由。 //就这样,数据层面的路由黑洞出现了……上文已经提过了解决黑洞的方法,现采用第二种:BGP邻居的full mesh。 ![]() 引出一个技术:peer group,想一想,R3和R2、R4建立邻居的命令是一样的,这是不是要一个一个地配置呢?这时,peer group出现了,他能: 减小路由器的buffer 减少命令行peer group 配置 R3(config-router)#neighbor cisco peer-group //下面是peer-group的模板,模板的名字是cisco R3(config-router)#neighbor ? A.B.C.D Neighbor address WORD Neighbor tag X:X:X:X::X Neighbor IPv6 address R3(config-router)#neighbor cisco remote-as 2 R3(config-router)#neighbor cisco update-source loopback 0 R3(config-router)#neighbor 2.2.2.2 peer-group cisco //调用 R3(config-router)#neighbor 4.4.4.4 peer-group cisco 分别在R2和R4做一条指向R3的IBGP。 R2(config)#router bgp 2 R2(config-router)#neighbor 3.3.3.3 remote-as 2 R2(config-router)#neighbor 3.3.3.3 update-source loopback 0 R3同上一样这时,所有路由器的路由表中都有了1.1.1.0/24的路由。路由黑洞解决…… 目的六:R5 ping R1 !!!! and R5 ping R1 so 5.5.5.5 !!!!任务是完成 R5 ping R1 !!!! and R5 ping R1 so 5.5.5.5 !!!! 要知道,要完成数据包 ping R5 到 R1!!!,所有路由器光有1.1.1.0/24的路由是没有用的。因为ping包含echo-request和echo-replay。echo-request包是可以从R5到R1,但是echo-replay回不来(R1到R5),因为R1的路由表中没有45的网段和R5环回口的路由。 解决:在R5上把R5的环回口和45网段通告出来。 配置: R5(config)#router bgp 3 R5(config-router)#network 5.5.5.0 mask 255.255.255.0 //检查各个路由器中的5.5.5.0/24是不是最优的,无非就是下一跳和同步。验证 R5#ping 1.1.1.1 so l0 Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 1.1.1.1, timeout is 2 seconds: Packet sent with a source address of 5.5.5.5 !!!!! 好了,做通了,不容易啊!!! 目的七:AS间的路由传输 重分布IGP到BGP Network 路由汇总 目的十:BGP在show中的各种状态 *和> R2#sh ip bgp //这就是3张表中的BGP表 BGP table version is 3, local router ID is 2.2.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.12.1 0 0 1 i *> 2.2.2.0/24 0.0.0.0 0 32768 i //*表示这条路由是可用的;>表示是最优的路由。 i R4#sh ip bgp //R1到R2到R4 BGP table version is 2, local router ID is 4.4.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path * i1.1.1.0/24 192.168.12.1 0 100 0 1 i *>i2.2.2.0/24 2.2.2.2 0 100 0 i //i表示是从内部AS学到的路由。图中,R4的1.1.1.1的路由是从R2(同AS)学到的。 //不打i的情况:本地通告和从EBGP学到的路由。例如R2学到的1.1.1.1的路由 //发现:R4的1.1.1.1是没有>号的,说明这个路由不是最优的。 //后面的i表示起源属性,i表示这个路由是在BGP中network宣告的。 r R2#sh ip bgp BGP table version is 3, local router ID is 2.2.2.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 192.168.1.1 0 0 2 i r>i2.2.2.0/24 192.168.1.3 1 100 0 ? r>i3.3.3.0/24 192.168.1.3 0 100 0 ? *>i4.4.4.0/24 192.168.1.3 0 100 0 3 i r>i192.168.1.0 192.168.1.3 0 100 0 ? //r表示同时从IGP和BGP学到这个路由,但是IGP的AD比BGP的AD小。 //打r的路由会:不放进路由表,但是会传给邻居 R2#sh ip bgp rib-failure Network Next Hop RIB-failure RIB-NH Matches 2.2.2.0/24 192.168.1.3 Higher admin distance n/a 3.3.3.0/24 192.168.1.3 Higher admin distance n/a 192.168.1.0 192.168.1.3 Higher admin distance n/a s R4#sh ip bgp //再看看R4(在R4上宣告的) BGP table version is 29, local router ID is 4.4.4.4 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 1.1.1.0/24 172.16.34.3 0 1 2 i *> 4.4.4.0/24 0.0.0.0 0 32768 i *> 192.168.4.0/22 0.0.0.0 32768 i s> 192.168.4.0 0.0.0.0 0 32768 i s> 192.168.5.0 0.0.0.0 0 32768 i s> 192.168.6.0 0.0.0.0 0 32768 i s> 192.168.7.0 0.0.0.0 0 32768 i *> 192.168.8.0 0.0.0.0 0 32768 i //打s的路由是被抑制掉的路由,它不会再向邻居传路由了。 BGP协议路由通告 路由通告虽然OSPF与ISIS的路由协议通告称为LSA,其实也就是路由信息。BGP协议的路由通告就是纯路由信息,只是宣告的方式有所不同: 在IGP中,network宣告的是接口,即路由器是宣告自己直连的本地接口。 在BGP中,network宣告的是路由,即路由器是宣告自己路由表里的路由。 所以我们会发现,BGP的设计模型是基于IGP之上的。BGP的通告原则: 从EBGP获得的路由会向它所有BGP相邻体通告(包括EBGP和IBGP)。 从IBGP获得的路由不向它的IBGP邻居通告(除非RR)。 从IBGP获得的路由是否通告给它的EBGP对等体要靠同步来决定。 多条路径时,BGP会选择一条最优的路径。 BGP数据库的建立和OSPF与ISIS链路状态路由协议不一样,BGP路由协议作为一种矢量路由协议,在构建路由协议数据库中,传递的是简单的路由表和度量值。但与其他矢量路由协议不同,BGP是一种特殊的矢量路由协议,它在传递的过程中加入了一种路径属性的参数,它是通过不同路径属性来根据数据库路由信息选举最优路径。 BGP的路径属性在下面有章节详细讲解。 BGP的3张表 邻居表:存放BGP的邻居信息(通过open包)。 BGP表(转发数据库):存放邻居学习到的所有路由;到达目标网络的所有路径;各种BGP路径属性 路由表:到达目标网络的最优路径。注:BGP中是不带负载均衡的,它最终只会选出一条最优的路径。 当一个网络被BGP和另一个路由协议同时学到,这时,还是比AD,AD小的会放入路由表中。这时,想想BGP的两种AD(IBGP=200;EBGP=20)的作用了……. 修改BGP AD的命令 R(config-route)#distance bgp external internal local BGP的路径属性 路径属性 我看可以把BGP的路径属性看成矢量路由协议中的度量值,它是一组描述BGP前缀特性的参数,通过不同路径属性来根据数据库路由信息选举最优路径。 和OSPF与ISIS不同,它们都是利用SPF算法计算出最小的Cost值来选取最优路径,路径调整很难控制;而BGP则是通过不同路径属性信息来决定,这些路径属性信息可以通过CLI命令进行调整,显然在路径调整上BGP更加灵活。 BGP路由信息的路径属性是封装在Update报文中,通过路由通告来进行交互。另外,BGP的路径属性被归档成这些类别: Well-known(公认)和optional(任选)关于是否识别。 Transitive(传递)和non-transitive(非可传递)关于传播范围。 Mandatory(必遵)和discretionary(可选)关于是否遵守。于是得到下列4大组合 公认必决:所有BGP路由器都可以识别,且必须存在于Update消息中。如果缺少这种属性,路由信息就会出错 公认可选:所有BGP路由器都可以识别,但不要求必须存在于Update消息中,可以根据具体情况来决定是否添加到Update消息中 任选可传递:BGP路由器可以选择是否在Update消息中携带这种属性。接收的路由器如果不识别这种属性,可以转发给邻居路由器,邻居路由器可能会识别并使用到这种属性。 任选非可传递:BGP路由器可以选择是否在Update消息中携带这种属性。在整个路由发布的路径上,如果部分路由器不能识别这种属性,可能会导致该属性无法发挥效用。因此接收的路由器如果不识别这种属性,应当丢弃这种属性,不必再转发给邻居路由器。常见的路径属性 ![]() 其中有三个公认必遵属性: Origin属性: AS-Path属性: Next-Hop属性:AS Path AS path:每条BGP路由穿越AS时便带上自己的AS号,不多说,防环用的。 默认的,最新的AS在最左边,依次累计.....
Next-hop 在IGP中,一条明细路由的下一跳是直连接口。 在BGP中,一条明细的BGP路由的下一跳是BGP邻居。 Next-hop:每条BGP都会携带,下一跳不可达时,BGP路由就没有‘>’
Origin i 在BGP中通过network注入的路由 e EGPàBGP(现在估计没有了) ? IGP or StaticàBGP BGP选路原则出现选路的前提:同步(可以关闭同步)+最优路由(‘>’) 比较,选路…… 最高的weight值(Cisco私有)或者perferred-value值(Huawei私有) 最高的本地优先级Local-preference,在AS内 聚合路由优先于非聚合路由 本地手动聚合路由优先于本地自动聚合路由 优先与本地0.0.0.0的路由,即本地network宣告的路由优先本地通过路由重分布注入的路由。 评估最短AS路径的长度,最短的优先。 最小的起源值Origin(i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |