第十天
由于重发布的种子度量值的问题,将必然导致选路不佳的清况产生。这种清况只能依赖路由策略来人为干涉选路解决。
路由策略
控制层流量:路由协议传递路由信息产生流量
数据层流量:设备访问目标网段所产生流量
路由策略:在控制层流量传递的过程中,截取流量,之后修改流量再转发或者不转发,最终影响路由表的生成,达到干涉选路的目的。
1、抓取流量
1,ACL列表
[r1-acl-basic-2000]rule permit source 192.168.1.0 0.0.0.0 --- 精准匹配192.168.1.0
本身应用于限制数据层流量进出,也可以应用在抓取控制层流量上,但由于其通配符的设计,可以灵活匹配IP数字特征,不能进行匹配掩码特征,所以ACL不擅长控制层流量抓取。--- 如果要在 192.168.1.0/24 192.168.1.0/25 192.168.1.0/30中抓取192.168.1.0/24,ACL只能按照数字特征抓取,意思是说使用以上命令,ACL将抓取三种路由信息的数据包
2,前缀列表 --- IP-prefix
一个路由条目由目的网络地址(前缀)+掩码长度(前缀长度)共同标识。
[r1]ip ip-prefix aa(自定义的前缀列表名称,唯一区分和标定不同前缀列表的参数)permit(和ACL一样,可以选择拒绝或者允许两种动作,抓取流量时选择允许即可) 192.168.1.0 24 --- 目标网段的路由信息
[r1]display ip ip-prefix aa --- 查看前缀列表的命令
前缀列表中的规则默认是以10为步调自动添加序号,其目的是为了方便插入和删除规则
[r1]ip ip-prefix aa index 15 permit 192.168.3.0 24 --- 在名字为aa的列表里添加序号为15的允许192.168.3.0网段通过的规则
[r1]undo ip ip-prefix aa index 15 --- 在aa列表里删除序号15命令
前缀列表的匹配原则:自上而下,逐一匹配,一旦匹配上则将按照对应的动作来执行,就不再向下匹配,在末尾隐含一条拒绝所有的规则
前缀列表的范围匹配
[r1]ip ip-prefix aa permit 192.168.3.0 24 less-equal 28 --- 可以匹配掩码为24-28的所有的路由信息
[r1]ip ip-prefix aa permit 192.168.4.0 24 greater-equal 28 --- 如果出现前后矛盾的情况,则将按照后面来执行,前面则将不代表掩码长度,代表前24位固定
[r1]ip ip-prefix aa permit 192.168.5.0 24 greater-equal 28 less-equal 30 --- 代表前24位固定,抓取掩码长度为28-30的路由信息
[r1]ip ip-prefix aa permit 192.168.6.0 24 greater-equal 28 less-equal 28 --- 代表前24位固定,抓取掩码长度为28的路由信息
匹配所有的主机路由:[r1]ip ip-prefix aa permit 0.0.0.0 0 greater-equal 32 less-equal 32
匹配所有路由(通配地址):[r1]ip ip-prefix aa permit 0.0.0.0 0 greater-equal 32
匹配所有路由信息:[r1]ip ip-prefix aa permit 0.0.0.0 0 less-equal 32
匹配缺省路由信息:[r1]ip ip-prefix aa permit 0.0.0.0 0
2,路由策略
偏移列表ip-prefix
1,RIP的merticin和merticout --- 偏移列表(Cisco) --- 偏移列表只能应用在距离矢量型协议中,而不能应用在链路状态型协议中
1,抓取流量
[r1]ip ip-prefix aa permit 23.0.0.0 24
2,在接口上配置偏移列表调用前缀列表
[r1-GigabitEthernet0/0/1]rip metricin ip-prefix aa 10 --- 进入流量入方向接口,度量值+5,metricin入;metricout出
该策略为逐跳行为,效果可以叠加操作,整段路径中流量经过的多个接口均配置了度量值增加,最终的开销值为增加的总度量值
过滤策略filter-policy
2,filter-policy --- 过滤策略/过滤列表 --- 过滤列表在距离矢量型协议中和链路状态型协议中都可以使用 --- 只能对路由信息过滤,不能对LSA过滤
1,抓取流量
[r2-acl-basic-2000]rule deny source 34.0.0.0 0.0.0.0 --- 过滤列表本身没有过滤能力,动作需要选择为deny
[r2-acl-basic-2000]rule permit source any --- 在抓取流量的时候,最后一定要放通所有流量,否则会把所有流量过滤掉,因为过滤策略是完全按照ACL表项进行的
[r1]ip ip-prefix bb deny 34.0.0.0 24
过滤列表没有过滤能力,所以需要调用低阶列表的过滤功能,这里在抓流量时,动作需要选择为deny
[r1]ip ip-prefix bb permit 0.0.0.0 0 less-equal 32
放通所有,不添加这条规则,过滤列表将过滤掉所有流量
2,在进程中进行调用
[r2-rip-1]filter-policy 2000 export GigabitEthernet 0/0/0 --- 在进程中调用,选定方向或出方向的接口,若不选择接口,则为全局调用,会匹配所有接口
[r2-ospf-1]filter-policy 2000 export
[r1-rip-l]filter-policy ip-prefix bb import GigabitEthernet 0/0/0
注意:在链路状态型协议中,因为同区域内部传递的是拓扑信息,所以,过滤列表无法过滤拓扑信息,只能进行入方向的调用。而入方向的调用也不是过滤拓扑信息,只是将对应的路由信息拒绝加标
注意,如果此时没有在R1上进行过滤,而是等r1将域外的五类LSA发布仅OSPF后,再在R2的出方向或入方向,有着或是R1的出方向调用过滤策略,则不会成功。必须要在R1将路由信息转化为LSA信息之前调用,也就是在ASBR的入方向调用
若在R2的入方向使用过滤策略限制192.168.2.0/24路由,则R2将不会具备该路由信息,因为是在R2根据本地LSDB中的LSA信息计算出192.168.2.0/24路由后,拒绝将这条路由加入本地路由表中。而R3此时还具备该路由信息,原因在于R3可以正常收到所有的LSA信息,并成功计算路由信息。
若将过滤策略使用在链路状态型协议中,必须使用入方向
路由策略route - policy
路由策略匹配规则:自上而下,逐一匹配,一旦匹配上则按照对应的规则来执行动作,不再向下匹配。末尾隐含拒绝所有的规则
3,route - policy
1,抓流量
ACL方法
Basic ACL 2000, 1 rule
Acl's step is 5
rule 5 permit source 1.1.1.0 0
Basic ACL 2001, 1 rule
Acl's step is 5
rule 5 permit source 2.2.2.0 0
前缀列表
ip ip-prefix aa index 10 permit 3.3.3.0 24
ip ip-prefix bb index 10 permit 4.4.4.0 24
配置实例
192.168.1.0/24 -----过滤
192.168.2.0/24 ----- 修改种子度量值 10192.168.3.0/24 ----- 开销值类型修改为 Type-1192.168.4.0/24 ----- 开销值类型修改为 Type-1 , tag=20012.0.0.0/24 ----- 不处理
抓取流量:[r2]acl 2000[r2-acl-basic-2000]rule permit source 192.168.1.0 0[r2]acl 2001[r2-acl-basic-2001]rule permit source 192.168.2.0 0[r2]ip ip-prefix aa permit 192.168.3.0 24[r2]ip ip-prefix bb permit 192.168.4.0 24做策略:[r2]route-policy hcip deny node 10 ---- 创建一个叫做 hcip 的 route-policy 列表,且序号为 10[r2-route-policy]if-match acl 2000 ---- 匹配 ACL 2000[r2]route-policy hcip permit node 20[r2-route-policy]if-match acl 2001[r2-route-policy]apply cost 10[r2]route-policy hcip permit node 30[r2-route-policy]if-match ip-prefix aa[r2-route-policy]apply cost-type type-1[r2]route-policy hcip permit node 40[r2-route-policy]if-match ip-prefix bb[r2-route-policy]apply cost-type type-1[r2-route-policy]apply tag 200[r2]route-policy hcip permit node 50在重发布中调用:[r2-ospf-1]import-route rip 1 route-policy hcip[r2]display route-policy hcip ----- 查看路由策略内容
2,配置路由策略
[r2]route-policy aa(自定义的路由策略名称) deny node 10 --- 创建了一张叫做aa的路由
策略
Info: New Sequence of this List
[r2]route-policy aa deny node 10 node 10 --- 相当于是路由策略的规则编号,这个编号需
要手工添加,建议参考前缀列表的序号模式,以10为步调手动添加
Info: New Sequence of this List.
[r2-route-policy]if-match acl 2000 ---- 如果匹配 --- 代表如果匹配到列表抓取的流量,则执
行相对应的操作
[r2]route-policy aa permit node 20
Info: New Sequence of this List.
[r2-route-policy]if-match acl 2001
[r2-route-policy]apply cost-type type-1
[r2]display route-policy aa --- 查看路由策略
[r2]route-policy aa permit node 30
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix aa
[r2-route-policy]apply cost 10
[r2]route-policy aa permit node 40
Info: New Sequence of this List.
[r2-route-policy]if-match ip-prefix bb
[r2-route-policy]apply cost-type type-1
[r2-route-policy]apply tag 6666 --- 如果规则中存在多个if-match或者apply,则他们之间的
关系为与关系,tag --- 路由标签
[r2]route-policy aa permit node 50 --- 允许所有
1,如果if-mach,则将匹配所有流量
2,如果没有小动作,则只按照大动作执行即可
3,在重发布中调用路由策略
[r2-ospf-1]import-route rip 1 route-policy aa
[r3]display ospf routing --- 查看OSPF的路由表
指定该节点的匹配模式为允许,如果路由匹配的结果是满足该阶段的所有 if-match 语句,则该路由被视为允许通过,该节点的apply 语言将被执行,且不再进入一下个节点。若该节点中有 fi-match 语句不满足,则进入下一个节点继续匹配。
指定节点的匹配模式为拒绝。如果节点的匹配模式为拒绝,则该节点的 apply 语句将不被执行。如果路由匹配的结果是满足该阶段的所有 if-match 语句,该路由策略的匹配过程直接结束。不会进入下一个阶段。而满足该节点条件的路由会被视为拒绝通过。若该节点中有 fi-match 语句不满足,则进入下一个节点继续匹配。
Route-policy的配置指南:
1,即便要拒绝一个流量,在抓取流量时必须用允许,之后,在路由策略中拒绝
2,在一条规则中,若没有进行流量匹配,那就是匹配所有流量,若没有应用(小动作),则
对匹配的流量只执行大动作。因此,大动作为允许的空表代表放通所有
3,路由配置时,注意路由策略的 '与' 和 '或' 关系
BGP --- 边界网关协议
IGP --- 内部网关协议 --- RIP,OSPF
EGP --- 外部网关协议 --- BGP
AS --- 自治系统 --- 由单一的机构或者组织所管理的一系列IP网络及设备组成的集合
AS划分的原因
1、整个网络规模较大,路由表中的路由数量增加,路由表规模变大,路由收敛速度变慢,设备性能加大 --- 范围太大
2、AS之间可能有不同的机构、公司,相互之间无法完全信任,使用IGP协议可能存在暴露AS内部的网络信息的风险
特点
1,范围太大,协议跑不过来,需要划分
2,自治
为了方便对AS --- 自治系统进行管理,每一个自治系统设詈了一个编号,这个标号称为AS
号。 本质由16位二进制构成
取值范围:0 - 65535,其中0和65535为保留,可用的取值范围为1 - 65534。其中
64512 - 65534这一部分的AS号被称为私有AS号,可以自行使用。公有AS号取值范围1 -
64511(这一部分AS号要求全球唯一,统一由IANA组织分配)。
保留AS号 --- RFC4893标准,23456该AS号为保留AS号 --- RFC5398标准,16位AS
号:64496-64511 16个。32位AS号:65536 - 65551 16个
目前大多数设备支持拓展版的AS号 --- 由32位二进制构成
BGP-1 --- RFC1105
BGP-2 --- RFC1163
BGP-3 --- RFC1267
BGP-4 --- RFC1771
目前,在IPV4领域下,最广泛的BGP协议版本为BGPV4版本。但是,目前市面上也存在
BGPV4+版本 --- 其特点是可以支持多种地址族
在BGP的清况下,我们通过重发布技术也可以实现不同AS之间的路由信息共享,但是,之所
以采用BGP而不是重发布,主要因为重发布本身存在缺陷:
1,在实现多点重发布时,会必然出现选路不佳的情况
2,归属问题 --- 边界路由不知道使用哪个协议
BGP协议介绍
1、RIP基于UDP进行数据传输,而UDP不可靠,在传输过程中可能会丢失数据
2、缺省情况下,RIP的路由更新报文发送间隔为30s,而如果两个AS内部的路由表非常大,30s时间可能不够将所以的路由信息传递给对方,这样,整条链路完全就是为了RIP的通告报文服务,而不能转发数据流
解决方法
将UDP协议更换为TCP协议,不用担心数据丢失,并且TCP会预先建立连接,让路由器有个准备的时间,而不是像RIP一样毫无准备的接收大量更新数据
取消周期更新,改为触发更新 --- 在第一次路由数据同步完成后,如果有路由增加,就发送通告路由增加的报文。如果路由删除,就发送一个通告路由删除的报文;如果路由信息发生改变,就先发送一个通告路由删除的报文,再发送一个通告路由增加的报文
运行BGP协议之间的设备传递路由信息,原因在于若传递拓扑信息,会导致路由器负载过高,并且会让对端AS看到本端的拓扑信息,引发安全问题
BGP需要传递所有的通过BGP学习到的路由信息,并且运行了BGP协议的路由器,所维护的路由表是包含了整个互联网的所有路由信息的
BGP特点
BGP基于TCP,只要能够建立TCP连接,就可以建立BGP连接
触发式更新,不再进行周期更新
只传递路由信息,而不会暴露AS内的拓扑信息
不传递拓扑的原因:
1,拓扑信息的数据量大
2,拓扑信息将暴露AS内部的网络部署清况
BGP协议被称为无类别的路径矢量协议 --- AS - BY - AS
增量更新机制 --- 仅触发更新,无周期更新
使用单播更新发送信息 --- 基于TCP 179号端口工作
具有丰富的路径属性取代IGP中的度量值进行选路,可以由多个属性共同控制协议
可以在流量的进出口实行路由策略 --- 可控性
默认不被用于负载均衡 --- 会通过各种选路规则仅产生一条最佳路由
BGP支持认证和聚合
路径矢量和距离矢量的区别
1,距离矢量中的距离指的是开销,也就是跳数,是以—台路由器作为—跳。而路径矢量中则
是将—个AS看作—个整体,将—个AS作为—跳
2,EGP协议不存在算法的概念, 而距离矢量是根据算法来划分的。BGP协议只是将IGP协议
计算出来的路由信息传递给其他运行BGP的设备
IGP协议的主要任务 --- 将AS内部的未知网段信息计算获取到,而BGP则主要是将IGP协议计算出来的路由信息进行搬运和传递,不去计算路由
IGP协议的评判标准 --- 选路佳,收敛快,占用资源少
BGP协议的关注点 :
可控性
AS之间需要传递大量的路由信息,所谓可控,就是可以更方便的干涉选路,更方便做策略 ,
目的是为了弥补重发布的缺陷 --- 在重发布过程中,会抹除原有度量值,导致出现选路不佳
为了保证路由的可控性,方便选路。BGP协议直接舍弃了开销值,取而代之的是BGP给每条
路由信息附加了丰富的路径属性。我们可以通过多种路径属性进行灵活的选路,使得BGP协
议具有强大的可操控性, 因为BGP需要传递的路由信息的数量非常庞大,所以他无法采用周
期更新,只存在触发更新
可靠性
BGP因为只有触发更新,不存在周期更新,所以为了保证传输的可靠性,直接采用TCP协议作为传输层的协议来工作。使用TCP 的179号端口来工作
IGP协议不选择TCP的原因 :
1,TCP传输速度较慢
2,TCP传输占用资源较大
3,TCP只能实现单播,无法通过组播或广播的形式发送数据,导致IGP无法自动发现邻居关系,只能手工指定
因为BGP采用TCP作为传输层协议,所以,只能通过单播的形式建立邻居关系,需要手工指
定邻居而不能自动发现
AS - BY - AS
在BGP中,始终是将一个AS看作是一个整体。BGP不支持负载均衡。不管到达相同网段存在
多少条路由信息,BGP只会选择其中的一条加载到路由表中
BGP对等体关系
因为BGP采用TCP作为传输层协议,所以,只要在TCP可以正常建立会话的基础上就可以完成BGP的建邻
BGP支持非直连建邻 --- 只要网络可达,即可以实现TCP会话通道的建立,则可以建
立BGP的邻居关系
BGP的非直连建邻是承载在IGP(静态路由)的基础上的
如果建立对等体的两台路由器位于同一个的AS中,则他们的关系就被称为BGP对等体关系
EBGP对等体关系
如果建立对等体的两台路由器位于不同的AS中,则他们的关系就被称为EBGP对等体关系
EBGP对等体一般使用直连建立对等体关系。EBGP邻居之间的报文中TTL值被设置为1
两台路由器之间要建立EBGP对等体关系,需要满足以下条件:
两个路由器属于不同AS
在配置时,peer命令所指定的对等体的IP地址必须路由可达,TCP连接必须正常建立
一般情况下, BGP对等体关系可以非直连建邻,EBGP对等体关系之间是直连建邻的。若EBGP对等体之间需要非直连建邻,则必须数修改据包中的TTL值
IBGP对等体关系
如果建立对等体的两台路由器位于相同的AS中,则他们的关系就被称为IBGP对等体关系
IBGP对等体一般使用非直连建邻。IBGP邻居之间的报文中TTL值被设置为255
在IBGP对等体中,常使用环回地址作为源目IP地址 --- 环回接口稳定,并且可以借助AS内部的IGP和冗余拓扑保证可靠性
BGP的数据包
Route-refresh包 --- 路由刷新包
作用:用来要求对等体重新发送指定地址族的路由信息
一般为本端修改了相关路由策略之后让对方重新发送更新报文,本端执行新的路由策略重新计算BGP路由。双方均支持路由刷新功能
Open包
是TCP连接建立之后发送的第一个报文,用于建立BGP对等体之间的连接关系
Hold Time --- 保活时间
BGP Identifier--- BGP的标识符(RID)
与OSPF中的RID用法相同
全网唯一
获取方式:手工配置>最大环回接口>最大物理接口
BGP需要协商的参数
AS号
BGP的open报文会携带本地的AS号,通过比较两端的AS号可以判断对端是否和本端处于相同AS。
不管这个AS号与本地的AS号是否相同,都不影响BGP对等体的建立
另外,如果对方的AS号与本地指定对等体时写的AS号不同,则导致邻居关系无法建立
peer 12.0.0.2 as-number 100 --- 与12.0.0.2建邻,12.0.0.2上也要配置这条命令,但是把ip地址换成对端的
认证
在BGP中也可以进行邻居间的认证,在数据包中将携带认证口令,口令相
同,则将正常建立邻居关系,不同,则无法建立。该字段永远以MD5方式保存在TCP选项字段
Router- ID(直连唯一)
通过对比OPEN报文中的RID值,可以判断是否相同,若相同则建邻失败
保活时间
不影响BGP对等体的建立
BGP在建立对等体关系时,需要协商该参数
如果在该时间内未收到对端发来的keepalive报文或者update报文,则认为BGP连接中断 --- 180s。若双方保活时间不一致,则按照小的时间进行
报文更新时间 --- 三分之一保活时间 --- 60s
该参数可以设置为0,若设置为0,则代表不发送keepalive报文
keepalive包
作用:周期保活
除了保活机制外,keepalive报文还在open报文协商参数时,临时充当确认报文 --- 确认open报文中的参数是否认可。
update包
作用:用于在对等体之间传递路由信息,用于发布、撤销路由 --- 携带需要传递的路由信息。
需要携带的参数主要是目的网络号、子网掩码信息和路径属性
Notification包
告警机制 --- 当BGP检测到错误状态时(对等体关系建立时、建立之后都可能发送该报文),就会向对等体发送该报文,告知对端错误原因。之后BGP连接会立即中断。
因为BGP传输层使用的是TCP协议,所以,传输的可靠性全部由TCP协议来保证,不需要额
外的设计确认报文
ospf中的hello包可以实现周期性的发现,建立和保活邻居关系
BGP中发现邻居关系 --- 需要通过手工来指定邻居关系
BGP中建立邻居关系 --- 由open报文来完成
BGP中保活邻居关系 --- 由Keeplive包来完成
BGP中的RID和OSPF中的完全一样 --- 由32位二进制构成按照IP地址的格式配置
生成方法:
1,手工配置
2,自动生成(先看本地环回接口,取最大的作为RID,如果没有环回, 则取物理接
口IP最大的作为RID)
手工指定邻居关系时所配置的目标IP地址必须和邻居发来的OPEN报文中的源IP地址一
致,否则将无法正常建立邻居关系
BGP的状态机
BGP的角色
speaker
发送BGP报文的设备被称为BGP Speaker(发言者)
它接收或产生新的报文信息,并发布给其他BGP Speaker。Speaker角色是针对具体报文发送过程而言的,网络中每台BGP路由器均可称为自己发送BG报文的Speaker
peer
相互交换报文的Speaker之间互相称为peer(对等体)
BGP的状态机一共6种,主要描述的是BGP对等体建立过程中的状态变化,而不包含路由收发
过程。因为BGP可以将邻居建立和路由收发分开
Idle(空闲状态) --- 一开始,设备启动BGP进程后先进入空闲状态, 当手工指定邻居关系后,将进入到一个检查环节。需要先确认指定地址在本地路由表中的可达情况。如果可达,则进入到Connect,尝试建立TCP的会话。如果不可达,则邻居关系建立失败,停留在空闲状态
Connect(连接状态) --- 该状态需要完成TCP会话的建立
在该状态下,会开启一个连接重传定时器 --- 32s
如果建立成功,关闭连接重传定时器,进入Opensent状态
如果建立失败,则进入Active状态
如果重传定时器超时,BGP仍然没有收到对等体的响应,那么BGP会继续尝试与对等体建立TCP会话,并一直处于Connect状态
Active状态(尝试状态)
该状态是因为第一次TCP会话建立失败进入的,在该状态会重新尝试建立TCP会话。
如果成功建立,则进入Opensent状态,并会关闭连接重传定时器
如果失败,则停留在Acive状态。
与connect状态共同使用同一个连接重传定时器。
Opensent --- 发送OPEN包,同时也会收到对方发送的OPEN报文。则将检查对方报文中的参数,如果没问题则将发送keeplive包进行确认,之后进入Openconfirm状态。
若发现收到的open报文中的参数不认可,那么BGP会发送notification报文给对等体,并进入idle状态。
对等体关系的指定是双向的,所以当双方都使用peer命令指定了对等体后,均会主动与对等体建立TCP连接。但是这样就会建立两条TCP的双向连接,所以BGP会选择第一个TCP连接断开
Openconfirm --- Open确认状态。等待对方发送keepolive报文确认自己的参数。如果收到keeplive报文则进入下一个状态
在该状态机时,等待对方发送的keepalive报文。若接收到对端发送的keepalive报文,则代表参数协商通过,会进入最终状态
若收到的是notification报文,则转至idle状态
Established --- 标志着邻居关系建立成功
对等体关系建立完成的标志
在该状态下,BGP可以和对等体交互Update报文、keepalive报文、Route-refersh报文和Notification报文
BGP工作过程
1,基于IGP(静态,直连)实现IP可达
2,启动BGP协议,并指定邻居关系
1.邻居之间单播传输报文,通过三次握手机制,建立TCP会话通道
2.后续BGP所有的通讯都将基于TCP会话通道来传输。包括传输所需要的可靠性机制
3,使用open报文和keepalive报文进行对等体关系的建立。open报文用来携带建立对等体关系时所需要使用的参数,keepalive报文用于参数的确认。最终完成对等体关系的建立。生成邻居表
4.使用update报文来共享路由信息。信息中将携带目标网络号、掩码以及路径属性,之后设备将所有的自己发送的以及接收的路由信息记录在一张表中---BGP表
5.将BGP表中的最优路由信息(通过路径属性选择)加载到全局路由表中
6.此时路由收敛完成,将使用keepalive报文进行周期保活,默认保活时间为180s,周期发送时间默认为保活时间的1/3,60s
7.如果出现错误信息,则将使用notification报文进行告警
8.如果出现结构突变,则将使用update报文进行触发更新