linux的路由实现

这段时间一直在看《深入理解linux网络内幕》,看完了路由系统的前几章,包括30,31和32章,在此做个小结。(感觉外国人写书,真是有发散思维,讲一个问题,从应用到内核逐渐铺开,知识的广度和深度厉害呀)

一. 路由表的操作
	主要有三个途径:
	1. 通过命令,如ip route, route,tc等命令可以直接操作路由表,主要用于静态配置路由表
	2. 路由器间通过网关协议(如GBP,边际网关协议)来动态维护路由表
	3. 通过接收处理ICMP重定向报文来维护路由表

二. 路由表的功能
	在网络世界中,主要由IP地址来标识不同的主机和网络,就像真实世界的街道门牌地址一样,IP地址唯一的标识了一台主机;但光是有了IP地址还是远远不够的,路由系统将这些独立的IP地址连接在了一起,使信息可以从一台主机传输到另一台主机。可以这么说,IP地址和路由系统组成了整个互联网。

三. linux路由表的组成
	由main表,默认路由表default和local表组成,local表主要存放本地路由,本地网络路由和广播路由,其他的路由都存放在main表。一般来说系统管理员不需要操作local表,该表由系统自动维护,route命令默认操作的是main表。其中main表的ID是254,local表的ID是255,default表的ID是253,ID为0的路由表系统保留。
	如果配置了multiple talbe,那么系统可以最多支持256张路由表,除去上面提到的4张表,自定义的表ID的序号是在1-252之间。如果要使用自定义路由表,需在文件/etc/iproute2/rt_tables中加入表的定义,格式如 “1       r1”,每张表占一行;然后在ip route命令中使用参数table 指定表ID即可。

四. linux的高级路由概念
	1. 策略路由(policy routing)
	策略路由和传统路由不同,传统路由只能根据目标网络地址来确定路由,而策略路由可以根据数据包大小,源地址或应用等来选择路由。
	传统路由的操作命令如下:
		ip route add 192.168.3.211/24 via 192.168.1.1 
		以上命令的意思是,发到网络192.168.1.211/24的数据包,使用网关192.168.1.1转发。
	策略路由使用如下命令:
		ip rule add from 192.168.1.50 via 192.168.1.1 table 1 prohibit
		使用策略路由时,需要先添加路由表(在表/etc/iproute2/rt_tables中),然后在ip rule命令中指定需使用的表。
	注意:系统查找路由的顺序是,路由缓存-->本地路由表(local)-->路由策略(有可能查找自定义表)-->主路由表(main表)
	
	2. 多路复用multipath routing
	在linux核心叫做equal cost multipath(宏CONFIG_IP_ROUTE_MULTIPATH),指可以为路由指定多个网关地址(下一跳地址)。

五. linux内核关于路由的实现
相关的数据结构:
	fib_table: 路由表的结构,该结构里有操作路由表的函数,字段tb_id为表的ID标识,字段tb_data是占位符,存放具体的路由数据。
	fn_hash:存放在fib_table结构的字段tb_data
	fn_zone:路由网络地址按掩码存放在该结构,IPV4中有32个
	fib_node:相同掩码的不同网段的路由存放在这里
	fib_alias:相同网段但TOS等参数不同的路由存放在该结构
	fib_info:具体的路由数据
	fib_nh:路由的下一跳,如果路由有多个下一跳,则存放在这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值