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 ...
随机推荐
- express_webpack自动刷新
现在,webpack可以说是最流行的模块加载器(module bundler).一方面,它为前端静态资源的组织和管理提供了相对较完善的解决方案,另一方面,它也很大程度上改变了前端开发的工作流程.在应用 ...
- Extjs4.2 tabPosition left 相关
解决tabPosition:left 标签的方向问题 <%@ page language="java" import="java.util.*" pa ...
- java基础必备单词讲解 day six
development development development development 开发 development developmentenvironment environment en ...
- Apache.Tomcat 调用Servlet原理之Class类的反射机制,用orc类解释
有一个兽人类 package com.swift.servlet; public class OrcDemo { private int hp; private int mp; private int ...
- cordova-plugin-themeablebrowser 0.2.17 "ThemeableBrowser"ionic跳转外链插件在ios中heardBar会遮住内容的bug
ionic+angular的app项目中需要在App打开一个外部的url链接,用了这个插件发现在iPhone手机中会出现toolbar挡住url页面内容 解决方法: 在原有基础上加上statusBar ...
- 私有maven库发布及使用流程
## 私有maven库发布流程 ### 环境配置 - idea环境下,如果使用内置maven,需要手动生成settings.xml,并关联. - 操作如下 - 生成settings.xml 右键pom ...
- 搭建私有maven库发布及使用流程
一:背景 Apache Maven是当Java技术栈前最流行的项目管理工具,它提供了一系列方便快捷的命令帮助程序员们进行Java工程的开发工作.Maven服务器位于美国,由于出国带宽和众多因素,在国内 ...
- 介绍hadoop中的hadoop和hdfs命令
有些hive安装文档提到了hdfs dfs -mkdir ,也就是说hdfs也是可以用的,但在2.8.0中已经不那么处理了,之所以还可以使用,是为了向下兼容. 本文简要介绍一下有关的命令,以便对had ...
- 封装动态数组类Array
功能: 1.增.删.改.查 2.扩容.缩容 3.复杂度分析 4.均摊复杂度 5.复杂度震荡 分析动态数组的时间复杂度: 分析resize的时间复杂度: public class Array<E& ...
- Sublime Text3的快捷键和插件
今天重装了一下Sublime Text3,发现了一个不错的网站,关于Sublime Text3的插件安装介绍的很详细,还有右键增强菜单和浏览器打开快捷键的创建.奉上链接 http://www.cnbl ...