12.4.4 CIDR:无类域间路由
CIDR是在RFC1519(1993年9月)里定义的,它废除了以前由一个IP地址的网络部分所确定的分类系统.CIDR与子网划分相似,是子网划分方法的直接扩展.CIDR要依赖于一个明确的网络掩码来确定地址的网络部分和主机部分之间的边界.但与划分子网不同的是,处于路由选择的目的,网络部分比地址暗示的分类所暗指的网络部分小.使用较短的网络掩码可以聚集若干个网络.因此,CIDR有时叫做超网(supernetting).
使用CIDR就可以将若干C类网络分配一个网点,而不要求Internet对各个网络具有单独的路由表项.还可以为这个网店分配某个A类或B类地址的一个子空间.例如,加入某个网点已获得8个C类地址,从192.144.0.0到192.144.7.0(CIDR的记法为192.144.0.0/21).这个网点在内部可以将它们用作:
- 一个长度为/21的网络,2046台主机,网络掩码为255.255.248.0;
- 8个长度为/24的网络,各自具有254台主机,网络掩码为255.255.255.0;
- 16个长度为/25的网络,各自具有126台主机,网络掩码为255.255.255.128;
- 32个长度为/26的网络,各自具有62台主机,网络掩码为255.255.255.192等;
12.5 路由选择
路由选择(routing,也叫做路由,选路)是引导一个包通过网络迷宫,从它的源地址到达目的地址的过程.在TCP/IP系统中,这类似于在一个陌生的国家里问路.您问的第一个人可能把您指引到正确的城市.当离目的地比较近的时候,下一个人就能告诉您怎么样到达正确的街道.最后,据目的地很近了,这时就有人可以告诉您您想找的那幢大楼了.
TCP/IP路由信息采用了规则(“路由[route]”)的形式,如”为了达到网络A,要经过计算机C发送包”.同事还存在一条默认路由,它告诉您应该怎么样处理要送往没有明确路由的网络的包.
路由信息保存在内核的一张表里,表中的每一项都有一些参数,其中包括每个列出的网络的网络掩码(这个参数以前是可选的,但是现在如果默认的网络掩码不正确,就必须给出).为了把一个包路由至特定的地址,内核会选择与之匹配的路由中最确切的一条(即带有最长网络掩码的路由).如果内核没有找到适合的路由,有没有默认路由的话,那么它就向发送方返回一个”网络不可达(network unreachable)”的ICMP错误消息.
“路由”一词通常表示两种截然不同的意思:
- 在路由表里寻找一个网络地址,以便将一个包转发到它的目的地.
- 首先建立路由表.
12.5.1 路由表
可以用netstat -r命令检查一台计算机上的路由表.用命令netstat -rn避免做DNS查询,并把素有的信息以数字地址形式输出.
我们将从19.4节开始详细地讨论netstat命令,但是这里给出的剪短例子可以让您对路由有一个比较形象的概念.这台主机有两个网络接口:在132.236.227.0/24网络上的132.236.227.93(eth0),和在132.236.212.0/26网络上的132.236.212.1(eth1):
Destination域通常就是一个网络地址,Gateway网关必须是一个主机地址.
路由表可以静态或者动态地配置,也可以结合这两种方法进行配置.静态路由是用route命令明确地输入的路由.只要系统还在运行,静态路由就应该在路由表里,他们通常是通过一个系统启动脚本在系统启动脚本在系统引导时设置的.
最后一条路由也是在系统引导时加入的.它配置了一个名为loopback(环回接口)不让主机发送给自己的包跑到网络上去,而是在内核中直接从网络输出队列传输到网路输入队列
在一个稳定的本地网络里,静态路由是一种高效的解决方案.它易于管理,而且很可靠.但是,它要求系统管理员确切地知道系统引导时网络的拓扑结构,而且这个拓扑结构不会经常改变.