quagga源码学习--BGP协议中的routemap
路由策略的基础知识
定义
路由策略(Routing Policy)作用于路由,主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径。
目的
路由器在发布、接收和引入路由信息时,根据实际组网需要实施一些策略,以便对路由信息进行过滤和改变路由信息的属性,如:
控制路由的发布
只发布满足条件的路由信息。
控制路由的接收
只接收必要、合法的路由信息,以控制路由表的容量,提高网络的安全性。
过滤和控制引入的路由
一种路由协议在引入其它路由协议发现的路由信息丰富自己的路由知识时,只引入一部分满足条件的路由信息,并对所引入的路由信息的某些属性进行设置,以使其满足本协议的要求。
设置特定路由的属性
修改通过路由策略过滤的路由的属性,满足自身需要。
配置FRR功能
为通过路由策略过滤的路由设置备份下一跳和备份出接口,可以实现IP FRR、VPN FRR、IP与VPN混合FRR功能。
收益
- 通过控制路由器的路由表规模,节约系统资源。
- 通过控制路由的接收和发送,提高网络安全性。
- 通过修改路由属性,对网络数据流量进行合理规划,提高网络性能。
- 通过FRR功能,提高网络可靠性。
路由策略的核心内容是过滤器,通过使用过滤器,可以定义一组匹配规则。下表给出各种过滤器的应用范围和匹配条件的对比。
| 访问控制列表(ACL) |
各动态路由协议 |
入接口、源或目的地址、协议类型、源或目的端口号 |
|
地址前缀列表(IP-Prefix List) |
各动态路由协议 |
源地址、目的地址、下一跳 |
|
AS路径过滤器(AS-Path-Filter) |
BGP协议 |
AS路径属性 |
|
团体属性过滤器(Community-Filter) |
BGP协议 |
团体属性 |
|
扩展团体属性过滤器(Extcommunity-Filter) |
VPN |
扩展团体属性RT |
|
RD属性过滤器(Route Distinguisher-Filter) |
VPN |
RD属性 |
|
Route-Policy |
各动态路由协议 |
目的地址、下一跳、度量值、接口信息、路由类型、ACL、地址前缀列表、AS路径过滤器、团体属性过滤器、扩展团体属性过滤器和RD属性过滤器等。 |
quagga在bgp协议中也应用了路由策略。
比如在bgp_update_rsclient中:
/* Apply export policy. */
if (CHECK_FLAG(peer->af_flags[afi][safi], PEER_FLAG_RSERVER_CLIENT) &&
bgp_export_modifier(rsclient, peer, p, &new_attr, afi, safi) == RMAP_DENY) {
reason = "export-policy;";
goto filtered;
} attr_new2 = bgp_attr_intern(&new_attr); /* Apply import policy. */
if (bgp_import_modifier(rsclient, peer, p, &new_attr, afi, safi) == RMAP_DENY) {
bgp_attr_unintern(&attr_new2); reason = "import-policy;";
goto filtered;
}
如果匹配了过滤器:
filtered:
/* This BGP update is filtered. Log the reason then update BGP entry. */
if (BGP_DEBUG(update, UPDATE_IN))
zlog(peer->log, LOG_DEBUG,
"%s rcvd UPDATE about %s/%d -- DENIED for RS-client %s due to: %s",
peer->host,
inet_ntop(p->family, &p->u.prefix, buf, SU_ADDRSTRLEN),
p->prefixlen, rsclient->host, reason);
if (ri)
bgp_rib_remove(rn, ri, peer, afi, safi);
bgp_unlock_node(rn);
quagga源码学习--BGP协议中的routemap的更多相关文章
- quagga源码学习--BGP协议的初始化
quagga支持BGP-4,BGP-4+协议,支持多协议(mpls,isis,ospf等等)以及单播,组播路由的导入和分发. 具体的协议,这里就不附录了,网络上有很多资料,或者RFC. 协议源码的学习 ...
- quagga源码学习--BGP协议对等体连接建立的状态机
创建完bgp peer之后,就要bgp start了,不然费那么大劲创建出来不做事情就销毁了,就很尴尬了. 那么对等体一旦start起来,就会进入各自的状态,在不同的状态下处理各自的事件消息. 下面列 ...
- quagga源码学习--BGP协议创建对等体
现有的路由协议都是通过分布式协议逐个配置协商运行的,协议协议,一个就不需要协议咯,至少2个才能够协议着做事情嘛,不过呢,这样就出现网元过多配置困难的问题,对网管软件要求也越来越高, SDN或许可能改变 ...
- quagga源码学习--BGP协议路由更新
BGP的核心就是交换路由,所以关键的部分还是在路由的更新与撤销上面,这之间包含了冗长的属性,community等等处理过程,不做详述. bgp_read函数是路由更新的事件处理函数,在收到BGP_MS ...
- quagga源码学习--BGP协议对等体连接tcp md5签名认证选项
bgp使用tcp连接,每个bgp实例自身是peer的一个tcp server端,同时也是peer的tcp client端. 1.在bgp_create之后都建立自己的socket服务端开始监听179端 ...
- ss源码学习--从协议建立到完成一次代理请求
上一次介绍了ss源码中各个事件处理函数完成的工作,这次具体分析一下协议的建立以及请求数据的传输过程. 因为ss的local和server共用一个类以及一系列的事件处理函数,所以看起来稍显复杂.下面来将 ...
- vue 源码学习三 vue中如何生成虚拟DOM
vm._render 生成虚拟dom 我们知道在挂载过程中, $mount 会调用 vm._update和vm._render 方法,vm._updata是负责把VNode渲染成真正的DOM,vm._ ...
- odoo源码学习之任务中的阶段字段stage_id
# 案例0004针对form表单 class Task(models.Model): _name = "project.task" _description = "对于项 ...
- JDK源码学习--String篇(二) 关于String采用final修饰的思考
JDK源码学习String篇中,有一处错误,String类用final[不能被改变的]修饰,而我却写成静态的,感谢CTO-淼淼的指正. 风一样的码农提出的String为何采用final的设计,阅读JD ...
随机推荐
- putty乱码问题
1.将linux系统编码设置为utf-8 #vi /etc/sysconfig/i18n #设置为如下内容: LANG="en_US.UTF-8" SYSFONT="la ...
- 多线程, Thread类,Runnable接口
多线程 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 单线程程序:即,若有多个任务只能依次执 ...
- DTcms网站伪静态逻辑
我们之前写伪静态就是web.config里面配置好.-->配置伪静态(URL重写),DTcms网站写的伪静态跟之前的不一样,他是静态页面和代码现实了分离.http://demo.dtcms.ne ...
- django中的构造字典(二级菜单,评论树,购物车)
1.构造父子结构: 1.1需求样式 客户列表 customer_list /customer/list/ -----> 添加客户 customer_add /customer/add/ ---- ...
- avalon.js的循环操作在表格中的应用
avalon.js的循环操作在表格中的应用 一个JAVA开发,因为做的门户系统中,数据的展示加载的速度很影响使用效果,想到的是尽量少的请求后台,然后接触到了avalon,看介绍这是一个很轻很轻的MVV ...
- 【例题收藏】◇例题·II◇ Berland and the Shortest Paths
◇例题·II◇ Berland and the Shortest Paths 题目来源:Codeforce 1005F +传送门+ ◆ 简单题意 给定一个n个点.m条边的无向图.保证图是连通的,且m≥ ...
- 【学时总结】◆学时·V◆ 逆元法
◆学时·V◆ 逆元法 □算法概述□ 逆元运算是模运算中的一个技巧,一般用于解决模运算的除法问题.模运算对于加.减.乘是有封闭性的,即 (a±b)%m=a%m±b%m,以及 (a×b)%m=a%m×b% ...
- angularjs处理多个$http
本文引自:https://www.cnblogs.com/xiaojikuaipao/p/6017899.html 在实际业务中经常需要等待几个请求完成后再进行下一步操作.但angularjs中$ht ...
- Linux入门篇(五)——Shell(一)
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...
- PHP开发环境搭建一:PHP集成环境XAMPP 的安装与配置
1. XMAPP简介 XAMPP(Apache+MySQL/MariaDB+PHP+Perl)开头的X代表X-OS,代表可以在任何常见操作系统下使用,包括Windows.Mac.Linux,开源平台. ...