前,有看到yansy老师的有关route print的一篇帖子,拜读了一下,当时只是粗略的看了一下,也从中了解了不少东西,但自己没有细想,最近在做一些rras的测试时,添加静态路由那一部分我被卡住了,于是想把这部分再仔细琢磨一下,这些是我昨天和今天的学习成果和感悟,写出来和大家分享,同时,如果其间有错误请各位不吝指正,谢谢。

      我们先看一个单一宿主tcp/ip主机上路由表的例子,这里首先介绍一个概念,什么是宿主机,宿主机就是执行编译、链接、定址等任务的计算机(当然在别的领域可能有另外的含义,这里不再多述)。如果这台计算机上同时运行tcp/ip协议,就成为tcp/ip宿主主机,“单一”这里就很明确的表明单独的一台计算机,并为介入任何网络,包括局域网等。英文名称single-homed,这个词在微软的相关技术文章里出现过多次,相对的,还有多宿主主机,也就是mulit-homed。

OK,下面我们来逐步分析路由表里的各个条目,准确说应该是逐层分析。

环境:纯净xp sp3客户端
内网网段:192.168.0.X-192.168.7.X 网关:192.168.0.1 掩码:255.255.248.0
由ISA2006代理上网
测试步骤:

1、新装一台干净的XP SP3系统,注意,这里我们先不安装网卡驱动,如图
重读route print路由表的一些心得_休闲
2、进入命令行程序,输入route print ,我们查看一下当前的路由表,如图
重读route print路由表的一些心得_重读route_02
从上图我们可以看出,127.0.0.1和物理的网卡没有任何关系,此时通过查看本机的路由表,会得到一下条目
Network Destination        Netmask       Gateway    Interface   Metric
       127.0.0.0        255.0.0.0        127.0.0.1    127.0.0.1    1
关于各个值及含义,后面会有讲,这里先提一下
3、现在我们将XP的网卡驱动装上并停用,并再次运行route print 命令,如图
重读route print路由表的一些心得_print路由表的一些心得_03
图中已经添加了一块网卡,如果网卡是停用的状态,此时的路由表和没有网卡结果一样。
4、启用这块网卡,大家请看图
重读route print路由表的一些心得_重读route_04
很明显,多了下面一条记录:
Network Destination        Netmask             Gateway       Interface    Metric
       127.0.0.0                255.0.0.0        127.0.0.1        127.0.0.1       1
255.255.255.255    255.255.255.255 255.255.255.255    20003       1
此时,出现了一种较特殊的情况,尽管已经启用网卡,但没有配置IP地址,现在这块网卡处于孤立的状态,
瓷实运行ipconfig,则得到 “Media State . . . . . . . . . . . : Media disconnected”这样的回应。
255.255.255.255这个地址原本是一个有限广播,属于广播地址的一种,但在这种情况下为什么会给出全255的地址,我有点不明白。
   
       OK,现在我们就知道了,127.0.0.1这个特殊的地址,不仅仅是127.0.0.1,这个127.X.X.X 都是如此,它是预先一已定义在系统中,也就是内置的回环地址,这个和硬件网络设备的地址没有什么关系,它的存在是为了测试本机的tcp/ip协议工作是否正常,假设你想用抓包工具抓包,你会发现无法抓取到任何数据包,因为在对127.0.0.1进行测试的时候,产生的流量并为经过网卡,所以可以说明完全是系统内部的一个测试过程,但,通过route print还是可以看到127.0.0.1相关的几条路由,因为这些路由条目是必须存在的,以保证最基本的网络稳定性,同时也是很重要的网络调试信息。

我们现在还原正常的测试环境,无论是手动设置IP或者是从dhcp服务器中获取IP地址,当地址正确,所谓正确,系统是从几个方面来判定的
1、IP地址的首个字段十进制数字必须在1-223之间(不含127),为什么?因为0开头的地址,无法当作一个IP地址来使用,其次,大于223后的地址均作为保留或测试只用,不能用在实际的网络环境中。
2、IP地址只能输入有效范围的整数,首位1-223之间,其余位0-255,当然广播地址也不行。
3、还有一些限定,在我们输入完IP后,系统内部会做一些基本的判断,以此保证IP地址合理。
当然,你在设定IP的时候也要依据当前网络地址规划而定,否则任意输入的地址,尽管逻辑上有效,如果无用,那也是没什么实际意义的。
设置好IP,在我们确定之后,系统会根据设置的IP地址很快计算出一张路由表,也就是route print命令显示出的部分。这些是系统的内部机制,我们不用理会。这里不仅有内部127段的路由条目,还有我们新加入的地址的相应路由条目。

我们打开cmd,运行route print ,来查看一下当前的路由表,如下:
Active Routes:
Network Destination    Netmask       Gateway             Interface       Metric
0.0.0.0                      0.0.0.0             192.168.0.1    192.168.5.20    20
127.0.0.0                   255.0.0.0          127.0.0.1           127.0.0.1              1
192.168.0.0                 255.255.248.0     192.168.5.20    192.168.5.20    20
192.168.5.20             255.255.255.255   127.0.0.1           127.0.0.1          20
192.168.5.255              255.255.255.255 192.168.5.20    192.168.5.20    20
224.0.0.0                   240.0.0.0          192.168.5.20    192.168.5.20    20
255.255.255.255       255.255.255.255   192.168.5.20     192.168.5.20       1
Default Gateway:    192.168.0.1
=======================================================
Persistent Routes:
   None
大家也可以打开自己当前网络的路由表对照起来看,会更清晰些。
初看这个路由表,让人感觉有点怪,怎么一开始就目的地了呢?   源在那????? 为了更容易理解,我把这个路由表的格式稍微改了一下:
------
Interface       Network Dest.    Netmask                      Gateway                 Metric
127.0.0.1             127.0.0.0           255.0.0.0             127.0.0.1                    1
127.0.0.1              192.168.5.20        255.255.255.255 127.0.0.1                20
-------
192.168.5.20       192.168.5.255    255.255.255.255 192.168.5.20          20
192.168.5.20       192.168.0.0       255.255.248.0    192.168.5.20          20
192.168.5.20       0.0.0.0              0.0.0.0                192.168.0.1             20
192.168.5.20       224.0.0.0          240.0.0.0          192.168.5.20          20
192.168.5.20       255.255.255.255 255.255.255.255   192.168.5.20              1
Default Gateway:     192.168.0.1
-------------------------
请大家注意,我把interface调到了第一列,并根据interface一列,将表分为2部分,一部分是127的路由条目,一部分是和物理网卡ip 192.168.5.20相关的路由条目。

下面我们来分析这些路由条目

先看第一部分
127.0.0.1尽管很特殊,但毕竟还是一个IP地址,那么它也一样有自己的网段和广播地址,尽管我们几乎用不到。
所以,它自身有1条路由就是从接口127.0.0.1到目的地127.0.0.0 这个8位网段,掩码自然是255.0.0.0,网关呢? 网关简单说就是下一跳出口地址,因为如果你想访问127.0.0.0/8的任意一个地址,显然这个地址和自己在一个网段上,没有必要跨网段,就像你想从自己家的厨房到客厅一样,不用出门,就可以直接到达,因此最终的出口(下一跳)就是自己了,metric 表示跳跃数,用于确定最佳路由,在某些情况下越小越好,但也不是绝对的。

第二条可以这样理解,如果想让tcp/ip和网卡良好的通讯,就需要有一条路由可以让系统内部的路由到物理网卡上,如此,才可以保证在本机上设置的任意IP均可以顺利与环回地址通讯,同时这也是系统自身网络机制必须实现的一部分。

剩下的都和网卡地址有关了。

第三条,接口为本机IP,目标为192.168.5.255,这是一个直接广播地址,也就是广播地址的另一种类型,指代一个特定网络中的所有主机。显然这里是只192.168.5.X的目标地址。ping命令其实就是用的这条路由。

第四条,可以理解为,如果某个地址和掩码255.255.248.0进行与运算后结果都是192.168.0.0,则本机地址可以与之通讯,这条路由的作用其实是代替了这个计算过程,和上一跳相比,比仅仅局限与192.168.5.x,而是符合上面条件的所有地址,实际上,我可以ping通192.168.0.x-192.166.7.x 的任意一个IP,就是因为这条路由在起作用。

第五条,如果访问地址并非本地,则系统会将目标地址当作0.0.0.0 掩码是0.0.0.0,也就是处本地、127地址之外的所有地址均通过192.168.0.1这个网关出去,这条路由通常被称为默认路由,说白了,你上外网就是依靠此条路由策略。就是因为有了这条路由,才可以将访问外网的请求都发给网关192.168.0.1,之后就由0.1主机上的isa2006去处理这些请求了。

第六条,224开头的是多播地址,这个是在某些情况下给多地址发广播时用的,因此这里会单独作为一条路由策略列出。

最后一条,255.255.255.255的地址已提到过,它是广播地址的另一种被称为有限广播,同时也叫本地广播。我想这个地址经常用抓包工具的朋友应该比较常见,MAC地址是全F的就是目标广播地址了,arp协议会用到此地址会对全部主机发送广播以实现查询特定主机的请求,由于对方mac地址位置,所以就用全F,也就是FF-FF-FF-FF-FF-FF 来表示。

从上面我们可以看出,下一条的指定很重要,因为它会指引系统或程序等的访问请求下一个要去的地方在哪里,这点至关重要。

大致说完了,有的地方说的有点乱,请见谅。

如果有错误的地方,请大家指正,谢谢。