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 ...
随机推荐
- 洛谷P4316 绿豆蛙的归宿(期望)
题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出 ...
- Spring Cloud 入门Eureka -Consumer服务消费(Ribbon)(二)
前面一篇介绍了LoadBalancerClient来实现负载均衡, 这里介绍Spring cloud ribbon 1.ribbon Spring Cloud Ribbon 是一个基于Http和TCP ...
- vim指令,快捷键汇总
Vim 命令.操作.快捷键全集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vi ...
- linux常见内核参数
参数 描述 net.ipv4.ip_forward 接口间转发报文net.ipv4.tcp_tw_reuse 表示是否允许将处于 TIME-WAIT 状态的 socket (TIME-WAIT 的端口 ...
- PHP提取奇数或偶数下标元素
该功能主要用到 array_filter() 函数,这个函数可以用回调函数过滤数组中的单元.用法: array array_filter ( array $array [, callable $cal ...
- C# 控件置于最顶层、最底层、隐藏、显示
控件置于最顶层.最底层 pictureBox1.BringToFront();//将控件放置所有控件最前端 pictureBox1.SendToBack();//将控件放置所有控件最底端 控件隐藏.显 ...
- struct2 命名空间
转自http://blog.csdn.net/carefree31441/article/details/4857546 使用Struts2,配置一切正常,使用常用tag也正常,但是在使用<s: ...
- Ubuntu 14.10 配置JDK + J2EE
本文仅作为本人在Ubuntu 14.10下安装JDK + J2EE的一个记录: 安装JDK 从Oracle的官网下载jdk-7u75-linux-x64.tar.gz 将jdk-7u75-linux- ...
- .Net Mvc 4 Route路由
1.前言 在创建一个MVC项目后就可以,在App_Start文件下的RouteConfig.cs里面就可以定义我们的路由规则,其中已经有默认的路由规则了,routes.IgnoreRoute是让路由规 ...
- android gridview 停止滚动
http://blog.csdn.net/yaphetzhao/article/details/50544105 参考上面的博客,关键代码我就贴出来吧: public void stopGridVie ...