笔者单位的一台电脑曾出现过这种故障,局域网内一切正常,与其他机器连接正常,并与网关通信正常(能够正常Ping通),但就是上不了外网。首先检查了一下网络配置信息,IP地址是自动获取,DNS信息正确,网关信息正常,但奇怪的是多了一条网关信息(如图1)。
网络中没有另外的网关,只 有192.168.0.1,那 么192.168.0.2是怎么来的?再看其他办公室的网络配置,都只有一个网关信息。问题会是在这里吗?如果系统始终与网关192.168.0.2相连, 因为根本不存在这个网关,肯定是连不通外网的。
图1 本地网络配置信息
图2 本地ARP缓存表
图3 本地网络路由信息表
为了验证,我做了以下操作。在DOS下:ARP –D (清除ARP缓存信息)
PING WWW.SINA.COM.CN
ARP –A (查看ARP缓存信息)
结果得到如图2所示的ARP缓存信息。
从图2可以看出,系统先连接到网关192.168.0.2 上,因网络中根本不存在这个网关,所以得到一个无效的ARP地址。
现在有两个问题需要弄清楚:这个多余的网关信息是如何来的?网络为什么会选择这个多余网关,而不选择正确的网关?这时我想到路由表,打开看了看:
route print
从图3可以看出,单机内部IP协议是怎样维护着不同网络段数据包的转发,也许你会认为电脑应只存在于一个网络段,宏观的看是这样的,这里说的却是从协议内部微观角度查看。
1.网络地址(Network Destination)网络目的地址范围包含以下四种:
主机地址:某个特定主机的网络地址。
子网地址:某个特定子网的网络地址。
网络地址:某个特定网络的网络地址。
默认路由:所有未在路由表中指定的网络地址。
2.网络掩码(Netmask):用于标明本地计算机的网络地址范围。与网络地址相与的结果用于定义本地计算机可以到达的网络目的地址范围。通常情况下,在添加路由时,Windows要求输入的网络地址和网络掩码相与后的结果必须等于网络地址,否则路由添加会失败。
图4 正常的本地路由信息表
3.网关(Gateway,又称下一跳服务器):在发送IP数据包时,网关定义了针对特定的网络目的地址,数据包发送到的下一跳服务器。如果是本地计算机直接连接到的网络,网关通常是本地计算机对应的网络接口,但此时接口必须和网关一致;如果是远程网络或默认路由,网关通常是本地计算机所连接到的网络上的某个服务器或路由器。
4.接 口(Interface):接口定义了针对特定的网络目的地址,本地计算机用于发送数据包的网络接口。网关必须位于和接口相同的子网(默认网关除外),否则造成在使用此路由项时需调用其他路由项,从而可能会导致路由死锁。
5.跃点数(Metric):跃点数用于指出路由的成本,通常代表到达目标地址所需要经过的跃点数量,一个跃点代表经过一个路由器。跃点数越低,代表路由成本越低;跃点数越高,则路由成本越高。当具有多条到达相同目的网络的路由项时,TCP/IP会选择具有更低跃点数的路由项。
当TCP/IP需要向某个IP地址发起通信时,它会对路由表进行评估,以确定如何发送数据包。评估过程如下: TCP/IP使用需要通信的目的IP地址和路由表中每一个路由项的网络掩码进行相与计算,如果相与后的结果匹配对应路由项的网络地址,则记录下此路由项。
当计算完路由表中所有的路由项后,TCP/IP选择记录下的路由项中的最长匹配路由(网络掩码中具有最多“1”位的路由项)来和此目的IP地址进行通信。如果存在多个最长匹配路由,那么选择具有最低跃点数的路由项。如果所有目标不是多播、广播、本地回路、本地IP的数据包,全部通过指定的网关进行转发访问。一般也就是表中第一项路由。
现在我们回过头来看一下这台电脑与外网连接的过程,因为是外网,所以直接找到默认的网关了,但这里有两个,选择哪一个,看后面的跃点数(Metric),192.168.0.1 的跃 点 数(Metric) 为 20,而192.168.0.1的跃点数(Metric)为15,根据路由规则,自然选择路点数少的那一个,也就是192.168.0.2。
现在问题找到了,至于这个路由项是怎么来的呢,我想可能是人为试用Route命令不小心加进去了,或者有病毒有意破坏了。现在把网卡禁用,再启用一次,重新获得路由表信息,如图4所示。
那个多余的路由项消失了,打开浏览器,一切正常了。为了验证一下,我又试着加了一个路由选项:
route add 0.0.0.0 mask 0.0.0.0 192.168.0.2 Metric 25
这样路由表又多了一个路由选项,只不过是Metric值大于原来的值。这时再打开浏览器,一切正常,与外网连接未受到影响。现在总算弄清楚了。看来这小小的路由表也大有文章可作呀。