ACL
ACL = 从上到下
命中即停
剩余流量继续匹配
最后隐式 deny
FIB
路由器FIB(转发信息库)表中的Flag标记用于快速指示路由条目的状态和类型,实现高效的数据包转发。常见的Flag包括:U(有效/Up)、G(网关/Gateway)、H(主机/Host)、D(动态安装/Dynamic)、M(修改/Modified)、!(拒绝/Reject)等。
FIB表中常见Flag详解:
- U (Up): 路由处于活动状态,该路由是可用的。
- G (Gateway): 路由指向一个网关(即下一跳是路由器),若无此标记,则表示目的地址在直连网段。
- H (Host): 目标是一个独立的主机,非网段。
- D (Dynamic): 此路由是由路由协议(如OSPF, BGP)动态生成的。
- M (Modified): 此路由是由路由后台程序修改的。 -! (Reject/Broken): 拒绝路由,匹配此项的数据包将被丢弃。
其他潜在标志:
- S (Static): 静态路由。
- C (Connected): 直连路由。
- R (Recovered): 恢复动态路由产生的表项。 FIB是RIB(路由信息库)的子集,FIB的Flag主要关注如何转发数据,而不仅仅是路由选择。
策略路由
PBR ( Poliy Based Routing )
- 路由策略 : 华为的
- 可以通过修改路由条目(即对接受和发布的路由进行过滤)来控制流量可达性,这种方式称为路由策略
- 策略路由 : 通用
- 看直接通过依据用户指定的策略(例如: 基于源地址)进行转发, 该策略优于路由表转发,这种方式称为策略路由
- 在路由表中看不到
- 策略路由的查找优先级比路由表高,不改变路由表中的任何内容
路由策略和策略路由的区别
| 路由策略 | 策略路由 |
|---|---|
| 基于控制平面,会影响路由表表项 | 基于转发平面,不会影响路由表表项, 且设备收到报文后,会先查找策略路由进行匹配转发, 若匹配失败,则再查找路由表进行转发 |
| 只能基于目的地址进行策略制定 | 可基于源地址,目的地址,协议类型,报文大小等进行策略制定 |
| 与路由协议结合使用 | 需手工逐跳配置,以保证报文按策略进行转发 |
常用:route-policyfilter-policycost 优先级 等 |
常用:Traffic-filtertraffic-policypolicy-based-route等 |
区别和联系:
- 两者都是为了改变网络流量的转发路径,目的一样,但是实现方式不一样
- 路由策略时通过更改某些路由表的路由条目来影响报文的转发
- 策略路由是通过管理员在路由器上面配置策略强制数据包按照策略转发,策略路由优先于路由表
路由策略
模拟时有两条路相同的情况下可以在接口用ospf cost *来实现选路 route-policy和filter-policy在ospf中实现选路并不是特别好用,主要是bgp使用
ospf举例:
acl 2000
rule 5 deny source 7.7.7.0 0.0.0.255 (1 matches)
rule 10 permit (8 matches)
ospf 1 router-id 1.1.1.1
filter-policy 2000 import
# filter-policy实现过滤掉7.7.7.0/24的路由
area 0.0.0.0
network 1.1.1.0 0.0.0.255
network 12.1.1.0 0.0.0.255
network 13.1.1.0 0.0.0.255
# -------------------------------------------
route-policy aa permit node 10
if-match tag 22
if-match ip-prefix ee
route-policy aa permit node 20
if-match ip-prefix cc
ospf 1
import-route rip 1 route-policy [name]
# 在使用路由策略中,
# 同名字不同node是 或
# 同node中的if-match是 与
# 与 或 非 = and or not
关于route-policy和filter-policy的更多内容在后期的bgp中会详细解释
策略路由
分类:
- 本地策略路由
- 不常用 只能控制自己的流量,下方交换机等传入转发的数据无法策略
- 对本设备发送的报文实现策略路由,比如本机自己发送的ICMP,BGP报文等
- 需要实现不同源地址的报文或者不同长度的报文通过不同的方式进行发送时,可以配置本地策略路由
- 常用 Policy-Based-Route 工具实现
- 调试方式举例:
] ip local policy-based-route [policy name]
- 接口策略路由
- 最常用
- 对流经本设备的转发流量生效,对本设备自己主动发送的报文不生效
- 当用户需要将收到的某些报文通过特定的下一跳地址进行转发时,需要配置接口策略路由
- 匹配的报文通过特定的下一跳出口进行转发,不匹配的则根据路由表转发
- 接口策略路由多应用于负载分担和安全监控
- 常用Traffic-Policy工具实现
- 调用方式举例:
int gx/x/x] traffic-policy [policy name] inbound对于进入接口的流量调用策略路由
- 智能策略路由
- 不常用
- 基于链路质量信息为业务数据流选择最佳链路, HCIP 和 IE 都不教
本地策略路由
只能对由本机主动发送的流量生效,对流经自己(转发的流量)的报文不生效
示例:
]acl number 3000
rule 5 permit ip destination 4.4.4.4 0
# 判断如果目标是4.4.4.4
]policy-based-route test permit node 10
if-match acl 3000
apply ip-address next-hop 13.1.1.3
# 如果匹配到acl 3000所匹配的数据包就强制此数据包的下一跳转发的地址
]ip local policy-based-route test
# 调用本地策略路由
路由表:
4.4.4.0/24 OSPF 10 3 D 12.1.1.2 GigabitEthernet 0/0/0
# 路由器路由追踪实际所走:
]tracert 4.4.4.4
traceroute to 4.4.4.4(4.4.4.4), max hops: 30 ,packet length: 40,press CTRL_C to break
1 13.1.1.3 30 ms 20 ms 20 ms
2 34.1.1.4 10 ms 20 ms 20 ms
3 * 4.4.4.4 20 ms 20 ms
# PC路由追踪依然走ospf路由
PC>tracert 4.4.4.4
traceroute to 4.4.4.4, 8 hops max
(ICMP), press Ctrl+C to stop
1 1.1.1.1 31 ms 47 ms 47 ms
2 12.1.1.2 31 ms 47 ms 47 ms
3 24.1.1.4 62 ms 63 ms 47 ms
4 4.4.4.4 62 ms 63 ms 62 ms
# 查看本地策略路由
]dis policy-based-route
policy-based-route : test
Node 10 permit :
if-match acl 3000
apply ip-address next-hop 13.1.1.3
接口策略路由
注意:如果是华为eNSP模拟器路由器只能使用ar3260才可以生效
1. 分类
# acl匹配流量
]acl 2001
rule permit source 1.1.1.2 0
]acl 2002
rule permit source 1.1.1.3 0
# 调用acl对类的流量进行匹配
]traffic classifier EngineerD
EngineerD]if-match acl 2001
]traffic classifier FinanceD
FinanceD]if-match acl 2002
# 查看分类
]dis traffic classifier user-defined
2. 动作
]traffic behavior EngineerD
EngineerD]redirect ip-nexthop 12.1.1.2
]traffic behavior FinanceD
FinanceD]redirect ip-nexthop 13.1.1.3
# 查看动作
]dis traffic behavior user-defined
3. 将动作和分类关联到策略
]traffic policy test
trafficpolicy-test]classifier EngineerD behavior EngineerD
trafficpolicy-test]classifier FinanceD behavior FinanceD
# 查看策略
]dis traffic policy user-defined
4. 将策略分配到接口
# 注意,目前基于接口的策略路由只针对入方向生效
G*/*/*]traffic-policy test inbound
# 查看分配到接口的策略
]dis traffic-policy applied-record
5. 结果
1.1.1.2 PC
traceroute to 4.4.4.4, 8 hops max
(ICMP), press Ctrl+C to stop
1 1.1.1.1 31 ms 47 ms 47 ms
2 12.1.1.2 31 ms 47 ms 47 ms
3 24.1.1.4 31 ms 47 ms 62 ms
4 *4.4.4.4 47 ms 63 ms
1.1.1.3 PC
traceroute to 4.4.4.4, 8 hops max
(ICMP), press Ctrl+C to stop
1 1.1.1.1 31 ms 47 ms 47 ms
2 13.1.1.3 47 ms 62 ms 32 ms
3 34.1.1.4 47 ms 62 ms 47 ms
4 4.4.4.4 47 ms 47 ms 31 ms
BFD技术
Bidirectional Forwarding Detection
双向转发检测
华为目前使用版本V1 使用端口 UDP 3784
QOS报文优先级7 最高
毫秒级链路故障检测,通常结合三层协议(如静态路由,vrrp,ospf,BGP等)实现链路故障快速检查和切换
作用:
- 检测二层非直连故障
- 加快三层协议收敛
静态路由联动BFD
静态BFD
配置:
]bfd
bfd]quit
]bfd 1 bind peer-ip 12.1.1.2 source-ip 12.1.1.1
]discriminator local 1
]discriminator remote 2
]commit
绑定:
]ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50 track bfd-session 1
另一台设备相同配置
]discriminator local 2
]discriminator remote 1
但是要互为对称
补充:
查看路由表中的静态路由协议
]dis ip routing-table protocol static
查看BFD连接情况
dis bfd session all [verbose] #详细信息
动态BFD
]bfd
bfd]quit
]bfd [name] bind peer-ip 12.1.1.2 source-ip 12.1.1.1 auto
bfd]commit
]ip route-static 2.2.2.0 255.255.255.0 12.1.1.2 preference 50 track bfd-sessio [name]
动态路由联动BFD
ospf 联动
全部接口启用
]bfd
bfd]quit
]ospf 1 route-id 1.1.1.1
ospf-1]bfd all-interfaces enable
ospf-1]network ......
单接口指定
g0/0/1]ospf bfd enable
BFD 单臂回声
one arm echo
此功能三层上必须直连才行 中间可以有交换机
]bfd
bfd]quit
]bfd test bind peer-ip 12.1.1.2 interface Ethernet0/0/0 source-ip 21.1.1.1 one-arm-echo
test] discriminator local 100
test] commit
source 21.1.1.1 是BFD的源地址
interface E0/0/0 12.1.1.1 作为出接口
peer-ip 12.1.1.2 作为对端地址,BFD需要依靠高地址探测对方的MAC地址同时作为建立BFD会话使用
意思是说,对端是12.1.1.2 要用接口E0/0/0口发送并且作为目的地址
E0/0/0的ip为12.1.1.1
source-ip要同路由器的不同ip来作为源地址发送,不能自己给自己发
然后指定下这是单臂回声的命令
DHCP进阶
全局DHCP配置
]dhcp enable
]ip pool [name]
pool] gateway-list 192.168.1.1
pool] network 192.168.1.0 mask 255.255.255.0
pool] dns-list 8.8.8.8 114.114.114.114
pool] excluded-ip-address 192.168.1.2 [192.168.1.10] # 写第二个就是2-10
pool] lease day 3 hour 0 minute 0
G0/0/0] ip add 192.168.1.1 24
G0/0/0] dhcp select global
基于接口的DHCP配置
接口地址池优先于全局地址池分配地址,即若接口上存在接口地址池,即使全局地址池也存在,客户端也会优先从接口地址池中获取地址。
]dhcp enable
G0/0/0] ip add 192.168.1.1 24
G0/0/0] dhcp select interface
G0/0/0] dhcp server dns-list 8.8.8.8 114.114.114
G0/0/0] excluded-ip-address 192.168.1.2 [192.168.1.10]
G0/0/0] lease day 3 hour 0 minute 0
查看详细信息
dis ip pool interface e0/0/0 used
DHCP 冲突检测
此命令应用于DHCP服务端,为防止ip地址重复分配导致地址冲突,DHCP服务器为客户端分配地址前,需要先执行 dhcp server ping 命令发送ping报文探测地址的使用情况
S3700/5700/6700系列交换机从V100R006C00版本开始在接收到客户端的Discover报文时就开始ping准备分给客户端的地址
DHCP中继
由于DHCP服务器和用户不在同一个vlan(即不在一个广播域),因此,dhcp广播报文无法发送到dhcp服务器,此时在核心交换机上面配置dhcp中继,将dhcp广播请求变为单薄发送到dhcp服务器,源地址由0.0.0.0变成相应vlanif接口的ip地址,目标地址由255.255.255.255变成dhcp服务器的单播地址,广播包变成单播包被中继到dhcp服务器,完成地址分配
服务器配置:
ip pool vlan_9
gateway-list 192.168.9.1
network 192.168.9.0 mask 255.255.255.0
dns-list 8.8.8.8
interface Ethernet0/0/0
ip address 12.1.1.2 24
dhcp select global
中继交换机配置:
interface Vlanif9
ip address 192.168.9.1 255.255.255.0
dhcp select relay
dhcp relay server-ip 12.1.1.2
DHCP Snooping
防止非法的DHCP服务器
设置snooping后默认所有的端口都是非信任口,要在接口添加trusted
] dhcp enable
] dhcp snooping enable
vlan*] dhcp snooping enable
# 注意事vlan* 不是vlanif
int G*] dhcp snooping trusted
# 因为默认全部都是非信任口,所以要自己定义那个口是可以信任的
安全防护
防止DHCP饿死攻击
# 对DHCP Request报文的源地址跟Chaddr进行一致性检查,不一致直接丢弃报文
# 在所有用户连接交换机的接口
] port-group group-member G* to G*
port-group] dhcp snooping check dhcp-chaddr enable
防止DHCP中间人攻击
# 查看snooping绑定表
# 这个表是交换机窥探dhcp报文得来的 是存在缓存里的,重启会消失
] dis dhcp snooping user-bind all
# 设置一个表的自动备份,防止私接傻瓜交换机 文件名一定是.tbl
] dhcp snooping user-bind autosave flash:/[name].tbl
# 手动添加snooping绑定表,适合特殊情况下手动配置ip的用户
] user-bind static ip-address 192.168.1.1 mac-address 5489-986F-1DAA interface G0/0/4 vlan 8
# 一些老版本的交换机查看手动绑定的命令不同
] dis user-bind all
# 开启放中间人攻击
] arp dhcp-snooping-detect enable
防止DHCP仿冒攻击
snooping 与 IPSG ( IP Source Guard )技术联动
针对于源ip进行欺骗的攻击行为
例如攻击者仿冒合法用户的ip地址来向服务器发送ip报文
交换机开启IPSG功能后,会对进入交换机端口的报文进行合法性检查,并对报文进行过滤(合法转发,不合法丢弃)
报文检查项可以是源ip,源mac,vlan和物理端口号的若干种组合
例如交换机端口视图下:
IP+MAC
IP+Vlan
IP+MAC+Vlan
...等组合
交换机vlan视图下:
IP+MAC
IP+物理端口
IP+MAC+物理端口
...等组合
# 默认MAC IP等全部开启合法性检查
interface / vlan* ] ip source check user-bind enable
# 单独的
interface / vlan* ] ip source check user-bind check-item ?
ip-address IP address
mac-address MAC address
vlan Virtual LAN
MSTP + VRRP
MSTP
Multiple Spanning Tree Protocol
华为交换机出厂默认开启MSTP技术
默认情况下所有的vlan都属于组0 (instance 0 )
默认的mstp域名是交换机的桥MAC地址
默认的Revision level是0
默认出厂配置︰
[sw2]dis stp region-configuration
Oper configuration
Format selector : 0
Region name : 4c1fcc002299
Revision level : 0
instance VLANs Mapped
0 1 to 4094
一般设计可靠型企业网分为两种
- 第一种 VRRP+MSTP (传统, 公有, 造价小, 技术复杂, 管理难度大, 旧网改造, 老旧设备)
- 第二种 堆叠 (推荐, 现代, 造价高, 技术简单,管理简单, 私有技术, 新建网络)
MST域
(Multiple Spanning Tree Region),由交换网络中的多台交换设备以及他们之间的网段所构成,同一个MST域的设备具有以下特点
- 都启动了MSTP
- 具有相同的域名
- 具有相同的VLAN到生成树实例映射配置
- 具有相同的MSTP修订级别配置
MST域内可以生成多棵生成树,每棵生成树都被称为一个MSTI(Multiple Spanning tree Instance)
MSTI之间彼此独立,且每个MSTI的计算过程基本与RSTP的计算过程相同
-
注意1 : VLAN映射表是MST域的属性,它描述了VLAN和MSTI之间的映射关系,MSTI可以与一个或多个VLAN对应,但一个VLAN只能与一个MSTI对应。
-
注意2∶MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的各个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
-
注意3:每个MSTI ( MST Instance )都有一个标识( MSTID ) ,MSTID是一个两字节的整数。VRP平台支持16个MST Instance ,MSTID取值范围是0~步~15(软件升级之后取值范围0-48 ),默认所有VLAN映射到MST Instance 0。
调试命令:
]dis stp region-configuration
# 查看mst域
dis stp instance 2
# 查看组2
dis stp brief
# 看mstid对应的接口状态
配置命令:
] stp region-configuration
mst-region] region-name [name]
# 区域所有交换机区域名字名字要相同
mst-region] revision-level 1
mst-region] instance 1 vlan 2 to 3
mst-region] instance 2 vlan 4 to 5
mst-region] active region-configuration
# 一定要敲 active region-configuration 不然配置全部不生效
# 所有的汇聚和核心交换机都要做(本质就是两条线连到主备的提前做好vlan trunk的交换机),配置是一样的,可以直接复制粘贴
配置优先级命令:
] stp instance 1 priority [number]
or
主] stp instance 1 root primary // 主交换机配置
主] stp instance 2 root secondary
备] stp instance 2 root primary //备份交换机配置
备] stp instance 1 root secondary
注意1 :VLAN映射表是MST域的属性,它描述了VLAN和MSTI之间的映射关系,MSTI可以与一个或多个VLAN对应,但一个VLAN只能与一个MSTI对应。
注意2∶MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的各个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
注意3 :每个MSTI(MST Instance)都有一个标识(MSTID),MSTID是一个两字节的整数。VRP平台支持16个MST Instance ,MSTID取值范围是0~15(软件升级之后取值范围0-48 ),默认所有VLAN映射到MST Instance 0。
生成树的缺点: 链路被阻塞后将不承载任何流量,无法在VLAN间实现数据流量的负载均衡,从而造成带宽浪费;导致部分VLAN路径不通;造成次优路径。
VRRP
虚拟网关冗余协议(Virtual Router Redundancy Protocol),也叫三层网关冗余协议
VRRP能够在不改变组网的情况下,将多台路由器(或者三层交换机)虚拟成一个虚拟路由器,通过配置虚拟路由器的ip地址为默认网关,实现网关的备份
协议版本:
- VRRPv2(常用) 仅适用于ipv4
- VRRPv3 适用于ipv4和ipv6
VRRP协议报文:
Advertisement报文(心跳报文), 目的ip地址是组播:224.0.0.18,目的MAC地址是: 0100:5e00:0012, 协议号为: 112
-
注意1 : Priority:设备在备份组中的优先级,取值范围是0~255。可配置范围1~254, 0表示设备停止参与VRRP备份组,用来使备份设备尽快成为Master设备,而不必等到计时器超时(undo ip add会触发);255则保留给IP地址拥有者,无法手工配置,只要工作正常就是Master路由器;设备缺省优先级值是100
-
注意2 : IP地址拥有者(IP Address Owner) : 如果一个VRRP设备将真实的接口IP地址配置为虚拟路由器IP地址,则该设备被称为IP地址拥有者。如果IP地址拥有者是可用的,则它将一直成为Master,优先级自动配置为255,无法手工配置
-
注意3 : 虚拟MAC地址( Virtual MAC Address) : 虚拟路由器根据vrid生成的MAC地址。一个虚拟路由器拥有一个虚拟MAC地址,格式为:00-00-5E-00-01-{vrid}
-
注意4 : 一个接口下可以起多个VRRP组,但是虚拟IP地址必须和接口IP地址在同一个网段,不然会报错:Error: The virtual IP address is not within a subnet on this interface. 或者使用sub子地址形式解决
选举规则
比较优先级的大小,优先级高者当选为Master设备。当两台设备优先级相晁时,如果已经存在Master,则其保持Master身份,无需继续选举;如果不存在Master,则继续比较接口IP地址大小,接口IP地址较大的设备当选为Master设备。
当设备状态变为master后,会立刻发送免费ARP来刷新下游设备的MAC表项,从而把用户的流量引到此台设备上来。
VRRP+主备+BFD
查看命令:
dis vrrp [brief]
修改抢占时延时间:
G0/0/0] vrrp vrid 1 preempt-mode timer delay 50
主设备
G0/0/0] ip address 192.168.10.254 255.255.255.0
G0/0/0] vrrp vrid 1 virtual-ip 192.168.10.1
# 配置虚拟网关地址
G0/0/0] vrrp vrid 1 priority 105
# 默认优先级是100,越大优先级越高,同优先级比ip,越大越优先
G0/0/0] vrrp vrid 1 track interface gi 0/0/1 [reduced [Number]]
# 联动上联接口,检测到g0/0/1口down后会-10优先级
# [reduced [Number]] 自定义检测down后减多少优先级,默认-10
# 此命令只在主设备(Master)中配置即可
# VRRP联动BFD
]bfd
bfd]quit
]bfd [name] bind peer-ip 12.1.1.2 source-ip 12.1.1.1 auto
session-name]commit
# bfd两边都要配置,对端地址和源地址调换,对端设备不支持bfd使用bfd单臂回声
G0/0/0] vrrp vrid 1 track bfd-session [name] [reduced [Number]]
# 接口vrrp绑定bfd , 同样配置在主设备(Master)中
备份设备:
G0/0/0] ip address 192.168.10.253 255.255.255.0
G0/0/0] vrrp vrid 1 virtual-ip 192.168.10.1
# 两边的vrid要保持一致
VRRP负载均衡
用两个子网的方式进行负载均衡
路由器(不常用)
第一台设备:
G0/0/0] ip address 192.168.10.254 255.255.255.0
G0/0/0] ip address 192.168.20.254 255.255.255.0 sub
G0/0/0] vrrp vrid 1 virtual-ip 192.168.10.1
G0/0/0] vrrp vrid 1 priority 105 # 在这里用优先级控制两台设备的双向备份
G0/0/0] vrrp vrid 2 virtual-ip 192.168.20.1
第二台设备
G0/0/0] ip address 192.168.10.253 255.255.255.0
G0/0/0] ip address 192.168.20.253 255.255.255.0 sub
G0/0/0] vrrp vrid 1 virtual-ip 192.168.10.1
G0/0/0] vrrp vrid 2 virtual-ip 192.168.20.1
G0/0/0] vrrp vrid 2 priority 105 # 在这里用优先级控制两台设备的双向备份
交换机(常用)
一个vlan一个vrrp组 sw2 vrrp 2 vlan 2 优先级 105 vrrp 3 vlan 3 优先级 105
sw3 vrrp 4 vlan 4 优先级 105 vrrp 5 vlan 5 优先级 105
[sw2-Vlanif2] ip add 192.168.2.254 24
[sw2-Vlanif2] vrrp vrid 2 virtual-ip 192.168.2.1
[sw2-Vlanif2] vrrp vrid 2 priority 105
[sw2-Vlanif3] ip add 192.168.3.254 24
[sw2-Vlanif3] vrrp vrid 3 virtual-ip 192.168.3.1
[sw2-Vlanif2] vrrp vrid 3 priority 105
[sw2-Vlanif4] ip add 192.168.4.254 24
[sw2-Vlanif4] vrrp vrid 4 virtual-ip 192.168.4.1
[sw2-Vlanif5] ip add 192.168.5.254 24
[sw2-Vlanif5] vrrp vrid 5 virtual-ip 192.168.5.1
sw3直接粘贴到命令中的方式:
int vlanif 2
ip add 192.168.2.253 24
vrrp vrid 2 virtual-ip 192.168.2.1
int vlanif 3
ip add 192.168.3.253 24
vrrp vrid 3 virtual-ip 192.168.3.1
int vlanif 4
ip add 192.168.4.253 24
vrrp vrid 4 virtual-ip 192.168.4.1
vrrp vrid 4 priority 105
int vlanif 5
ip add 192.168.5.253 24
vrrp vrid 5 virtual-ip 192.168.5.1
vrrp vrid 5 priority 105
MSTP+VRRP配置
# MSTP
]stp region-configuration
region]region-name mstp
region]revision-level 1
region]instance 1 vlan 2 3
region]instance 2 vlan 4 5
region]active region-configuration
# 所有交换机都要配置 且相同
[Hexin_1]stp instance 1 root primary
[Hexin_1]stp instance 2 root secondary
[Hexin_2]stp instance 1 root secondary
[Hexin_2]stp instance 2 root primary
# VRRP
[Hexin_1-Vlanif2] ip add 192.168.2.254 24
[Hexin_1-Vlanif2] vrrp vrid 2 virtual-ip 192.168.2.1
[Hexin_1-Vlanif2] vrrp vrid 2 priority 105
[Hexin_1-Vlanif2] vrrp vrid 2 track interface gi 0/0/1
[Hexin_1-Vlanif2] vrrp vrid 2 track interface gi 0/0/6
[Hexin_1-Vlanif3] ip add 192.168.3.254 24
[Hexin_1-Vlanif3] vrrp vrid 3 virtual-ip 192.168.3.1
[Hexin_1-Vlanif2] vrrp vrid 3 priority 105
[Hexin_1-Vlanif2] vrrp vrid 3 track interface gi 0/0/1
[Hexin_1-Vlanif2] vrrp vrid 3 track interface gi 0/0/6
[Hexin_1-Vlanif4] ip add 192.168.4.254 24
[Hexin_1-Vlanif4] vrrp vrid 4 virtual-ip 192.168.4.1
[Hexin_1-Vlanif5] ip add 192.168.5.254 24
[Hexin_1-Vlanif5] vrrp vrid 5 virtual-ip 192.168.5.1
Hexin_2直接粘贴到命令中的方式:
int vlanif 2
ip add 192.168.2.253 24
vrrp vrid 2 virtual-ip 192.168.2.1
int vlanif 3
ip add 192.168.3.253 24
vrrp vrid 3 virtual-ip 192.168.3.1
int vlanif 4
ip add 192.168.4.253 24
vrrp vrid 4 virtual-ip 192.168.4.1
vrrp vrid 4 priority 105
vrrp vrid 4 track interface gi 0/0/4
vrrp vrid 4 track interface gi 0/0/6
int vlanif 5
ip add 192.168.5.253 24
vrrp vrid 5 virtual-ip 192.168.5.1
vrrp vrid 5 priority 105
vrrp vrid 5 track interface gi 0/0/4
vrrp vrid 5 track interface gi 0/0/6
# 眼熟吧,就是俩加一块
# OSPF
# Hexin_1
ospf 1
area 0
net 192.168.2.0 0.0.0.255
net 192.168.3.0 0.0.0.255
net 192.168.4.0 0.0.0.255
net 192.168.5.0 0.0.0.255
net 12.1.1.0 0.0.0.255
# Hexin_2
ospf 1
area 0
net 192.168.2.0 0.0.0.255
net 192.168.3.0 0.0.0.255
net 192.168.4.0 0.0.0.255
net 192.168.5.0 0.0.0.255
net 23.1.1.0 0.0.0.255
# Router
ospf 1
area 0
net 12.1.1.0 0.0.0.255
net 23.1.1.0 0.0.0.255
[Router-ospf-1]default-route-advertise always
# 动态的向底下两个核心设备下发一条动态的缺省路由
# 目前暂不用 先使用静态路由
# 核心配置静态路由并且互为备份
[Hexin_1]ip route-static 0.0.0.0 0 12.1.1.1
[Hexin_1]ip route-static 0.0.0.0 0 23.1.1.1 preference 65
[Hexin_2]ip route-static 0.0.0.0 0 23.1.1.1
[Hexin_2]ip route-static 0.0.0.0 0 12.1.1.1 preference 65
# 对于防火墙来说,来回路径要一致
# 通过修改ospf的开销值来保证来回路径一致
[Hexin_1]int vlanif 4
[Hexin_1-Vlanif4]ospf cost 4
[Hexin_1]int vlanif 5
[Hexin_1-Vlanif5]ospf cost 4
[Hexin_2]int vlanif 2
[Hexin_2-Vlanif2]ospf cost 4
[Hexin_2]int vlanif 3
[Hexin_2-Vlanif3]ospf cost 4
OSPF
OSPF 基础回顾
OSPF (Open Shortest Path First)
开放式最短路径优先
基于链路状态的内部网关协议
OSPF两层结构 (层次化结构)
- 骨干区域 (area 0)
- 常规区域
OSPF路由优先级 : 10
回顾 RIP 介绍
- 是一种基于距离矢量算法的路由协议,应用在大型网络中存在收敛速度慢, 度量值不科学, 可扩展性差等问题
- 逐跳收敛 收敛慢,故障恢复时间长
- 分布式路由计算 缺少对全局网络拓扑的了解
- 以"跳数"为度量 存在选择次优路径的风险
查看ospf邻居表 : dis ospf peer brief
OSPF
- 路由信息传递与路由计算分离
- 基于SPF(Shortest Path First)算法
- 以"累计链路开销"作为选路参考 计算链路累计带宽
注意: 所谓的Link State (链路状态)指的就是路由器的接口状态.在ospf中路由器的接口的链路状态包含:
- 该接口的IP地址及掩码
- 该接口带宽
- 该接口所连接的邻居
- 该接口的链路类型
- 等等 链路状态就是ospf中用于计算路由的SPF算法的原材料,可以简单理解为原始路由信息的综合体
定时更新与触发更新
- 定时更新: 每1800s更新一次,3600s失效
- 触发更新: 当链路状态发生变化后,立即发送链路状态更新
OSPF报文类型
- Type 1 : Hello 发现和维护邻居关系
- Type 2 : Database Description 交互链路状态数据库摘要
- Type 3 : Link State Request 请求特定的链路状态信息
- Type 4 : Link State Update 发送详细的链路状态信息
- Type 5 : Link State Ack 发送确认报文
OSPF工作工程
- 邻居建立
- 同步链路状态数据库
- 计算最优路由
发现并建立邻居 - Hello报文 :
- 邻居发现 : 自动发现邻居路由器
- 邻居建立 : 完成Hello报文中的参数协商, 建立邻居关系
- 邻居保持 : 通过Keepalive机制,检测邻居运行状态
OSPF 多区域
- OSPF引入区域(Area)的概念,酱一个OSPF域划分成多个区域,可以使OSPF支撑更大规模组网
- OSPF多区域的设计减小了LSA(链路状态通告 Link State Advertisement)泛洪的范围,有效的把拓扑变化的影响控制在区域内,达到网络优化的目的
- 在区域边界可以做路由汇总,减小了路由表规模
- 多区域提高了网络扩展性,有利于组建大规模网络
路由器所有接口都在一个区域叫区域内路由器 (IR : Internal Router)
路由器接口连接在不同区域中叫区域边界路由器 (ABR : Area Border Router)
区域内路由器 (IR : Internal Router)
区域边界路由器 (ABR : Area Border Router) 一定要连着一个骨干区域
骨干路由器 (BR : Backbone ROuter)
自治系统边界路由器(ASBR : Autonomous System Boundary Router) 比如一个RIP区域和OSPF区域链接的路由器
OSPF 开销计算
思科叫度量值 Metric
Cost = 沿途累加( 100M / 链路带宽) 100M 属于默认参考带宽
串行链路的带宽:2.048Mbps 开销就等于100/2.048≈48
所以越小越好, 50M带宽100/50=2 开销越小带宽越大
ospf-1]bandwidth-reference [1-2147483648]
单位 Mbits/s 如果要配置请在全部机器中配置相同的默认参考带宽
G0/0/1] ospf cost [1-65535] (接口必须是路由进入方向)
直接在接口中可以修改cost值, 由此可以自定义路由选路
OSPF 虚链路
reset ospf process 重启ospf进程 dis ospf error
旧网改造用,迫不得已才用,属于骨干区域的延申
R2 route-id 2.2.2.2 :
ospf 1
area 2
vlink-peer 3.3.3.3 (3.3.3.3 是对方的route-id)
R3 route-id 3.3.3.3 :
ospf 1
area 2
vlink-peer 2.2.2.2
dis ospf vlink
# 查看虚链路建立状态
OSPF 邻居建立过程
LSA (链路状态通告 Link State Advertisement)
实际上没有LSA这个报文,是封装在LSU 里面 U = Update
LSU (链路状态更新 Link State Update)
一条LSU里面可以包含多条LSA
LSDB (链路状态数据库 Link State DataBase)
dis ospf lsdb
互相发送hello报文 -> 邻居 -> 泛洪LSA(相互传递链路信息) -> LSDB -> 运行SPF算法 -> 生成最优路径 -> 路由表
OSPF 的五种数据包
Hello : 发送自身的router-id, 自报家门
DBD : Data Base Description 数据库描述摘要 (目录)
LSR : Link State Request 链路状态请求, 请求某链路的详细路由信息
LSU : Link State Update 链路状态更新,对请求的回应 **只有这里面有路由信息**
LSAck : Link State Acknowledge 链路状态确认
邻居建立 -> 同步链路状态数据库 -> 计算最优路由
邻接 : 链路状态数据同步 Full
邻居 : 进展到 two-way
邻居(Neighbor)和邻接(Adjacency)是两个不同的概念,OSPF路由器之间建立邻居关系后,进行LSDB同步,最终形成邻接关系
在广播型网络及NBMA网络上,DRother之间只能建立邻居关系,不能建立邻接关系,DRother与DR/BDR路由器之间会建立邻接关系,DR与BDR之间也会建立邻接关系
邻接建立:
- down : 这是邻居的初始状态,表示没有从邻居收到任何信息
- init : 初始化状态 准备建立邻居,在此状态下,路由器已经从邻居收到了hello报文,但是自己的router-id不在所受到的hello报文的邻居列表中,表示尚未与邻居建立双向通信关系
- two-way : 相互得知对方的Router-id 等信息(相互认识)在此状态下,路由器发现自己的router-id存在于收到的hello报文中的邻居列表中,已确认可以双向通信
- exstart : 准备开始交互链路信息 (选举DR BDR)在此状态下,路由器开始向邻居发送DBD报文,DR/BDR或者说Master/Slave关系是在此状态下形成的,初始DBD序列号也是在此状态下确认的,在此状态下发送的DBD报文不包含链路状态描述
- exchange : 正式交付链路信息 (ospf隐藏确认机制,确定主从关系) 此状态下,路由器与邻居之间发送包含链路状态信息摘要的DBD报文
- loading : 确认链路信息交互 此状态下,路由器与邻居之间互相发送LSR,LSU,LSAck报文
- full : 完全同步,此状态下,LSDB同步过程完成,路由器与邻居之间形成了完全的邻接关系
邻居建立条件:
- 直连通信
- network宣告网段
- 认证通过
- area id一致
- hello dead 时间一致
- 查看命令
dis ospf int g0/0/0ordis ospf peer [router-id] - 修改命令
g0/0/0]ospf timer [hello,dead ...] [1-65535]需要对端也修改,一般不动
- 查看命令
- option ebit位,N bit位一致 (stub nssa 特殊区域)
- STUB区域: E bit位= 0 N bit位=0
- NSSA区域: E bit位= 0 N bit位=1
- 掩码一致 (针对多路访问网络 以太网,NBMA(帧中继)) 如果是串口点对点的情况下可以不一致
- 静默端口
- MTU 最大传输单元 默认1500字节 包含在BDB报文中 (思科检查, 华为默认不检查,也可以配置
g0/0/0]ospf mtu-enable) - 版本一致 IPV4 V2版本 IPV6 V3版本
- router-id 不能冲突
OSPF DR和BDR选举
DR : designate router 指定路由器 (班长)
BDR : backup designate router 备份指定路由器 (副班长)
目的 : 减少重复LSA报文的发送,减少邻接关系的建立,提升ospf协议报文的传输效率,减低网路资源的消耗
注意 : DR和BRD的选举仅在多路访问环境才会选举,在点到点的化境不选举DR和BDR
DR与BDR,DRother建立邻接关系,BDR与DR,DRother建立邻接关系,DRother之间只建立邻居关系
网络类型 :
- Point-to-point (点对点) : 邻接
- PPP 链路
- LAPB 链路 (少见)
- HDLC 链路 (少见)
- Broadcast (广播) :
- 以太网链路
- NBMA (Non-broadcast multiple access network 非广播多路访问网络):
- 帧中继链路 (少见)
- ATM链路 (少见)
- P2MP (Point to multiple point) 早期帧中继用
NBMA 网络中的问题:
- N*(n-1)/2个邻接关系,管理复杂
DR与BDR的作用:
- 减少邻接关系
- 降低OSPF协议流量
DR 复杂而在MA(Multiple access)网络建立和维护邻接关系并负责LSA的同步
DR 与其他所有路由器形成邻接关系并交换链路状态信息,其他路由器之间不直接交换链路状态信息,这样就大大减少了MA网络中的邻接关系数量及交换链路状态信息消耗的资源
DR 一旦出现故障,其与其他路由器之间的邻接关系将全部失效,链路状态数据库也无法同步,此时就需要重新选举DR再与非DR路由器建立邻接关系,完成LSA的同步,为了规避单点故障风险,通过选举备份指定路由器BRD,在DR失效时快速接管DR的工作
选举规则:
- 优先级 + router-id,越大越优先.默认ospf接口优先级都是1 接口的优先级相等时,router-id越大越优先
- 优先级为0 表示不参与DR和BDR的选举
- 遵循不抢占原则 (新加路由器或者重启之后优先级更高也不会更改原来的DR和BDR)
修改优先级:
int g0/0/0
ospf dr-priority 10
dis ospf peer
# 查看ospf邻居
dis ospf int g 0/0/2
# 查看接口的ospf状态
注意:
- 在Broadcast型网络里面默认所有路由器发送hello报文的目标地址都是224.0.0.5
- DRother发送(LSU和LSAck)目标地址是224.0.0.6
- DR, BDR发送(LSU和LSAck)目标地址是224.0.0.5
- OSPF 二层广播地址为0100:5e00:0005
OSPF 路由引入
需要在ASBR中配置
ospf 1
import-route rip [默认就是1]
# 将Rip 1 的路由引入OSPF区域
import-route static
# 将静态路由引入OSPF区域
rip 1
import-route ospf 1
# 将OSPF 1 区域的路由引入Rip
# O_ASE OSPF_Autonomous system external ospf自治系统外部路由
dis ospf routing 9.9.9.0
cost : 1 type : type 2
# 查看类型
ospf 1
import-route rip type 1
# 将外部路由引入的类型改为1
ospf 1
default-route-advertise always
# 使用OSPF动态下发默认路由
OSPF路由种类
- ospf : ospf普通路由
- O_ASE : OSPF_Autonomous system external ospf自治系统外部路由
- type 1 : cost 沿途累加
- type 2 : 默认种类 cost值始终1 不累加, 一般情况下只有一个ASBR, 有多个出口的时候才有必要选路
- O_NSSA : ospf特殊区域路由
OSPF LSA
LSA : Link state advertise 链路状态宣告 封装在LSU里面
有三张表
- 邻居表
dis ospf peer brief - 拓扑表( 链路状态数据库 )
dis ospf lsdb - 路由表
dis ip routing-table
LSA共有11个类型,但是6 9 10 11 目前几乎无用
LSA是路由器之间链路状态信息的载体,LSA是LSDB的最小组成单位,也就是说LSDB由一条条LSA构成的
所有的LSA都拥有相同的头部,关键字段如下
- LS age : 此字段表示LSA已经生存的时间,单位是秒
- LS type : 此字段标识了LSA的格式和功能,常见的LSA类型有五种
- Link State ID : 此字段是该LSA所表述的那部分链路的表示,例如Router ID等
- Advertising Router : 此字段是产生此LSA的路由器的Router ID
- LS sequence number : 此字段用于检测旧的和重复的LSA
LS type , Link State ID和Advertising Router的组合共同标识一条LSA
1型LSA : Router-LSA
- 每个路由器都可以发出
- 仅在自己的area区域发送
- 通告自身信息(自报家门) 描述了设备的链路状态和开销
- 调试:
dis ospf lsdb查看表dis ospf lsdb router查看router-lsa类型的条目
LSA链路类型(非网络类型)
| Link Type | Link ID | Link Data |
|---|---|---|
| P2p | 邻居的RID | 自己的IP |
| Stub | 网络号 | 掩码 |
| Transit | DR的接口地址 | 自己的IP |
| Vritual Link | 邻居的RID | 自己的IP |
注意 : 只有在1型LSA里面才有 链路类型 !! 1型LSA最复杂,其他类型LSA没有链路类型
Type : 连接类型(并非OSPF定义的四种网络类型) Router LSA描述的链接类型主要有:
- p2p : 描述一个从本路由器到邻居路由器之间的点到点链接,属于拓扑信息
- TransNet : 描述一个从本路由器到一个Transit网段(例如MA网段或者NBMA网段)的链接,属于拓扑信息
- StubNet : 描述一个从本路由器到一个Stub网段(例如Loopback环回接口)的链接,属于路由信息
2型LSA : Network LSA
- 只有DR可以发出
- 仅在自己的area区域发送
- 通告DR的位置和身份,以及本广播域的所有成员及链路信息
- 调试
dis ospf lsdbdis ospf lsdb network
注意 : 2型LSA Link State ID 代表DR的接口IP地址
在1型和2型的LSA中,包括了拓扑信息和路由信息
OSPF将依据SPF算法和各类LSA进行最短路径树的计算:
- Phase 1 : 依据1型LSA中的p2p,TransNet以及2型LSA,构建SPF树
- Phase 2 : 依据1型LSA中的Stub以及2型LSA计算最优路由
3型LSA : Network Summary LSA
- 只能由ABR发送
- 可以穿越整个OSPF自治系统(中间需要各个ABR中转)
- 将不同区域的ospf链路信息相互传递
dis ospf lsdb summary- Metric : ABR 到达目的网段的开销值
注意 : 3型LSA Link State ID 代表网段路由信息
- 一条 3 型 LSA 只能描述一条路由信息
- 3 型 LSA 只能传递路由信息, 并未传递原始且复杂的链路状态信息
4型LSA : ASBR Summary LSA
- 只能由各ABR发送
- 发送范围整个OSPF自治系统
- 通告ASBR的身份和位置信息
dis ospf lsdb asbr
注意 : 4型LSA Link State ID 代表 ASBR的Router ID
5型LSA : External LSA
- ASBR 发出
- 可以穿越整个OSPF自治系统(中间需要各个ABR中转)
- 引入其他自治系统的路由信息
- `dis ospf lsdb ase
注意 : 5型LSA Link State ID 代表其他自治系统的路由信息
7型LSA : NSSA LSA
- 由位于NSSA区域的ASBR产生
- 发送范围仅仅是NSSA区域(传至ABR时会转换成5型继续传递)
- 作用是将NSSA区域后的其他自治系统外部路由引入OSPF
ospf路由种类
- ospf : 1 2 3 型 LSA
- O_ASE : 4 5 型 LSA
- O_NSSA : 7 型 LSA
| LSA类型 | 通告路由器 | LSA内容 | 传播范围 |
|---|---|---|---|
| 1-Router LSA | OSPF Router | 拓扑信息+路由信息 | 本区域内 |
| 2-Network LSA | DR | 拓扑信息+路由信息 | 本区域内 |
| 3-Network Summary LSA | ABR | 域间路由信息 | 非(Totally)Stub区域 |
| 4-ASBR Summary LSA | ABR | ASBR's Router ID | 非(Totally)Stub区域 |
| 5-AS External LSA | ASBR | 路由进程域外部路由 | (非Stub区域)OSPF进程域 |
| 7-NSSA LSA | ASBR | NSSA域外部路由信息 | (Totally)NSSA区域 |
避免区域内路由环路
- SPF算法
避免区域间路由环路
- 骨干区域与非骨干区域
- 所有的非骨干区域均直接和骨干区域相连,且骨干区域只有一个,非骨干区域之间的通信都要通过骨干区域中转,骨干区域ID固定为0
- 三类LSA的传递规则
- 从骨干区域传来的三类LSA不在传回骨干区域
- 对于ABR,OSPF要去ABR至少有一个接口属于骨干区域
OSPF 路由汇总
在大规模部署OSPF网络时,可能会出现由于OSPF路由表规模过大而降低路由查找速度,可以使用路由汇总减小小路由表规模
路由汇总是将多条连续的IP前缀汇总成一条路由前缀,如果被汇总的IP地址范围内的某条链路频繁UP和DOWN,改变化并不会通告给被汇总的IP地址范围外的设备,因此可以避免网络中的路由震荡,一定程度上提高了网络的稳定性
路由汇总只能汇总路由信息,不能汇总链路拓扑信息,所以ABR是可以执行路由汇总的位置之一
ospf 区域间的汇总 : 只能在ABR上面配置
- ABR向其他区域发送路由信息时,已网段为单位生成3 型LSA(Network Summary LSA),如果该区域中存在一些连续的网段,可以使用命令汇总成一个网段,ABR只需发送一条汇总后的3 型LSA
自治系统间的汇总 : 只能在ASBR上面配置
ospf 1
asbr-summary 9.9.0.0 255.255.240.0
# 汇总巧记 相同保留 不同置零 ; 前缀长度 = 相同的位数
OSPF 特殊区域
作用:
- 减少末节区域LSDB规模以及路由表大小,降低边缘路由器资源开销
- 减少其他自治系统或者区域网咯变化对末节区域的影响,减少路由震荡提升网络稳定性
特殊区域
- stub : 末节区域, 不接收4, 5 型的LSA
- 配置末节区域后会自动生成一条默认路由,要做都得做
- totally stub : 完全末节区域 配置追加关键字no-summary 不接收 3, 4, 5型LSA
- nssa : not so stub area 不完全末节区域 不接收4, 5型LSA 但是同时可以产生7型LSA
- totally nssa : 追加关键字 no-summary 可以过滤掉3, 4, 5型的LSA
ospf 1
area 1
stub
# 配置为stub区域
stub no-summary
# 配置为totally stub区域
nssa
# 配置为nssa区域
nssa no-summary
# 配置为 totally nssa区域
配置stub需要注意下列几点:
- 骨干区域不能被配置stub区域
- 如果要将一个区域配置为stub区域,该区域的所有路由器必须都要配置成stub路由器
- stub区域内不能存在asbr,自治系统外部路由不能再本区域传播
- 虚连接不能穿越stub区域建立,虚链路属于骨干区域的延伸,虚链路所在的区域不能配置为stub区域
NSSA区域hi在原始的OSPF协议标准中新增的一类特殊区域类型
NSSA区域和stub区域有许多相似的地方,两者的差别在于,nssa区域能够将自治域外部路由引入饼传播到整个ospf自治域中,同时又不会学习来自ospf网络其他区域的外部路由
NSSA LSA:
- 7型LSA是为了支持NSSA区域而新增的一种LSA类型,用于描述NSSA区域引入的外部路有信息
- 7型LSAA由NSSA区域的ASBR产生,其扩散范围仅限于ASBR所在的NSSA区域
- 缺省路由也可以通过7型LSA来产生,用于指导流量流向其他自治域
7型LSA转换成5型LSA:
- NSSA区域的ABR收到七类LSA时,会有选择的将其转换为5型LSA,以便将外部路由信息通告到OSPF网络的其他区域
- NSSA区域有多个ABR时,进行7型LSA与5型LSA转换的时Router ID最大的ABR
配置了NSSA区域的ABR缠上一条7型LSA缺省路由
配置了Totally NSSA区域的ABR会自动产生一条3型LSA缺省路由
OSPF 静默接口
ospf 1
silent-interface gi 0/0/2
# 配置静默接口
OSPF 认证
两种认证方式
- 区域认证
- 接口认证
支持的认证模式为:
- null 不认证
- simple 明文
- MD5
- HMAC-MD5
当两种认证方式都存在时,优先使用接口认证方式
int g0/0/1
ospf autentication-mode md5 1 cipher abc123
# 接口认证, 两边接口都要配置并且,认证类型和密码必须相同
ospf 1
area 2
authentication-mode md5 1 cipher abc123
# 区域认证 , 会将所有位于area2 区域的接口都配置认证
# 可以一端配置区域认证,另一端配置接口认证
OSPF 前缀过滤
# ospf 过滤
acl 2000
rule deny source 2.2.2.2 0.0.0.0
rule permit source any
# 禁止2.2.2.2/32的路由进入路由表
# 允许其他的路由条目
ospf 1
filter-policy 2000 import
# 注意 : 由于OSPF传递的是链路信息,因此filter-policy import 指令只能阻止链路信息进入路由表
# 所以2.2.2.2的LSA还是能收到的, 只是在本地路由表中禁止, 在LSDB中还是能看到的,且LSA能继续传递给其他路由
# 路由引入过滤
acl 2005
rule deny source 9.9.8.0 0.0.0.255
rule permit
# 省略写法
route-policy [name] permit node 10
if-match acl 2005
ospf 1
import-route rip 1 route-policy [name]
# 在ASBR引入的时候加路由策略来过滤掉 9.9.8.0/24
# 这种方法LSA也会被过滤
IP-Prefix-List 前缀列表
ACL 可以用反掩码rule deny source 1.1.1.0 0.0.0.127匹配 IP 地址范围(1.1.1.0-1.1.1.127) 但无法判断 路由的掩码长度(/24 还是 /25) 因此像 “只允许 /24,不允许 /25” 这种要求必须使用 ip-prefix list
ACL 既能用于IP报文的过滤(包过滤),也能用于路由信息的匹配,但用于匹配路由时仅能匹配路由前缀无法匹配掩码
IP Prefix List 能够同时匹配IP地址前缀以及掩码长度,不能用于IP报文的过滤(包过滤),只能用于路由信息的过滤
ip ip-prefix [name] permit 1.1.1.0 24 greater-equal 25 less-equal 25
ip ip-prefix [name] permit 9.9.7.0 24 greater-equal 24 less-equal 24
ip ip-prefix [name] permit 9.9.9.0 24 greater-equal 24 less-equal 24
route-policy [name] permit node 10
if-match ip-prefix [name]
ospf 1
import-route rip 1 route-policy [name]
OSPF 多进程
OSPF多进程:
- 进程号本地有效
- 两台路由器,进程号不同但区域号相同可以建立邻接并传递路由
- 同一台路由器,不同的ospf进程默认不能互串,多个进程独立运行,互不干扰
- 比如 进程1 学到了1.1.1.1 进程2学到了2.2.2.2 这两个是独立的, 进程1中没有2.2.2.2路由
- 想让进程1学2.2.2.2需要做路由引入,引入时就可以做策略了
- 默认的ospf 进程是1
OSPF 高级扩展
OSPF快速收敛
OSPF快速收敛 是为了提高路由的收敛速度而做的扩展特性,包括: PRC ( Partial Route Calculation, 部分路由计算)和智能定时器
同时,OSPF支持故障恢复快速收敛, 例如通过OSPF IP FRR ( Fast reroute 快速重路由) 实现备份链路的快速切换
PRC
PRC原理: 当网络上路由发生变化的时候,只对发生变化的路由进行重新计算
PRC不计算节点路径,而是根据SPF算法算出来的最短路径树来更新路由,即最短路径树不变,只在节点中新增路由
在华为的设备中 OSPF 的 PRC 功能默认开启
智能定时器
在进行SPF计算和产生LSA的时候用到的一种定时器
既可以对少量的外界突发事件进行快速响应,又避免过度占用CPU
控制LSA的生成与接收
OSPF通过两个规定来避免网络连接或者路由频繁动荡引起的过多占用设备资源的情况
- 同一条LSA在1秒内不能再次生成, LSA的更新时间间隔5秒
- LSA被接收的时间间隔1秒
在网络相对稳定,对路由收敛时间要求较高的组网环境,可以用智能定时器指定LSA的更新时间间隔为0 来取消LSA的更新时间间隔,使得拓扑或路由的变化可以立即通过LSA发布到网络中,或者被感知到,从而加快网络中路由的收敛速度
控制路由计算
当网络发生变化时,OSPF的LSDB会发生改变,需要重新计算最短路径,如果网络频繁变化,由于不断计算最短路径,会占用大量系统资源,影响设备的效率
通过配置智能定时器,设置合理的SPF计算的时间间隔,可以避免占用过多的路由器内存和带宽资源
查看当前时间间隔:dis default-parameter ospf
设置OSPF LSA更新的时间间隔:
- ospf-1] lsa-originate-interval { 0 | { intelligent-timer max-interval start-interval hold-interval | other-type interval } * }
使用智能定时器后:
- 初次更新LSA的间隔时间由start-interval参数指定。
- 第n(n≥2)次更新LSA的间隔时间为hold-interval×2(n−2)。
- 当hold-interval×2(n−2)达到指定的最长间隔时间max-interval时,OSPF连续三次更新LSA的时间间隔都是最长间隔时间,之后,再次返回步骤1,按照初始间隔时间start-interval更新LSA。
OSPF IP FRR
Fast reroute 快速重路由是动态IP FRR, 利用LFA ( Loop-Free Alternates )算法预先计算出备份路径,保存在转发表中,以备在故障时将流量快速切换到备份链路上,保证流量不中断,从而达到流量保护的目的,可将故障恢复时间降低到50ms以内
LFA 计算备份链路的基本思路:
- 以可提供备份链路的邻居为根节点,利用SPF算法计算出到目的节点的最短距离,然后,按照不等式计算出开销最小且无环的备份链路
# 需要按照拓扑修改各链路开销
ospf 1
frr
loop-free-alternate
ISIS技术
IS-IS 概述
Intermediate System to Intermediate System 中间系统到中间系统
中间系统: 路由器
ISIS是一个主要应用于运营商的路由协议,其应用规模和算法与OSPF类似
ISIS路由优先级 : 15 ; 直连 0 ; 静态路由 60 ; rip 100 ; ospf 10
和OSPF一样,IS-IS也是一种基于链路状态并使用最短路径优先算法进行路由计算的一种IGP(interior gateway protocol)协议
用于自治系统内部
IS-IS最初是国际化标准组织ISO为它的无连接网络协议CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议
为了提供对IP路由的支持,IETF在RFC1195中对IS-IS进行了扩充和修改,使它能同时应用在TCP/IP和OSI环境中
修订后的IS-IS协议被称为集成化的IS-IS,由于IS-IS的简便性及扩展性强的特点,目前在大型ISP的网络中被广泛部署
OSPF主要用于 园区网:
- 区域多样
- 策略多变
- 调度精细
园区网:
- 应用型网络,主要面向企业网用户
- 路由器数量偏少,动态路由中的LSDB库容量偏少,三层路由域相对偏少
- 有出口路由的概念,对内部外部划分敏感
- 地域性跨度不大,带宽充足,链路状态协议开销对带宽占用比偏少
- 路由策略和策略路由应用频繁多变,需要精细化的路由操作
- OSPF的多路由类型(内部/外部),多区域类型(骨干/普通/特殊),开销规则优良(根据带宽设定),网络类型多样(最多五种类型)的特点在园区网得到了极大发挥
IS-IS主要用于 骨干网:
- 区域扁平
- 收敛极快
- 承载庞大
骨干网:
- 服务型网络,由ISP(Internet Service Provider互联网服务提供商)组建,并为终端用户提供互联服务
- 路由调度占据绝对统治地位,路由器数量庞大
- 架构层面扁平化,要求IGP作为基础路由为上层BGP协议服务
- LSDB规模宏大,对链路收敛极度敏感,线路费用高昂
- 追求简单高效,扩展性高,满足各种业务需求(IPv6/IPX)
- IS-IS的快速算法 (PRC Partial Route Calculation, 部分路由计算 得到加强),简便报文结构(TLV Tag-Length-Value)
- 快速邻居关系建立,大容量路由传递(基于二层开销低)等一系列特点在骨干网有天然的优势
集成IS-IS特点:
- 支持CLNP网络,IP网络
- 工作在数据链路层
OSPF特点:
- 只支持IP网络
- 工作在IP层
IS-IS 术语
整理:
- IS (Intermediate System) 指 路由器
- IS-IS属于大型内部网关路由协议(IGP),类似于OSPF,多用于运营商
- 使用SPF算法,链路状态类路由协议
- IS-IS最早基于OSI模型设计,而OSPF,RIP,以太网数据包封装都是基于TCP/IP模型
- IS-IS划分区域是基于路由器的,即一个路由器只能属于一个区域
- IS-IS基于链路层,OSPF基于网络层
IS-IS路由器的种类 Level 1 路由器: 仅收发L1 IS-IS报文 Level 2 路由器: 仅收发L2 IS-IS报文 Level 1 2 路由器: 可以收发L1 和L2 的IS-IS报文
骨干区域: 连续的一片Level 2 路由器(包含L 1 2)的集合
注意: Level 1 路由器不能跨区域建立邻居关系
相同区域:
例如 : R1 与 R2 都属于 49.0001
R1 ----- R2
L1 ----- L2 -> NO
L1 ----- L1 -> YES
L2 ----- L2 -> YES
L1 ----- L12 -> YES L1
L2 ----- L12 -> YES L2
L12 ---- L12 -> YES L1 L2
不同区域:
例如 : R1 49.0001 | R2 49.0002
R1 ----- R2
L1 ----- L2 -> NO
L1 ----- L1 -> NO
L2 ----- L2 -> YES
L1 ----- L12 -> NO
L2 ----- L12 -> YES L2
L12 ---- L12 -> YES L2
术语对照
| 缩略语 | OSI术语 | IETF术语 |
|---|---|---|
| IS | Intermediate System | Router |
| ES | End System | Host |
| DIS | Designated Intermediate System | OSPF中的DR |
| SysID | System ID | OSPF中的Router ID |
| LSP | Link State PDU(Protocol Date Unit) | OSPF中的LSA |
| IIH | IS-IS Hello PDU | Ospf中的Hello报文 |
| PSNP | Partial Sequence Number PDU | OSPF中的LSR或LSAck报文 |
| CSNP | Complete Sequence Number PDU | OSPF中的DBD报文 |
| NET | Network Entity | 49+区域ID+Router-ID+00 |
IS-IS 配置
router id 1.1.1.1
isis 1
# 进入isis 1 进程, 不打1 直接回车默认就是1
network-entity 49.0001.0000.0000.0001.00
is-level level-1
# 配置为等级1 不配置默认为level-1-2
int loopback 0
ip address 1.1.1.1 255.255.255.0
isis enable 1
# isis 是在接口中宣告 1 就是默认的进程号, 可不写
isis circuit-level level-1
# 这条线只发送Level 1的报文
int g0/0/0
ip address 10.1.123.1 255.255.255.0
isis enable 1
dis isis interface verbose
# 查看isis接口的详细信息
dis isis 1 brief
# 可以查看网络类型 时间,优先级等
network-entity 49.0001.0000.0000.0001.00
- 49 是类似于TCP/IP的私网地址,任意使用
- 第一个0001表示区域ID
- 后面三组0000.0000.0001 表示System ID OSPF中的router ID
- 最后的00表示工作在TCP/IP协议中
- 早期场景下的NSAP(Network Service Access Point)用来实现OSI网络层寻址
- 目前网络都是基于TCP/IP设计, 因此不必关注NSAP
- NET(Network-Entity)是一种特殊的NSAP
工作中route id 转System iD
- 例如 192.168.10.11 -> 192.168.010.011 -> 1921.6801.0011
注意 : 在配置IS-IS过程中,NET(Network-Entity)最多职能配置3个,在配置多个NET时,必须保证他们的System ID都相同, 一般用于网络割接减少中断时间
IS-IS 邻居建立
IS-IS目前只支持点对点和广播类型的网络
HELLO PDU (Hello Protocol Data Unit) :
- Hello 报文的作用是邻居发现,协商参数并建立邻居关系,后期充当保活报文
- IS-IS 建立邻居关系和OSPF一样,通过Hello报文的交互来完成,但是会根据场景分为三种类型的报文
- point-to-point IIH - 点到点hello报文 没有表示DIS(虚节点/或者叫DR)的相关字段
- L1 LAN IIH - level 1 的广播hello报文 广播MAC : 0180-C200-0014
- L2 LAN IIH - level 2 的广播hello报文 广播MAC : 0180-C200-0015
点到点 MTU 1500
广播型 MTU 1497 比点到点多了一个LLC 占3字节
ISO10589使用两次握手建立邻居
R1 ------------- R2
R1 -- p2p IIH -> R2 up
up R1 <- p2p IIH -- R2
RFC3373定义了P2P三次握手机制
int s4/0/0
isis ppp-negotiation 2-way
R1 sys-id 01
R2 sys-id 02
R1 --- LAN IIH(sys-id:01 邻居:null) --> R2 up
R1 <-- LAN IIH(sys-id:02 邻居:RTA ) --- R2 up
R1 --- LAN IIH(sys-id:01 邻居:RTB ) --> R2 up
R1 <----------- DIS Election ---------- R2 up
# MA 网络类型的邻居关系建立必须是三次握手
DIS 的选举:
- 接口优先级 (默认64) 越大越优先
- 接口MAC地址, 越大越优先
- 会抢占DIS
dis isis interface查看DISg0/0/0]isis dis-priority [0-127]配置优先级
DIS以及DIS与DR的类比
| 类比点 | ISIS-DIS | OSPF-DR |
|---|---|---|
| 选举优先级 | 所有优先级都参与选举 | 0优先级不参与 |
| 选举等待时间 | 40s | 2个Hello报文间隔 |
| 备份 | 无 | 有(BDR) |
| 邻接关系 | 所有路由器都是邻接关系 | DRother之间是2-way |
| 抢占性 | 会抢占 | 不会抢占 |
| 作用 | 周期发送CSNP,确保MA网络LSDB同步 | 主要为了减少LSA泛洪 |
IS-IS LSP的同步
LSP PDU - 用于交换链路状态信息
- 实节点 LSP
- 伪节点 LSP (只在广播链路存在)
SNP PDU - 用于维护LSDP的完整与同步, 且为摘要信息
- CSNP (用于同步LSP)
- PSNP (用于请求和确认LSP)
IS-IS TLV:
- TLV的含义 : 类型 Type 长度 Length 值 Value 实际上是一个数据结构,这个结构包含了这三个字段
- 使用TLV结构构件报文的好处是灵活性和扩展性好, 采用TLV使得报文的整体结构固定,增加新特点只需要增加新的TLV即可,不需要改变整个报文的整体结构
- 网络拓扑结构和路由信息用TLV结构表现使得报文的灵活性和扩展性得到了极大的发挥
LSP PDU (Link State Protocol Protocol date Unity)
- LSP 类似于OSPF的LSA,承载的是链路状态信息,包含了拓扑结构和网络号
- Level-1 LSP由Level-1 路由器传送
- Level-2 LSP有Level-2 路由器传送
- Level-1-2 路由器则可传送以上两种LSP
- LSP 报文中包含了两个重要字段是ATT字段, IS-Type字段
- ATT 字段用于标识该路由器是由L1/L2路由器发送的
- IS-Type 用来指明生成此LSP的IS-IS类型是Level-1还是Level-2 IS-IS
- LSP的刷新间隔为15分钟; 老化时间为20分钟
- 但是一条LSP的老化除了要等待20分钟外,还要等待60秒的零老化时延, lsp重传时间为5秒
SNP PDU (Sequence Number PDU):
- CSNP(Complete Sequcen Number PDU) 包含LSDB中所有LSP的摘要信息,从而在相邻路由器之间保持LSDB的同步 相当于DBD
- PSNP(Partial Sequence Number PDU) 包含部分LSDB中的LSP摘要信息,能够对LSP进行请求和确认 相当于 LSR LSAck
- CSNP类似于OSPF的DD报文,传递的是LSDB里面所有链路信息摘要,PSNP类似于OSPF的LSR或者LSAck用于请求和确认部分链路信息
P2P网络LSDB同步过程:
- 建立邻居关系之后, RTA与RTB会先发送CSNP给对端设备,如果对端LSDB与CSNP没有同步,则发送PSNP请求响应的LSP
- 假定RTB向RTA请求相应的LSP,此时向RTA发送PSNP,RTA发送RTB请求的LSP的同时启动LSP重传定时器,并等待RTB发送PSNP作为收到LSP的确认
- 如果在接口lSP重传定时器超时后,RTA还没有收到RTB发送的PSNP保温作为应答,则重新发送该LSP直至收到RTB的PSNP报文作为确认
MA网络中新加入的路由器与DIS的LSDB同步交互过程
- 假设新加入的路由器RTC已经与RTB(DIS)和RTA建立了邻居关系
- 建立邻居关系之后,RTC将自己的LSP发往组播地址(Level-1 : 0180:C200:0014; Level-2 : 0180:C200:0015)
- 这样网络上所有的邻居都将收到该LSP
- 该网段中的DIS会把收到的RTC的LSP加入到LSDB中,并等待CSNP报文定时器超时(DIS每隔10秒发送CSNP报文)并发送CSNP报文,进行该网络内的LSDB同步
- RTC收到DIS发来的CSNP报文,对比自己的LSDB数据库,然后向DIS发送PSNP报文请求自己没有的LSP
- RTV作为IDS收到该PSNP报文请求后向RTC发送对应的LSP进行LSDB的同步
IS-IS 开销计算
IS-IS路由计算开销方式 - 设备默认接口开销值都是10
SPF计算过程:
- 单区域LSDB同步完成
- 生成全网拓扑结构图
- 以本节点为根生成最短路径树
- 默认跨越每个节点开销一样
IS-IS的计算特点:
- 在本区域内路由器第一次启动的时候执行的是Full-SPF算法
- 后续收到的LSP更新,如果是部分拓扑的变化执行的ISPF计算
- 如果只是路由信息的变化,执行的就是PRC计算
- 如果采用拓扑与网络分离的算法,路由收敛速度得到了加强
ISPF ( Incremental SPF 增强SPF算法, 增量SPF算法 ) 主要用于部分拓扑发生变化的情况,在这种情况下不需要重新计算整个拓扑,而只是将变化了的少量拓扑进行修正,从而大大节约路由计算的时间
RPC ( Partial Route Calculate 部分路由计算算法 ) 主要用于只是路由信息发生变化的情况,在这种情况下不需要重新计算网络拓扑,只是根据原有的拓扑生成新的路由信息即可,从而大大节约路由计算时间
IS-IS 路由计算的开销方式:
- Narrow模式(默认模式) : 设备默认模式开销都是10 手工配置接口开销取值范围为1-63
g/0/0/0] isis cost [1-63] [level-1 / level-2]
- Wide模式 (要改所有路由器都改): 设备默认模式开销都是10 手工配置接口开销取值范围1-16777215
isis-1]cost wide
- 进程下加入auto-cost enable命令,Narrow模式和Wide模式都会参考接口带宽大小计算开销值,只是参考准则由少许差异
- 修改为通过接口带宽计算 :
isis-1]auto-cost enable - 修改参考带宽默认值 :
isis-1]bandwidth-reference 1000默认是100 Mbits/s
- 修改为通过接口带宽计算 :
IS-IS 和 OSPF的区别
相比OSPF,IS-IS的优势是什么
- ISIS报文接口简便,路由承载能力更强,路由算法更优良,扩展性更强
IS-IS与OSPF差异性
| 差异性 | IS-IS | OSPF |
|---|---|---|
| 网络类型 | 少 | 多 |
| 开销方式 | 复杂 | 简便 |
| 区域类型 | 少 | 多 |
| 路由报文类型 | 简单 | 多样 |
| 路由收敛速度 | 很快 | 快 |
| 扩展性 | 强 | 一般 |
| 路由负载能力 | 超强 | 强 |
网络类型和开销方式
- IS-IS协议支持两种网络类型,且所有带宽默认开销值都是一样的
- OSPF协议支持四种网络类型,且会根据不同的带宽设定相应的开销值,对帧中继,按需链路等网络类型有很好的支持
区域类型
- IS-IS协议分L1/L2区域,L2区域是骨干区域由全部明细路由,L1去往L2只有默认路由
- OSPF协议分骨干区域,普通曲玉,特殊区域,普通区域和特殊区域跨区域访问需要经过骨干区域
报文类型:
- IS-IS协议路由承载报文类型只有LSP报文且里面路由信息不分内部与外部的,简单高效,无需递归计算
- OSPF协议路由承载报文LSA类型多样,有123457类等路由级别等级森严,且需要递归计算,适合精细化调度计算
路由算法:
- IS-IS协议区域内某个节点上的网段发生变化时,触发的是PRC算法,收敛比较快,计算路由的报文开销也比较小
- OSPF协议由于网络地址参与了拓扑的构建,在区域内当网段地址改变触发的是i-SPF算法,相对来说过程繁琐复杂些
扩展性:
- IS-IS协议任何路由信息都是用TLV传递,结构简单,易于扩展,如对IPv6的支持只增加两个TLV就行了
- 且ISIS本身对IPX等协议是支持的
- OSPF协议本身是为IP特定开发的,支持IPv4和IPv6的OSPF协议是两个独立的版本(OSPFv2和OSPFv3)
IS-IS 路由引入
向IS-IS中引入路由时, 默认是以Level 2的形式引入
isis 1
import-route static
# 引入时默认用level-2类型
import-route direct level-1
# 指定引入类型 在level-1 区域引入时用, 非常像 nssa totally区域
IS-IS 路由渗透(泄露)
为了避免次优路径
# 在边界路由器也就是level-1-2配置
isis 1
import-route isis level-2 into level-1
# 引入明细路由 变相选路
acl 2005
rule permit source 4.4.4.0 0.0.0.255
rule permit source 5.5.5.0 0.0.0.255
isis 1
import-route isis level-2 into level-1 filter-policy 2005
# 在边界路由器性能较低的时候可以用filter-policy来控制引入的路由
# 非常灵活,按需求来
BGP
BGP概述
BGP(Border Gateway Protocol)路由的控制和优选,传递
- 属于外部网关路由协议
- 主要用于大型网络,大型集团,运营商,银行,国家电网,国与国之间的路由
- BG运行在IGP之上,其底层是IGP
- AS自治系统,一个AS可以是一个国家,也可以是一个运营商,也可以是一个跨国集团
- BGP的邻居关系
- IBGP : 相同的AS
- EBGP : 不同的AS
- BGP可以跨路由器建立邻居(因为BGP发送的报文都是单播)
- BGP四层 使用 TCP 179 端口
- 一台路由器只能启用一个BGP进程
IGP(Internal Gateway Protocol) 路由发现和计算
- 静态 (Static)
- RIP (Routing Information Protocol)
- OSPF (Open Shortest Path First)
- ISIS
EGP(External Gateway Protocol)
- BGP (Border Gateway Protocol)
- 相比较于EGP,BGP更具有路由协议的特征
- 邻居的发现与邻居关系的建立
- 路由的获取,优选和通告
- 提供路由环路避免机制,并能够高校传递路由,维护大量的路由信息
- 在不完全信任的AS之间提供丰富的路由控制能力
- EGP (淘汰)
- EGP设计的非常简单
- 只能在AS之间简单的传递路由信息
- 不会对路由进行任何优选
- 也没有考虑如何在AS之间避免路由环路的问题,因而EGP最终被BGP取代
在EGP协议中,引入了AS(Autonomous System 自治系统)的概念 ,指的是在同一个技术管理机构管理下,使用同一选路策略的路由器的集合
AS的内部使用IGP来计算和发现路由,同一个AS内部的路由器之间是相互信任的,因此IGP的路由计算和信息泛洪完全处于开放状态,人工干预很少
不同的AS之间的连接需求推动了外部网关协议的发展 , BGP作为一种外部网关协议,用于在AS之间进行路由控制和优选
运行BGP协议需要一个统一的自治系统号来标识路由域,即AS号,每个自治系统都有唯一的一个编号,这个编号由IANA分配
- 2009年1月之前,只能使用最多16bit也就是2字节长度的AS号(1-65545),其中1-64511为公有AS,64512-65535为私有AS
- 2009年1月之后,IANA决定使用32bit也就是4字节长度的AS号(65536-4294967295)
BGP更像搬运工,直接把IGP内部的路由搬出去,触发式更新,只对波动的路由才收敛,能解决环路问题,并对路由信息优选,控制,BGP4,BGP4+ 扩展性非常高,企业内部互通,企业和运营商互通
BGP基本概念
- 路径矢量路由协议(Path-vector Routing Protocol)
- 使用tcp 端口号179,使用触发式路由更新,而不是周期性的
- BGP能承载大批量的路由信息,能够支持大规模网络
- BGP提供丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由信息
- BGP能够支撑MPLS/VPN应用,传递客户VPN路由
- BGP提供了路由聚合和路由衰减用于防止路由震荡,通过这两项功能有效的提高了网络稳定性
BGP特征
- 运行BGP的路由器被称为BGP发言者,BGP Speaker 或者BGP路由器
- 两个建立BGP会话的路由器互为对等体 Peer,BGP对等体之间交换BGP路由表
- BGP路由器只发送增量的BGP路由更新,或进行触发式更新(不会进行周期姓更新)
- BGP能承载大批量的路由器前缀,可在大规模网络中应用
- 每条BGP路由都携带多重路径属性(Path Attribute),BGP可以通过这些路径属性控制路径选择,OSPF和IS-IS只能通过开销Cost控制路径选择,因此在路径选择上,BGP有丰富的可操作性,可以在不同场景下选择最合适的路径
BGP与对等体的关系
与OSPF和ISIS等不同,BGP的会话是基于tcp的,建立BGP的对等关系的路由器并不要求必须直连
BGP存在两种对等体关系类型:EBGP和IBGP:
- EBGP(External BGP):位于不同自治区的BGP路由器之间的BGP对等体关系,两台路由器要建立EBGP对等体关系,必须满足两个条件:
- 两个路由器所属的AS不同
- 在配置EBGP时,Peer命令所指定的对等体的IP地址要求路由可达,并且TCP连接能够正确建立
- IBGP(Internal BGP):位于相同自治系统的BGP路由器之间的BGP邻居关系
BGP对等体关系的建立
- 先启动BGP的一端先发起TCP连接,比如R1先启动,使用随机端口向R2的179端口发起tcp连接
- 三次握手完成后,R1和R2互相发送open报文,携带参数用于对等体建立,参数协商完成后双发互相发送keepalive报文,收到对端发送的keepalive后对等体建立成功,同时双方定期发送keepaalive保持连接
其中Open报文中携带
- My Autonomous System:自身的as号
- Hold Time:用于协商后续keepalive的发送时间
- BGP Identifier:自身的Router ID(通过这个id来确定使用那个tcp连接,会选择id大的tcp连接)
对等体关系建立完成后,双方BGP路由器发送BGP Update报文通告路由到对等体
TCP连接源地址
缺省情况下,BGP使用报文出接口作为TCP连接的本地接口
在部署IBGP对等关系时,建议使用loopback地址作为更新源地址,loopback接口非常稳定,而且可以借助as内的IGP和冗余拓扑来保证可靠性
在部署EBGP对等关系时,通常使用直连接口的IP地址作为源地址,如若使用Loopback接口建立EBGP对等关系,则应注意EBGP多跳问题
- EBGP传递报文的TTL值默认1,如果使用loopback接口作为源ip地址就会被丢弃,如想要使用loopback需要修改默认ttl>=2
1.启动BGP进程
]bgp {as-number-plain | as-number-dot}
# plain指的是数字方式的as号,dot指的是as1.2模式的as号
bgp]router-id ipv4-address
# 在bgp视图中,使用router-id命令配置BGP的router id,建议将BGP router ID配置为设备的Loopback接口的地址。
2.配置BGP对等体
bgp]peer {ipv4-address | ipv6-ipaddress} as-number {as-number-plain | as-number-dot}
# 创建BGP对等体,指定对等体的ip地址以及as号
3.配置建立对等体使用的源地址,EBGP对等体的最大跳数
bgp]peer ipv4-address connect-interface interface-type interface-number [ipv4-source-address]
# 指定发送BGP报文的原接口,并可指定发起连接时使用的源地址
bgp]peer ipv4-address ebgp-max-home [hop-count]
# 指定建立EBGP连接允许的最大跳数。缺省情况下,EBGP连接允许的最大跳数为1,即只能在物理直连链路上建立EBGP连接。
4.查看BGP信息
display bgp peer
# 查看Peer表
display bgp routing-table
# 查看bgp路由表
display bgp routing-table 10.1.0.0 24
# 查看具体的一条路由表
BGP邻居的建立
IBGP : 相同的AS 建议使用环回口建立
EBGP : 不同的AS 使用直连接口建立
# R1:
ospf 1
area 0.0.0.5
network 1.1.1.0 0.0.0.255
network 1.1.2.0 0.0.0.255
network 10.1.12.0 0.0.0.255
bgp 100
# 本机创建 as 号 100
peer 2.2.2.2 as-number 100
# 邻居 2.2.2.2 的as号 100
peer 2.2.2.2 connect-interface LoopBack 0
# 邻居 2.2.2.2 用本机的那个接口连接 环回接口 0
# 以上两个步骤圈定了BGP报文的源地址 : 1.1.1.1 以及目标地址2.2.2.2
dis bgp peer
# 查看BGP的邻居关系
dis tcp status
# 查看TCP连接状态
# R2:
ospf 1
silent-interface GigabitEthernet0/0/1
silent-interface GigabitEthernet0/0/2
area 0.0.0.0
network 10.1.23.0 0.0.0.255
network 10.1.25.0 0.0.0.255
area 0.0.0.5
network 2.2.2.0 0.0.0.255
network 10.1.12.0 0.0.0.255
bgp 100
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
# IBGP 连接
peer 10.1.23.3 as-number 200
peer 10.1.25.5 as-number 200
# EBGP连接 EBGP不需要指定源接口, 出接口为默认地址
# R3:
ospf 1
silent-interface GigabitEthernet0/0/0
area 0.0.0.0
network 3.3.3.0 0.0.0.255
network 10.1.23.0 0.0.0.255
network 10.1.34.0 0.0.0.255
bgp 200
peer 10.1.23.2 as-number 100
peer 5.5.5.5 as-number 200
peer 5.5.5.5 connect-interface LoopBack0
# R4:
ospf 1
area 0.0.0.0
network 4.4.4.0 0.0.0.255
network 4.4.5.0 0.0.0.255
network 10.1.34.0 0.0.0.255
network 10.1.45.0 0.0.0.255
# R5:
ospf 1
silent-interface GigabitEthernet0/0/0
area 0.0.0.0
network 5.5.5.0 0.0.0.255
network 10.1.25.0 0.0.0.255
network 10.1.45.0 0.0.0.255
bgp 200
peer 10.1.25.2 as-number 100
peer 3.3.3.3 as-number 200
peer 3.3.3.3 connect-interface LoopBack0
BGP 邻居状态

- EBGP只用于不同AS之间传递路由. AS100 内的RTB与RTC分贝从AS200与AS300学习到不同的路由,怎么实现AS 200 与 AS 300之间的路由在AS 100 内的交换
- 可以在拓扑中的RTB和RTC路由器上将BGP的路由引入IGP协议(图中为OSPF),再将IGP协议的路由在RTB与RTC路由器上引回BGP协议,实现AS200 与AS300 路由的交换
- 但是引入IGP有以下缺点
- 公网上BGP承载的路由数目非常大,引入IGP之后,IGP协议无法承载大量的BGP路由
- BGP路由引入IGP协议时,需要做严格的控制,配置复杂,不宜维护
- BGP携带的属性在引入IGP协议时,由于IGP协议不能识别,可能会丢失
- 一次需要在BGP在AS内部完成路由的传递

- 如上图,因为BGP使用TCP作为承载协议,所以可以跨设备建立邻居关系,RTB与RTC之间建立IBGP邻居关系,并各自将从其他AS学到的路由传递给对端,实现BGP路由在AS内的传递
BGP协议被设计运行在AS之间传递路由,AS之间是广域网链路,数据包在广域网上传递是可能出现不可预测的链路拥塞或者丢失等情况,因此BGP使用TCP作为其承载协议老保证可靠性
BGP使用TCP封装建立邻居关系,端口号为179,TCP采用单播建立连接,因此BGP协议并不像RIP和OSPF一样使用组播发现邻居,单播建立连接也使BGP只能手动指定邻居
BGP的报文类型
BGP存在五种类型的报文,不同类型的报文拥有相同的头部(header)
- Open: 协商BGP对等体参数,建立对等关系 | 在BGP TCP建立连接之后发送
- BGP邻居在接收到OPEN报文并协商成功后,将发送Keepalive报文确认并保持连接的有效性,确认后BGP邻居间可以进行Update,notification,keepalive和router-refresh报文的交换
- Update:发送BGP路由更新 | BGP对等体关系建立之后有路由需要发送或者路由变化时向对等体发送Update报文
- update报文可以发布多条属性相同的可达路由信息,也可以撤销多条不可达路由信息
- 一条update报文可以发布多条具有相同路由属性的可达路由,这些路由可共享一组路由属性,所有包含在一个给定的update报文里的路由属性适用于该update傲文仲的NLRI(Network Layer Reachability Information)字段里的所有目的地(用IP前缀表示)
- 一条update报文可以撤销多条不可达路由,每一个路由通过目的地(用ip前缀表示),清楚的定义了BGP路由器之间先前通告过的路由
- 一条update报文可以只用于撤销路由,这样就不需要包括路径属性或者NLRI,相反,也可以只用于通告可达路由,就不需要携带撤销路由信息了
- Notification:报告错误信息,终止对等体关系 | 当BGP在运行时发现错误时,发送Notification报文将错误通告给BGP对等体
- Keepalive:标志对等体建立,维持BGP对等体关系 | BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送keepalive报文用于保持连接
- Route-Refresh:用于在改变路由策略后请求对等体重新发送路由信息,只有支持路由刷新能力的BGP设备会发送和响应此报文 | 当路由策略发生变化时,触发请求对等体重新通告路由
BGP-Peer状态
- Idle:开始准备tcp的连接并监视远程对等体,启用BGP时,要准备足够的资源
- connect:正在进行TCP连接,等待完成中,认证都是在TCP建立期间完成的。如果TCP连接建立失败则进入Avtive状态,反复尝试连接,成功就会进入OpenSent状态。
- Active:TCP连接没建立成功,反复尝试TCP连接。
- OpenSent:TCP连接已经建立成功,开始发送Open包。Open包携带参数协商对等体的建立。
- OpenConfirem:参数,能力特性协商成功,自己发送keepalive,等待对方的Keepalive
- Established:已经收到对方的Keepalive包,双方能力特性经协商发现一致,开始使用Update发送路由信息,表明正式建立对等体Peer
BGP路由器报文交互过程
- Idle : 在此状态下,BGP路由器拒绝邻居发送的连接请求,只有在收到本设备的Start事件后,BGP路由器才开始尝试与其邻居进行TCP连接,并转至Connect状态
- Connect : 在此状态下, BGP路由器启动连接重传定时器(Connect Retry),等待TCP完成连接
- 如果TCP连接成功,那么BGP路由器想邻居发送OPEN报文,并转至OpenSent状态
- 如果TCP连接失败,那么BGP路由器转至Active状态
- 如果连接重传定时器(Connect Retry)超时,BGP路由器仍没有收到邻居的响应,那么BGP路由器继续尝试与其邻居进行TCP连接,停留在Connect状态
- Active : 在此状态下,BGP路由器总是在尝试建立TCP连接
- 如果TCP连接成功,那么BGP路由器向邻居发送Open报文,关闭连接重传定时器,并转至OpenSent状态
- 如果TCP连接失败,那么BGP路由器停留在Active状态
- OpenSent : 在此状态下,BGP路由器等待邻居的Open报文,并对收到Open报文中的AS号,版本号,认证码等进行检查
- 如果收到的Open保温正确,那么BGP路由器发送Keeplive报文,并转至OpenConfirm状态
- 如果发现收到的Open报文有错误,那么BGP路由器发送Notification报文给邻居,并转至Idle状态
- OpenConfirm: BGP等待Keepalive或Notification报文
- 如果收到Keepalive报文,则转至Established状态
- 如果收到Notification报文,则转至Idle状态
- Established : 此状态下BGP路由器可以和邻居交换Update,keepalive,route-refresh报文和Notification报文
PS:
- Active状态 TCP连接失败,启动BGP重传定时器,BGP路由器再次尝试与辉煌建立TCP连接
- 例如: 对方路由器配置了BGP但是没有指定邻居
- Connect状态 : 对方没有配置BGP进程
头部报文
报文:
- Marker(16byte)
- Length(2byte)
- type(1byte) 解释:
- Marker : 用于标明BGP报文边界,所有bit均为1
- Length :BGP报文总长度(包括头部报文)
- Type : BGP报文的类型(取值从1到5表示open,update,notification,keepalive,route-refresh)
Keepalive报文格式与头部报文格式相同 只是Type 为4
Open报文
报文:
- Version(8bit)
- My AS(16bit)
- Hold Time(16bit)
- BGP Identifier(32bit)
- Opt Parm Len(8bit)
- Optional Parameters(可变长度)
报文解释:
- Version : BGP的版本号,对于BGP4来说,值为4
- My AS(Autonomous System) :本地AS号。比较本端自治系统和对端自治系统是否在同一个AS内,确定E或IBGP
- Hold Time :保持时间。默认是180秒(三倍Keeplive)、在建立对等关系时两端要协商Hold Time,并保持一致,如果在这个时间内未收到对端发来的Keepalive(默认60秒)或update报文,则认为BGP连接中断
- BGP Identifier : BGP的标识符,以IP地址的形式表示,用来识别BGP路由器
- Optional Parameters :包含了BGP在协商过程中能够支持的其他能力,比如,是否支持认证,是否支持其他协议处理,都需要这个字节来协商
Update报文
报文格式:
- Unfeasible Routes Length (2byte)
- Withdrawn Routes (nbyte)
- Total Path Attribute Length (2byte)
- Path Attrbutes (nbyte)
- NLRI (nbyte)
报文解释:
- Unfeasible Routes Length : 表示不可行路由的数量
- Withdrawn Routes(可选): 撤销路由前缀;撤销路由长度
- Total Path Attribute Length :指示路径属性的总长度
- Path Attributes(可选):用于描述BGP路由的特征和属性例如:NEXT_HOP(下一跳地址)、AS_PATH(AS路径)和MED(多路径外部度量)等。
- NLRI(Network Layer Reachable Information):网络层可达消息,要发布或者更新路由信息就通过这个字段,NLRI前缀,NLRI前缀长度
一个UPdata报文可以通告具有相同路径属性的多条路由,这些路由保存在NLRI(Network Layer Reachable Information,网络可达信息)中。 同时,Update还可以携带多条不可达路由,用于告知对方撤销路由,这些保存在Withdrawn Routes字段中。
- BGP通过network和import两种方式生成BGP路由,BGP路由封装在Update报文中通告给邻居
- BGP在邻居关系建立之后才开始通告路由信息
- Update消息主要用来公布可用路由和撤销路由,Update中包含:
- 网络层可达信息(NLRI): 用来公布ip前缀和前缀长度
- 路径属性: 为BGP提供环路检测,控制路由优选
- 撤销路径: 用来描述无法到达业务且从业务中撤销的路由前缀和前缀长度
- 在通告BGP路由时,由于各种因素的影响,为了避免路由通告过程中出现问题,BGP路由通告需要遵守一定的规则 具体解释:路由通告原则
Notification报文
报文:
- Error Code(8bit)
- Error Subcode(8bit)
- Data(可变长度)
解释:
- Error Code : 差错码,用于告知对端具体的错误类型
- Error SubCode : 差错子码,用于告知对端具体的错误类型
- Data : 用于辅助描述详细的错误内容,长度并不固定
当BGP检测到错误状态时(对等体关系建立时,建立之后都可能发生)就会像对等体发送Notifiction,告知对端错误原因,之后BGP连接将会立即终端。
Keepalive报文
报文:
- Marker(16byte)
- Length(2byte)
- Type (1byte)
这里会发现跟头部一样,没错就是一样
BGP路由器收到对端发送的Keepalive报文,将对等体状态置为已建立,同时后续定期发送Keepalive报文用于保持连接。
Keepalive报文格式中只包含报文头,没有附加其他任何字段。默认每隔60秒发送一次
Route-Refrash报文
报文:
- AFI(16bit)
- Res(8bit)
- SAFI(8bit)
解释:
- AFI(Address Family Identifier) : 地址族标识,如IPV4
- Res : 保留,8个bit必须置0
- SAFI(Subsequent Address Family Identifier) :子地址族标识
Route-Refresh报文用来要求对等体重新发送指定地址族的路由信息,一般为本地修改了相关路由策略之后让对方重新发送Update报文,本端执行新的路由策略重新计算BGP路由。并不是所有设备都支持。
BGP路由的生成(注入)
不同于IGP路由协议,BGP自身并不会发现并计算产生路由,BGP将IGP路由表中的路由注入到BGP路由表中,并通过Update报文传递给BGP对等体。
BGP注入路由的方式:
- Network
- Import-route
- BGP路由汇总 与IGP协议相同,BGP支持根据已有的路由条目进行聚合,生成聚合路由。
Network
bgp 200
network 10.1.0.0/24
network 10.2.0.0/24
dis bgp routing-table
# 查看bgp路由表
# BGP路由表中的路由不一定会引入到路由表转发表中,比如没有优化(下一跳不可达)
注意: network将路由表中的路由引入BGP转发表,network引入路由时路由需在路由表中存在,且引入时掩码需要和路由表中一致
可以精确的发送路由信息,但是一次只能注入一条,量大的时候太繁琐。
注入后,这两条路由将会出现在本地的BGP路由表中。然后通过Update报文发送给Peer,Peer收到后将接受到的路由加入到本地的BGP路由表中
Import-route
通过import-route注入可以使用以下路由协议的路由直接注入到BGP中: 直连路由 静态路由 OSPF路由 IS-IS路由 等非BGP的路由都可以注入到本地BGP路由表
bgp 200
import-route {bgp | direct | static | isis[process-id-isis] | ospf[process-id-ospf] }
# 出现路由黑洞可以将BGP引入到IGP (OSPF)中
ospf 1
import-router bgp
BGP路由黑洞:
- 能够学习到路由,但是无法访问
- 可以将BGP引入到IGP
- 将IGP配置为IBGP
- 可以使用MPLS(后续在写)
BGP(路由汇总)聚合路由
与众多的IGP协议相同,BGP同样支持路由的手工聚合,在BGP配置视图中使用aggregate命令可以执行BGP路由手工聚合,在BGP已经学习到相应的明细路由情况下,设备会向BGP注入指定的聚合路由
# 比如有:
10.1.1.0/24
10.1.2.0/24
10.1.3.0/24
# 就可以聚合为
10.1.0.0/22
bgp 200
aggregate 10.1.0.0 22 detail-suppressed
如果不加detail-suppressed会把聚合前的三个路由也给传过去,为了减少开支,就加上细节抑制也就是detail-suppressed
BGP 通告原则
BGP通过Network、import-route、aggregate聚合方式生成BGP路由后,通过Update报文将路由传递给Peer也就是对等体
BGP通告遵循以下原则:
- 只发布自己最优的路由( > 优化)
- 从EBGP对等体获取的最优路由,会发布给所有的BGP邻居
- IBGP水平分割:从IBGP对等体获取的路由,不会发送给IBGP对等体
- BGP同步检查(与IGP同步) : 华为默认关闭 无法开启 会有可能造成路由黑洞 , 了解即可
- 默认从EBGP邻居学到的BGP路由的下一跳是EBGP对等体的IP地址,当该路向内部传递时,路由传递给IBGP邻居的下一跳地址(next-hop)不变(还是上一个AS的接口地址),有可能会出现下一跳不可达的问题
解决下一跳不可达:
- 将EBGP互联地址(next-hop)地址宣告进IGP(注意配置静默接口,防止IGP传至其他AS)
- 使用Next-hop属性
peer 10.1.4.4 next-hop-local
BGP路由黑洞:
- 可以学习到路由,但是数据不可达,两种方法解决
- 将BGP路由引入IGP,从而保证IGP与BGP的同步 (针对银行,某些集团,非运营商)
- AS内IBGP全互联的方式(Full Mesh) 保证所有路由器都能学习到通告的路由(省级单位)
BGP同步检查指的是:当一台路由器从自己的IBGP对等体学习到一条BGP路由时(这类路由被称为IBGP路由),它不能使用该条路由或者这条路由通告给自己的EBGP对等体,同时它又从IGP协议(例如OSPF等,此处也包含静态路由)学习到这条路由,也就是要求IBGP路由与IGP路由同步。同步规则主要用于规避BGP路由黑洞问题。
防止环路:
- 防止IBGP环路(AS内部环路) : IBGP水平分割
- 防止EBGP环路(不同AS间环路) : AS-Path属性 - 每一个as都会打上自己的标记
# 通过display bgp routing-table 可以查看bgp路由表:
Total Number of Routes:2
Network NextHop MED LocPrf PrefVal Path/Ogn
*>i 10.1.0.1/24 11.1.0.1 0 100 0 ?
*i
11.1.0.1 0 100 0 ?
# 在BGP路由表中同时存在以下两个标志的路由为最优,有效路由:
* :代表有效
> :代表最优
# 所以会发送第一条,而不发送第二条
dis bgp routing-table 10.1.4.0
# 查看明细信息
为解决IBGP水平分割带来的路由黑洞问题可以采用
- AS内IBGP全互联的方式(Full Mesh)
- 配置路由反射器 RR(Route Reflector)
- BGP 联盟(联邦)
BGP 路由反射器 RR
RR (Route Reflector)
- 允许将从IBGP邻居学到的路由发送给特定的IBGP邻居,打破了IBGP邻居关系全互联的需求,减少IBGP会话数量
- 包括路由器反射器(RR)和客户端(Client)的整体叫做Cluster
- 对于RR来说,从客户端学来的路由可以传给客户端和非客户端
路由反射概念:
- 路由反射器RR(Route Reflector) : 允许把从IBGP对等体学来的路由反射到其他的IBGP对等体
- 客户机 (Client) : 与RR形成反射邻居关系的IBGP设备,在AS内部客户机只需要和RR直连
- 非客户机(Non-Client) : 既不是RR也不是Client的IBGP设备,在AS内部非客户机与RR之间,以及所有的非客户机之间仍必须建立全连接关系
- 始发者(Originator) : 在AS内部始发路由的设备, Originator_ID属性用于防止集群内布产生路由环路
- 集群(Cluster) : 路由反射器及其客户机的集合, Cluster_List属性用于防止集群之间产生路由环路
反射规则:
在向IBGP邻居发布学习到的路由信息时, RR按照以下规则发布路由:
- 从EBGP对等体学到的路由,发布给所有的非客户机和客户机
- 从非客户机IBGP对等体学到的路由,发布给此RR的所有客户机
- 从客户机学到的路由,发布给此RR的所有客户机和非客户机(发起此路由的客户机除外)
RR的配置方便,只需要对作为反射器的路由器进行配置, 客户机并不知道自己时客户机
防环机制:
路由器反射器的防环机制:
- Originator_ID属性:
- 该属性为可选非过度
- 用于集群内的防环
- 由路由反射器(RR)产生,携带了本地AS内该路由发送者的Router_ID
- Cluster_List属性
- 该属性为可选非过渡
- 用于集群间的防环
- 由每个路由反射器(RR)产生, 记录反射路由经过的集群
bgp 200
import-route direct route-policy aa
route-policy aa permit node 10
if-match interface loopback 5
# 无视这段
peer 10.2.6.6 ignore
# 忽略无视邻居10.2.6.6
# R1
bgp 200
peer 10.2.6.6 reflect-client
# 10.2.6.6 配置为反射客户端, 将本地接受到的BGP路由发送给 10.2.6.6
# 由此避免水平分割导致内部IBGP收不到BGP路由
>refresh bgp all export
# 刷新bgp 所有外发的路由
# 如果最开始没配置就要执行下刷新
BGP 路由信息处理
- 当从BGP邻居接收到Update报文时,路由器将会执行路径选择算法,来为每一条前缀确定最佳路径
- 得出最佳路径被存储到本地BGP路由表中(Local_RIB)中,然后被提交给本地IP路由表(IP_RIB),以用作转发考虑
- 被选出的有效的最佳路径路由将会被封装在Update报文中,发送给对端的BGP邻居
- IP路由表(IP_RIB) : 全局路由信息库,包含所有的IP路由信息
- BGP路由表(Local_RIB) : BGP路由信息库,包含本地BGP路由器选择的路由信息,邻居表,邻居清单列表
- 收到BGP邻居发来的Update报文,路由器会执行算法进行路径选择,确定每一条前缀的最佳路径,并将计算出的最佳路径存储到本地BGP路由表(Local_RIB)中
- 如果启用了多路径特性(负载分担),最佳路径和所有等值路径都被提交给IP_RIB,考虑是否转发,除了从BGP邻居接收的最佳路径之外,Local_RIB也包含当前路由器注入的路由(也被称为本地发起的路由)
- 在Local_RIB中,只有被选为最优的前缀才会被封装到Update报文中通告给自己的BGP邻居
华为中的BGP路由不被优化的原因:
- 下一跳不可达导致
- 有多条路径,其中某条没有被优选(PK竞争失败)
BGP 负载分担
满足如下所有条件的多条BGP路由会成为等价路由,形成负载分担:
- 原始下一跳不相同
- 首选值(Prefval)相同
- 本地优先级(Local_Pref)相同
- 都是聚合路由,或者都不是聚合路由;
- Origin类型(IGP,EGP,Incomplete)相同
- MED值相同
- 都是EBGP路由或者都是IBGP路由
- AS内部IGP的Metric相同
- AS_Path属性完全相同
bgp 100
maximum load-balancing 4
# IBGP和EBGP最多有四条等价路径
在BGP路由表中无法看到现象,会在IP 路由表中有体现
BGP 常用属性
公认属性:
- 所有BGP路由器都必须识别且支持的属性
- 公认必遵: BGP的Update消息中必须包含的属性
- 公认任意: 不必存在于BGP的Update消息中,可以根据需求自由选择的属性
可选属性:
- 不要求所有BGP路由器都能够识别的属性
- 可选过渡: BGP不能识别改属性,但可以接收该属性并将其发布给它的邻居的属性
- 可选非过渡: BGP可以忽略包含该属性的消息并且不向它的邻居发布
公认必遵(Well-know Mandatory):
- Origin : 起源属性
- AS_Path : 路由经过了那些AS
- Next_hop : 下一跳地址
公认任意(Well-know Discretionary)
- Local_Pref (Local_Preference) : 本地优先级 , 可以用在IBGP ,不用在EBGP
- Atomic_aggregate : 原子聚合 BGP路由聚合时使用
可选过渡(Optional Transitive)
- Aggregator : 聚合器
- Community : 社区/团体
可选非过渡(Optional Non-transitive)
- MED (Multi-Exit Discriminator) : 多出口鉴别器/多出口判别器(分离器)
Origin 属性
Origin属性定义路径信息的来源,标记一条路由是怎么成为BGP路由的
BGP在AS之间传递信息,承载大量路由. 如果到达同一目的IP有多条路径,且BGP学到这些路由通过不同的方式, 则Origin属性是决定最优路径的一个因素,用于标明路由的起源
Origin的三种属性:
- i : 表示BGP 路由通过Network命令注入
- e : 表示BGP路由时从EGP学来的,EGP协议在现网中很难见到, 但可以通过路由策略将路由的Origin属性修改为e
- ? : 即Incomplete表明BGP路由通过其他方式学到的路由信息,如使用import命令引入的路由
优先级为: i > e > ?(incomplete)
AS_Path
经过的AS_Path越少越优先
AS_Path的四种类型:
- AS_Sequence
- 表示AS_Path内的AS号是一个有序的列表 没有{}或者{}外的都是有序的
- AS_Set
- 表示AS_Path内的AS号是一个无序的列表 使用{} 括起来
- AS_Confed_Sequence (联盟,暂时不讲, 后续补充, 实际用RR )
- AS_Confed_Set (联盟,暂时不讲, 后续补充)
AS_Path本身是一个有序的列表,应为AS_Path每经过一个AS都会将AS号添加到AS_Path中,并且按经过的顺序从左到右排列
Next_hop
EBGP 邻居之间一般采用直连接口建立邻居关系,EBGP邻居在互相通告路由时会修改Next_hop为自己的出接口IP
IBGP 邻居通常采用Loopback接口建立邻居,当路由是本路由器起源的,在发送给邻居时Next_hop改为自己的更新源地址(loopback),这样即使网络中出现链路故障,只要Next_hop可达,同样可以访问目的网段,提高网络稳定性
相对于IGP,如在RIP中发布路由时,每经过一个路由器都会修改下一跳,发布路由的路由器都宣称自己能够到达目标地址,并采用逐跳传递的方式将数据包发送给目标网络,但网络中的路由器并不知道谁才是真正的始发路由器,因此会造成环路
- BGP在EBGP之间传递时才会修改Next_hop
- IBGP发送从EBGP学来的路由给IBGP邻居的时候不修改下一跳
BGP 选路原则
BGP路由器将路由通告给邻居之后,每个BGP邻居都会进行路由优选,路由选择有三种情况:
- 该路由时达到目的地的唯一路由,直接优选
- 对到达同一目的地的多条路由,优选优先级最高的
- 对到达同一目的地且具有相同优先级的多条路由,必须用更细的原则去选择一条最优的
一般来说,BGP计算路由优先级的规则如下:
- 丢弃下一跳不可达的路由
- 优选Preference_Value值最高的路由(华为私有属性,仅本地有效)
- 优选本地优先级(Local_Preference)最高的路由
- 优选手动聚合 > 自动聚合 > network > import > 从对等体学到的
- 优选AS_Path短的路由
- 起源类型 IGP > EGP > ?(Incomplete)
- 对于来自同一AS的路由,优选MED值最小的
- 优选从EBGP学来的路由 (EBGP > IBGP)
- 优选AS内部IGP的Metric最小的路由(到达下一跳的开销)
- ---- 可以开启负载分担 ----
- 优选Cluster_List (RR 路由反射器)最短的路由
- 优选Originator_ID (RR 路由反射器)最小的路由
- 优选Router_ID最小的路由器发布的路由
- 优选具有最小IP地址的邻居学来的路由
Preference_Value
Preference_Value是BGP的私有属性(华为的私有属性 思科是weight),仅在本地路由器生效, 所以是import
Preference_Value值越大越优先 默认为 0
acl 2070
rule permit source 70.4.4.0 0.0.0.255
route-policy Pre_Val permit node 10
if-match acl 2070
apply preferred-value 15
route-policy Pre_Val permit node 20
# 不写就是匹配所有
bgp 200
peer 200.1.25.5 route-policy Pre_Val import
dis bgp routing-table 70.4.4.0
# 查看具体的bgp路由信息
> refresh bgp all import
# 刷新 bgp 所有进入的
Local_Preference
公认任意属性
默认值100, 越大越优先
只能在IBGP之间有效,不通告给其他AS,表明路由器的BGP优先级,用于判断流量离开AS的最佳路由
值为空原因: 由于Local_Preference属性仅在IBGP之间有效,因此从EBGP邻居收到的Update报文不携带Local_pre值,所以为空值,空值=默认
# R5 针对70.2.2.0 / 24 修改本地优先级 使得R4可以优选R5
acl 2070
rule permit source 70.2.2.0 0.0.0.255
route-policy Local_Pre permit node 10
if-match acl 2070
apply local-preference 122
route-policy Local_Pre permit node 15
bgp 100
peer 10.1.4.4 route-policy Local_Pre export
AS_Path
公认必遵 该属性可以跨as传播
经过的AS_Path越少越优先
所以可以手动加AS_Path来影响选路, 手动加的伪装AS可以相同
# R3 通过修改AS_Path使得R2优先R5到达70.4网段
ip ip-prefix 70 permit 70.4.4.0 24 greater-equal 24 less-equal 24
route-policy AS_Path permit node 10
if-match ip-prefix 70
as-path 100 100 100 additive
route-policy AS_Path permit node 15
peer 200.1.23.2 route-policy As_Path export
Origin
公认必遵 该属性可以跨as传播
# R3
acl 2704
rule permit source 70.4.4.0 0.0.0.255
route-policy Origin permit node 10
if-match acl 2704
apply Origin incomplete
bgp 100
peer 200.1.23.2 router-policy Origin export
MED
Multi Exit Discriminator 多出口鉴别器
可选非过渡(Optional Non-transitive)
仅在两个AS之间传递, 不会传递到第三个AS
默认值是0 越小越优先
用于判断流量进入AS时的最佳路由
MED值相当于IGP使用的度量值(Metric cost),它用于判断流量进入AS时的最佳路由. 当一个运行BGP路由器通过不同的EBGP邻居获得目的地址相同但下一跳不同的多条路由时,在其他条件相同的情况下,优选MED值最小为最佳路由 ` 注意: 当从IGP引入到BGP时 MED值默认为IGP的Metric/cost值
值为空原因: 在向EBGP邻居发送Update报文更新时默认不携带MED属性,除非手动配置路由策略(route-policy)才会携带,空值=默认
# R3 通过修改MED使得R2优先R5到达70.4网段
ip ip-prefix 70 permit 70.4.4.0 24 greater-equal 24 less-equal 24
route-policy MED permit node 10
if-match ip-prefix 70
cost 8
route-policy MED permit node 15
peer 200.1.23.2 route-policy MED export
其他选路原则
# 负载分担
# R2
bgp 200
maximum load-balancing ebgp 2
# 仅在路由表中显示, BGP路由表不显示
# RR
# Cluster List : 10.1.4.4 ....(RR的router_id)
# 经过RR的数量少 优选
# Originator_ID
# 路由进入某个AS时,起始路由器的router_id
# router_id最小 优选
Community (团体)
可选过渡(Optional Transitive)
辅助选路, 过滤路由
标识具有相同特征的BGP路由, 类似于tag功能(和前缀列表功能相似)
自定义团体属性( 私有 ) 例如: 100 : 1
公共团体属性( 公有 )
- NO_advertise 不传递给任何邻居
- NO_export 不传递给EBGP邻居,但是会传递给联邦内的
- NO_export_subconfed 联邦也不传
- internet 任意传递
| 团体名称 | 团体标识 | 说明 |
|---|---|---|
| Internet | 0(0x00000000) | 默认情况下,所有路由器都属于Internet团体,具有此属性的路由器可以被通告给所有的BGP对等体 |
| NO_Export | 4294967041(0xFFFFFF01) | 具有此属性的路由在收到后,不能被发布到本地AS之外 |
| NO_Advertise | 4294967042(0xFFFFFF02) | 具有此属性的路由在收到后,不能被通告给任何其他的BGP对等体 |
| NO_Export_Subconfed | 4294967043(0xFFFFFF03) | 具有此属性的路由在收到后,不能被发布到本地AS之外,也不能被发布到子AS |
团体属性用一组以4字节未单位的列表来表示:
- aa:nn : 取值都是0-65535
- 通常aa标识AS号,nn是自定义团体属性标识, 例如100:1
- 团体号 : 团体号是0-4294967295的整数
- 标准协议中定义 : 0-65535(0x00000000-0x0000FFFF)和4294901760-4294967295(0xFFFF0000-0xFFFFFFFF)是预留的
BGP 路由聚合
概述:
BGP在AS之间传递路由信息,随着AS数量的增多,单个AS规模的扩大,BGP路由表江边的十分庞大,带来两个问题:
- 储存路由表将占用大量的内存资源,传输和处理路由信息需要消耗大量的带宽资源
- 如果传输路由条目出现频繁的更新和撤销,对网络的稳定性会造成影响
静态聚合
ip route-static 10.2.0.0 255.255.0.0 NULL 0
# 掩码最细匹配原则, 不存在的丢 NULL 0
bgp 200
network 10.2.0.0 255.255.0.0
自动聚合
只能对import引入的路由生效
bgp 200
summary automatic
手动聚合
常用
手动聚合放行明细路由原因:
- 放行明细并不是将所有的明细都放行(只将BGP转发表里面有的 或者Suppress-policy未匹配的 放行)
- 部分明细路由放行是为了区分业务 , 方便对端AS部署路由策略选路
bgp 200
aggregate 10.2.0.0 16 detail-suppressed
# 手动聚合一条 10.2.0.0的b段, 并且抑制所有明细路由
aggregate 10.2.0.0 16 detail-suppressed as-set
# 聚合时加上as-path 但是加的是无序的as-path 并不能看出路径,只能看到as号来起到防环的作用
aggregate 10.2.0.0 16 detail-suppressed suppress-policy Sup_P
# 配置抑制策略
ip ip-prefix Sup_P_S permit 10.2.0.0 16 greater-equal 25 less-equal 32
# 找出 10.2.0.0/16段中的/25到/32路由
route-policy Sup_P permit node 10
if-match ip-prefix Sup_P_S
# 路由策略调用前缀列表
注意: 聚合路由会丢失部分属性( 例如 : AS-path, 团体), 因为明细路由来自多个AS, 且明细路由的属性值不一致,将多条明细路由汇总成一条时,容易丢失部分属性
原子聚合属性(atomic-aggregate)
- 公认任意属性
- 在聚合路由时, 携带details-suppress参数(没有携带Suppress-policy), 聚合后的路由会携带该属性,用于警告下游路由器出现信息丢失(防环)
agregator属性
- 可选过渡属性
- 在聚合路由时,聚合后的路由会携带aggregator属性表明聚合发生的位置(防环),该属性包含发起聚合路由的AS号和router_id
聚合路由时携带AS_Path(as-set)的优缺点:
- 优点 : 避免环路
- 缺点 : 明细路由震荡,有可能会导致聚合路由的频繁刷新(例如as-path频繁刷新),影响网络稳定性




