网络子系统59_策略路由、多路径路由

//	参考 深入理解linux网络技术内幕
//	策略路由:
//		指允许用户除了可以根据目的ip地址配置路由外,还可以根据其他参数配置路由
//	内核对策略路由的支持:
//		1.在默认情况下,不支持策略路由, 使用2张路由表,1张本地表,1张用于配置管理
//		2.编译支持策略路由,使用255张表,1张本地表,其他根据配置参数使用不同的表
//	选择路由表:
//		内核可以基于以下参数作为选择路由表时所用的策略:
//			1.源ip地址/目的ip地址
//			2.入口设备
//			3.tos

//	策略路由查找:
//		1.检查路由缓存
//		2.根据配置策略选择要用的路由表
//		3.从选择的路由表中查找路由

//	多路径路由:
//		多路径路由是指可以为一条路由的目的地址指定多个下一跳
//	多路径路由选择下一跳:
//		通过多路径选择算法,从多个下一跳中选择下一跳
时间: 2024-08-05 01:18:03

网络子系统59_策略路由、多路径路由的相关文章

网络子系统66_策略路由初始化

// 策略路由链表 // 系统中所有策略路由通过fib_rules链接在一起 static struct fib_rule default_rule = { .r_clntref = ATOMIC_INIT(2),//引用计数 .r_preference = 0x7FFF,//路由规则优先级 .r_table = RT_TABLE_DEFAULT,//路由表标示符 .r_action = RTN_UNICAST,//路由类型,间接定义了当路由查找匹配时应采取的动作 }; static struc

网络子系统69_路由表辅助程序

// 关闭设备上的ip协议 // 函数主要任务: // 1.删除与设备相关的路由信息 // 2.刷新路由缓存 // 3.通知邻居子系统,与该设备有关的邻居项失效 1.1 static void fib_disable_ip(struct net_device *dev, int force) { if (fib_sync_down(0, dev, force)) fib_flush(); rt_cache_flush(0); arp_ifdown(dev); } // 设备状态改变/删除ip,标

企业网络的未来:最好的路由,就是没有路由

本文讲的是企业网络的未来:最好的路由,就是没有路由,由思科,华为,Juniper等公司制造的路由器是企业网络的基石,但同时也成为残酷国际竞争环境中商业间谍最钟爱的入侵通道. 回到15年前,据说当德国政府发现美国政府一直在通过美国生产的 路由器里安插的后门暗中监视他们在联合国的外交代表团之后 [1],他们就资助了GPG 开源项目. CISCO 路由器最有可能包含后门 [2].因为类似的原因,华为路由器在某些国家被严令禁止使用. [3]. 并且阿尔卡特路由器看起来也没有少尝试安插后门 [4]. 在路

Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介

原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnbl

网络子系统68_路由表处理设备ip配置事件

// 路由表处理inet配置事件 // 在ip_rt_init->ip_fib_init中注册 1.1 static struct notifier_block fib_inetaddr_notifier = { .notifier_call = fib_inetaddr_event, }; // 路由表处理地址配置事件 // 函数主要功能: // 1.设备配置ip地址 // 1.1 将ip地址添加到路由表 // 1.2 同步多路径路由 // 1.3 刷新路由缓存 // 2.设备删除ip地址 /

网络子系统63_路由子系统处理netlink事件

// 路由子系统netlink控制块 // 在ip_rt_init->devinet_init中注册. 1.1 static struct rtnetlink_link inet_rtnetlink_table[RTM_MAX - RTM_BASE + 1] = { [4] = { .doit = inet_rtm_newaddr, }, [5] = { .doit = inet_rtm_deladdr, }, [6] = { .dumpit = inet_dump_ifaddr, }, [8]

网络子系统70_路由缓存操作

// 刷新路由缓存 // 参数: // delay, 刷新操作的延迟时间 // 函数主要任务: // 1.重新计算路由刷新定时器的到期时间 // 2.如果delay=0,则立即刷新缓存 // 3.激活定时器,使用最近的刷新延迟作为到期时间 1.1 void rt_cache_flush(int delay) { unsigned long now = jiffies; //用户态 int user_mode = !in_softirq(); if (delay < 0) delay = ip_r

网络子系统61_路由子系统初始化

// 路由缓存内存量指定办法: // 1.通过启动参数rhash_entries指定hash表bucket个数 // 2.根据物理内存页数确定使用的内存量 // 根据物理页数分配缓存内存: // 1.goal目标内存页数=总页数/(2**(26-PAGE_SHIFT)) // 2.最接近goal内存页数的order,用于从伙伴系统中分配 // 3.rt_hash_mask=order页可容纳的bucket数 // 4.对齐rt_hash_mask到2的幂次 // 5.从伙伴系统中分配order页

网络子系统73_入口路由缓存查找

// 入口路由缓冲查找 // 返回值: // 0,路由查找成功 // -ENOBUFF,内存问题导致查找失败 // -EINVAL,常规查找失败 // hash值计算: // 目的地址,源地址,入口设备index,tos进行hash // 函数主要任务: // 1.根据hash值遍历bucket // 2.比较5元组 // 3.如果缓存命中,更新引用计数,绑定到skb->dst // 4.否则,如果为本地多播地址,或者内核支持多播路由,多播路由中查找 // 5.否则,在路由表中查找 // 注:缓