重读Route Print路由表的一些心得
版权声明:原创作品,允许转载,转载:
http://jeffyyko.blog.51cto.com/28563/140006
|
(首发在bbs.winos.cn,若转载请说明出处,谢谢)
拜读了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系统,注意,这里我们先不安装网卡驱动,如图:
2、进入命令行程序,输入route print ,我们查看一下当前的路由表,如图:
从上图我们可以看出,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 命令,如图 图中已经添加了一块网卡,如果网卡是停用的状态,此时的路由表和没有网卡结果一样。 4、启用这块网卡,大家请看图 很明显,多了下面一条记录: 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 这个网络的路由,掩码自然是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 来表示。 从上面我们可以看出,下一条的指定很重要,因为它会指引系统或程序等访问请求下一个要去的地方在哪里,这点至关重要。 大致说完了,有的地方说的有点乱,请见谅。 如果有错误的地方,请大家指正,谢谢。
本文出自 “
许一君的原创技术博客” 博客,请务必保留此出处
http://jeffyyko.blog.51cto.com/28563/140006
|