ip命令手册(四)
时间:2005-05-10 来源:wenzk
摘要
这一部分是关于多播路由和通道的内容,以及策略路由的一些相关内容。
(2002-11-12 17:04:44)
By nixe0n
mroute、mr
这个命令的操作对象是多播路由缓存条目,这个缓存是由一个用户空间的多播路由监控进程(例如pimd或者mrouted)建立的。
目前,由于受和多播路由引擎接口的限制,还不能通过ip命令修改多播路由对象,因此我们只能查看。
show或者list
10.4.ip mroute show -- 列出多播路由缓存条目
to PREFIX(default) | 选择到目的多播地址是PREFIX |
iif NAME | 接收多播数据包的网络接口 |
from PREFIX | PREFIX选择多播路由的IP源地址 |
kuznet@amber:~ $ ip mroute ls |
多播路由缓存条目是(S,G)形式的,S是源地址,G是多播组。iif是接收多播数据包的网络接口,如果设备名是关键词unresolved,就表示路由监控进程不能解析这个条目;接下来的关键词是oif,它后面跟着一些输出网络接口,接口之间用空格分开。
使用-statistics选项,我们可以得到更为详细的输出信息,包括:数据包的数量,通过这条路由转发的字节数以及到达错误接口的数据包数量(如果有)。
kuznet@amber:~ $ ip -s mr ls 224.66/16 |
tunnel、tunl
ip tunnel命令的操作对象是网络通道(tunnel)。所谓通道(tunnel)是指把数据包封装到IPv4数据包中,使用IP协议发出。有关通道的更多信息,请参考iproute的文档Tunnels over IP in Linux-2.2。
add、delete、change、show或者list
11.4.ip tunnel add -- 添加新的通道
ip tunnel change -- 修改现有的通道
ip tunnel delete -- 删除一个通道
name NAME(default) | 选择通道设备名 |
mode MODE | 设置通道模式。有效的模式包括:ipip、sit和gre。 |
remote ADDRESS | 设置通道远端地址 |
local ADDRESS | 设置进入通道数据包的固定本地地址,必须是在本机另外一个接口上的地址。 |
ttl N | 设置进入通道数据包的TTL为N。N是一个1—255之间的数字。0是一个特殊的值,表示这个数据包的TTL值是继承(inherit)的。ttl参数的缺省值是:inherit。 |
tos T或者dsfield T | 设置进入通道数据包的TOS域,缺省是inherit。 |
dev NAME | 把通道绑定到设备NAME,以便进入通道的数据包只能通过NAME设备路由,并且当对端发生变化时,不能够在另外的设备解开封装。 |
nopmtudisc | 在这个通道上禁止路径最大传输单元发现( Path MTU Discovery)。默认情况下,这个功能是打开的。注意:这个选项和固定的ttl是不兼容的,如果使用了固定的ttl参数,系统会打开路径最大传输单元发现( Path MTU Discovery)功能。 |
key k,ikey k,okey k | 只适用于GRE通道,设置keyed GRE通道的key。K或者是一个数字或者是IP地址形式的数字序列。参数key在通道的双向使用,ikey和okey为输入和输出设置不同的key。 |
csum,icsum,ocsum | 只用于GRE通道,计算进入通道数据包的校验和。ocsum表示只计算出去的数据包的校验和;icsum表示只计算进入的数据包的校验和;而csum等于icsum ocsum。 |
seq,iseq,oseq | 只适用于GRE通道,顺序发送/接收数据包。oseq使向外的数据包顺序发送;iseq要求所有进入的数据包都是按照顺序的;而seq等于iseq oseq。 |
netadm@amber:~ # ip tunnel add Cisco mode sit remote 192.31.7.104 |
无
kuznet@amber:~ $ ip tunnel ls Cisco |
输出的第一部分是通道的设备名,接着是通道模式。下面就是设置通道时的各个参数。
kuznet@amber:~ $ ip -s tunl ls Cisco |
以上输出结果里面的数字和使用ip -s link show的输出是一样的,但是每个标志都是特定于通道的。
CsumErrs | 对于打开校验和检验的GRE通道,这个数字是由于校验和错误而丢弃的数据包数量。 |
OutOfSeg | 在打开顺序功能的GRE通道内,由于顺序错误而丢弃的数据包数量。 |
Mcasts | 在GRE通道上接收到的多播数据包的数量。 |
DeadLoop | 由于通道是回环到自己而没有传输的数据包数目。 |
NoRoute | 由于到对端没有路由而没有被传输的数据包数目。 |
NoBufs | 由于内核不能分配缓冲区而没有被传输的数据包数目。 |
ip命令可以用于连续地监视设备、地址和路由的状态。这个命令选项的格式有点不同,命令选项的名字叫做monitor,接着是操作对象:
ip monitor [ file FILE ] [ all | OBJECT-LIST ] |
OBJECT-LIST是一些被监控的对象,它可以包括link、address和route。如果没有给出file参数,ip命令就打开RTNETLINK,在上面监听,并把状态的变化输出到标准输出设备。
如果使用了file参数,ip命令就不是在RTNETLINK上监听,而是打开由file参数指定的包含RTNETLINK信息的二进制文件,把解析的结果显示出来。这种历史文件可以有工具产生。这个工具具有和ip monitor命令的语法类似的命令行。理想的情况是,在网络配置命令起动之前运行rtmon命令(当然,你可以在任意的时间起动rtmon,它会记录从起动开始的状态变化)。你可以在起动脚本中插入以下命令行:
rtmon file /var/log/rtmon.log |
如果我们执行如下命令:
[root@nixe0n root]ip route add dev eth0 to 61.133.4.7 via 211.99.114.65 |
然后,我们使用ip monitor命令分析/var/log/rtmon.log会得到如下输出结果:
[root@nixe0n root]ip monitor file /var/log/rtmon.log r |
在使用OSPF或者BGP协议的路由器上,其路由表可能会很大。如果我们需要对其进行归类或者计算通过每条路由的数据包,就需要保留很多信息。更糟糕的是,如果我们需要区别的不止是数据包的目的地址,还要包括它们的源地址,这个任务就更为复杂了,几乎无法解决。
对于这个问题,Cisco IOS Release 12.0 Quality of Service Solutions Configuration Guide: Configuring QoS Policy Propagation via Border Gateway Protocol提出了一个解 决方案,就是把策略从路由协议迁移到转发引擎。基本上,通过BGP的Cisco策略迁移(Cisco Policy Propagation via BGP)就是基于此种方式,它使路由器保留所有和转发引擎关系紧密的RIB(Routing Information Base,路由信息库),以便策略路由规则能够监查所有的路由属性,包括ASPATH的信息和团体(community)字符串。
而Linux把这分为由用户空间监控维护的路由信息库(Routing Infomation Base,RIB),和内核层的转发信息库(Forwarding Infomation Base,FIB)。
这是我们的幸运,因为还有另外的解决方案,而这个方案允许更为灵活的策略和更为丰富的语义。
换句话说,可以在用户空间根据路由的属性把它们归类,例如:BGP路由的ASPATH、团体(community);OSPF路由的标记和它们的范围。而管理员手工添加路由时,也知道它们的属性。按照这个标准划分的集合(我们把它们叫做realm)数量就很少了,因此按照路由的源地址和目的地址进行完全的分类就可以管理了。
因此,每个路由都可以被分配到一个范围(realm)中。一般这是有路由监控进程作的,不过对于静态路由,也可以使用ip route命令手工处理。
在某些情况下(例如路由监控进程不理解realm)为了方便,漏掉的realm可以由路由策略规则补齐。
内核使用如下算法计算每个数据包的源范围(realm)和目的范围(realm):
|
这个过程完成后,我们就知道了数据包的源范围和目的范围。如果某些还是未知,它就会被设置为0(realm unknown)
范围(realm)主要还是由TC(Traffic Control)的路由类别(route classifier)使用,我们可以使用路由类别把数据包分配到给不同的流量类(trafffic class),为数据包计数,以及为它们制定调度策略。
相对于TC,使用realm为进入的数据包计数就简单多了,但这是一个非常有用的应用。内核可以根据realm收集总结数据包统计信息。在用户空间,我们可以使用工具rtacct查看这些信息。例如:
kuznet@amber:~ $ rtacct russia |
结果表示,这个路由器收到153805个来自russia地区的数据包,并且向russia转发了169176个数据包。russia范围由ASPATH(路径自治系统)在俄罗斯的路由组成。
|