AS-path的学习
组成结构:
正则表达式描述了一种字符串匹配的模式,由普通字符(例如字符a到z)和特殊字符(或称“元字符”)组成。
功能:
根据匹配规则对字符串进行替换操作,使得AS-path的过滤更加灵活
首先记住一下经常使用的字符及其意义。
现网中,我们可能会收到来自多个AS区域的路由,如果需要给特定的AS区域打标记,那么就需要使用BGP的正则表达四
.(点) |
匹配任意单个字符,包括空格。 |
^(英文模式下shift+6) |
匹配字符的首行 |
$(英文模式下shift+4) |
匹配字符的尾部 |
_(下划线) |
匹配一个符号。如逗号,括号,空格符等等在表达式的开头或结尾时还可作起始符、结束符 |
| (管道符) |
表示逻辑或 |
\ |
转义字符,表示后面的字符全为普通字符 |
* |
|
+ |
匹配前面字符1次或多次出现 |
? |
匹配前面的字符以0此或1此出现 |
[ ] |
范围字符,表示一个范围,只匹配包含在范围内的字符之一 |
() |
匹配变化的AS号或者一个独立的匹配 |
单个示例:
^$:表示匹配不包含任何AS号的AS-path,也就是本AS内的路由,IBGP路由。
.*:”.”表示任何字符,“*”表示此字符可以出现任何次数,可以说匹配任何AS号的路由
_200$:表示匹配路由起源于200AS的路由。如果不加下划线,则会匹配以AS1200,AS2100等路由,所以用正则表达式的时候一定要小心。
^20[^0-6]$:匹配除200~206之外的AS-path。
常用的例子
1、命令ip as-path-filter 1 permit ^21.*47$可以匹配到哪个AS-path(B)
A、as-path(32 1274 23)
B、as-path(213 234 234 2347)
C、as-path(456 234 432 474)
D、as-path(124 34 32 23)
解析:一个字符一个去解析,^21表示匹配首部为21的AS自治域。.(点)表示匹配单个字符,*表示匹配前面的字符可以以一个或多个出现,因为前面为字符”.”所以可以为任意字符。47$表示匹配以47结尾的AS号。所以总的来说匹配以21开头,47结尾的AS号,所以B正确。
2ip as-path-filter 1 permit ^300(_100)*(_500)*$,该AS-PATH-FILTER 不能匹配那个AS-PATH属性? B
A.300
B.300 200 500
C.300 500
D.300 500 500 500
解析:“^”300,首先匹配首部为300的AS号,ABCD都正确,其次“(_100)*”表示AS100可以以0次或多次出现。。因为AS200不满足上述属性所以不匹配
3.命令 ip as-path-filter permit ^14.*24$可以匹配到哪个AS_PATH ? B
- AS_PATH(321 12 2374)
- AS_PATH(143 621 743 2324)
- AS_PATH(125 328 74 23)
- AS_PATH(32 1274 23)
解析:这里.*组合表示表示任何字符。表示匹配首部为14 尾部为24的自治号。切莫理解为.为3.与*结合所以匹配14333333333324这样的自治号。初学者很容易这样理解。记住“.”是表示匹配任何的字符
4.130(多选)现有一个as-path-filter: ip as-path-filter 1 permit .*(100|400)$,该as-path-filter 可以匹配以下哪些AS_PATH属性? ABC
A.100
B.3100
D.300 4200
解析:.*这里可不用管。“|”表示逻辑或(100|400)表示匹配100或400的AS号。总体可以理解为只要自治号里包含100或400的都可进行匹配。