PBR-----策略路由
通过流量策略来执行选路的一种转发手段
传统的路由表转发只能通过数据的目标地址做决策提供路由
策略路由可以根据源地址、目的地址、源端口、目的端口、协议、TOS等流量特征来做决策提供路由,灵活性高
路由表与策略路由的关系
策略路由是先于路由表执行的,策略路由没有被捕获的流量依然会去执行路由表
两种配置
1.接口下配置
只能捕获该接口的入接口流量做策略(不能处理本路由器产生的流量)
access-list 100 permit ip host 1.1.1.1 any
route-map pbr permit 10
match ip address 100
set ip next-hop 10.1.1.1
int e0/1
ip policy route-map pbr
2.全局配置
能够捕获所有接口入接口的流量以及本路由器产生的流量(源地址是本路由器地址)
ip local policy route-map pbr
3.策略路由的冗余设置
set ip next-hop verify-availability 10.1.24.2 1 track 1 //设置track监控,如果监控成功则执行该语句,如果不成功则转为执行下一条set语句
set ip next-hop 10.1.34.3
track 1 ip sla 1 //定义一个track监控sla的探测结果
ip sla 1
icmp-echo 10.1.12.1 source-ip 10.4.4.4
ip sla schedule 1 file forever start-time now
4.defaul语句
在route-map的set ip default 这个位置输入,定义为被捕获的流量先查路由表,如果能精确匹配(如果抓的是10.5.5.5,路由表中有10.5.5.0/24位就不叫精确匹配,如果有10.5.5.5/32为精确匹配)则执行路由表,如果不能则执行策略路由
策略在转发层面不如路由表,原因是匹配的东西过多,底层芯片处理支持有限。使用原则是能不用就不用。如果出现非目的地址的转发策略果断用。
策略路由的其他功能
set ip precedence priority //设置队列优先级(优先出接口)
BGP
EGP协议 管理as之间的路由传递 距离矢量型-----分布式计算
可靠性-----用TCP来传递路由信息(端口号 179),保证了可靠性丧失邻居自动发现,只能单播建邻,并且可以非直连建邻
BGP设计用来处理AS之间的路由,所以该协议重点处理的是AS之间的路由,AS之内的路由不作为重点
BGP使用AS号作为识别不同AS路由的标识,该AS号需要具有唯一性
AS号范围 1-65535,可以使用扩展32位 65536-4294967295(解决AS不够用的情况)
BGP的最小使用单位是一个路由器,所以每个路由器只能使用一个BGP进程
由于BGP管理的路由信息非常庞大,不能使用周期更新,只能触发更新。并且BGP会认为一条路由时间越久越稳定,在这种情况下BGP必然不会使用复杂的算法来处理BGP收到的路由信息,又由于每个AS情况都不一致,管理范围也有限,所以它必然需要丰富的管理属性(不能只依赖metric)。综上所述,BGP必然需要多种参数共同来决定路由的选择,并且不能依赖某种特定的全局算法,只能单独去计算某一条路由,不能全盘考虑,并且需要依赖所属AS管理员手动设置
BGP路径优先协议,通过给每一个路由设置大量的属性参数来进行灵活的管理或者选路,并且这些属性参数大量的都需要认为来操控
BGP数据包
open
keeplive
update
notification 出错报文
reflush 刷新BGP路由
邻居状态机
BGP事件有以下几种:
1.BGP开始 2.BGP结束 3.BGP传输连接打开 4.BGP传输连接终止 5.BGP传输连接打开失败 6.BGP传输致命差错 7.充实连接计时器超时 8.持续事件终止 9.keeplive计时器终止 10.收到open消息 11.收到keeplive消息 12.收到update消息 13.收到notification消息
down
idle state
配置了邻居后,初始化所有资源打开connect retry计时器,初始化邻居的tcp连接,监听来自邻居初始化消息并将它的状态转到connect状态
为了防止差错的持续出现造成BGP的摆动,connectRetry计时器会呈现级数级的增加一次60s,下一次为前一次的一倍
connect state
BGP等到tcp连接完成以后再决定后续的动作
1.如果tcp同步成功,bgp讲connectRetry清零,完成初始化并发送一个open消息给邻居并把状态置为open
2.如果失败,BGP继续监听邻居发出的连接,重置connectRetry计时器并转移到active状态
3.如果connectRetry时间超时,计时器重新开始,在试图与邻居建立TCP连接,BGP保持connect状态,出现其他事件转入idle状态
active state
BGP试图与邻居建立一个TCP连接
1.如果TCP连接成功,BGP将connectRetry计时器清零,完成初始化,给邻居发送Open消息并将状态置为open,hold时间为4min
2.如果在active状态,connectRetry计时器超时,回到connect状态并重置connectRetry计时器
3.如果试图与一个未知IP建立TCP会话,同时connectRetry计时器重置,连接拒绝并保持active状态
4.任何一个时间都会导致重回idle状态
open send state
在此状态,已经发送了open消息,BGP等待邻居发送的open消息
1.收到open消息,如果发现差错,将给邻居发送一个notification消息并置为idle
2.如果收到open消息没错,将发送keeplive给邻居,并建立IBGP或EBGP,状态置为open confire state
3.如果收到TCP断开消息则断开BGP连接重置connectRetry计时器,状态置为active
open confire state
在此状态下,BGP会等待一个keeplive消息或者notification消息
1.如果收到一个keeplive消息,状态置为establish
2.如果收到notification消息,状态置为idle断开TCP连接
3.如果hold计时器超时,检测到一个差错或stop事件,BGP将给邻居发送一个notification并断开连接,状态置为idle
establish state
此状态,BGP对等体间的连接已经完全建立,可以交换update、keeplive和notification消息,收到notification消息状态置为idle,中断连接
BGP建邻失败的场景
参数与配置:
1.neighbor 10.1.1.1 //代表向该地址发送tcp端口为179的数据,并且自己也需要在发出地址上打开tcp 179的监听。该配置可以指定源地址也可以不指定源地址,不指定就是出接口地址(意味着得打开该出接口关于tcp 179的监听)
本端指的地址需要是对方的源地址,对方指的地址需要是本端的源地址
2.neighbor 10.1.1.1 remote-as xx
对端建邻的AS号必须和本端的remote-as xx 号一致
3.建邻双方保证tcp 179能够发送,不丢失,不被拦截
邻居之间路由传递规则
BGP有两种邻居关系
IBGP邻居关系 //相同AS的路由器建立的邻居关系
EBGP邻居关系 //不同AS的路由器建立的邻居关系
1.BGP不管什么邻居关系只传递最优路由(不优不传,优的标志是>,也就是不带>的路由不会被BGP传递)
2.EBGP邻居关系路由传递:只要不违背环路原则或人工策略,EBGP邻居传递无限制(前提必须优)
3.IBGP邻居关系路由传递:IBGP自己产生的路由(自己宣告的,自己重发布进来的)和EBGP邻居传递的都可以传递给他的IBGP邻居,但不可以在IBGP之间中转
这个设定的好处:IBGP邻居之间拥有了水平分割,从而避免了IBGP环路的产生,BGP也不必设置防环算法。
这个设定的坏处:IBGP邻居之间路由传递必须直接建立邻居,导致IBGP邻居关系是一种全互联状态
BGP的属性
BGP有11条属性:weight、origin、as_path、next-hop、local_pref、atomic_aggregate、aggrefator、community、MED、originator_id、cluster_list
属性可分为四类:
1.公认必遵
所有BGP路由器必须识别遵守的属性:origin、as_path、next-hop
2.公认可遵
所有路由器都能识别但不一定遵守的属性:local_pref、atomic_aggregate
3.可选传递
不是所有BGP路由器都能识别,但是所有BGP路由器都能传递:aggregator、community
4.可选非传递
不是所有BGP路由器都能识别,不能识别的BGP路由器就丢弃它:MED、originator_id、weight、cluster_list