筆者單位的一臺(tái)電腦曾出現(xiàn)過這種故障,局域網(wǎng)內(nèi)一切正常,與其他機(jī)器連接正常,并與網(wǎng)關(guān)通信正常(能夠正常Ping通),但就是上不了外網(wǎng)。首先檢查了一下網(wǎng)絡(luò)配置信息,IP地址是自動(dòng)獲取,DNS信息正確,網(wǎng)關(guān)信息正常,但奇怪的是多了一條網(wǎng)關(guān)信息(如圖1)。
網(wǎng)絡(luò)中沒有另外的網(wǎng)關(guān),只 有192.168.0.1,那 么192.168.0.2是怎么來(lái)的?再看其他辦公室的網(wǎng)絡(luò)配置,都只有一個(gè)網(wǎng)關(guān)信息。問題會(huì)是在這里嗎?如果系統(tǒng)始終與網(wǎng)關(guān)192.168.0.2相連, 因?yàn)楦静淮嬖谶@個(gè)網(wǎng)關(guān),肯定是連不通外網(wǎng)的。
圖1 本地網(wǎng)絡(luò)配置信息
圖2 本地ARP緩存表
圖3 本地網(wǎng)絡(luò)路由信息表
為了驗(yàn)證,我做了以下操作。在DOS下:ARP –D (清除ARP緩存信息)
PING WWW.SINA.COM.CN
ARP –A (查看ARP緩存信息)
結(jié)果得到如圖2所示的ARP緩存信息。
從圖2可以看出,系統(tǒng)先連接到網(wǎng)關(guān)192.168.0.2 上,因網(wǎng)絡(luò)中根本不存在這個(gè)網(wǎng)關(guān),所以得到一個(gè)無(wú)效的ARP地址。
現(xiàn)在有兩個(gè)問題需要弄清楚:這個(gè)多余的網(wǎng)關(guān)信息是如何來(lái)的?網(wǎng)絡(luò)為什么會(huì)選擇這個(gè)多余網(wǎng)關(guān),而不選擇正確的網(wǎng)關(guān)?這時(shí)我想到路由表,打開看了看:
route print
從圖3可以看出,單機(jī)內(nèi)部IP協(xié)議是怎樣維護(hù)著不同網(wǎng)絡(luò)段數(shù)據(jù)包的轉(zhuǎn)發(fā),也許你會(huì)認(rèn)為電腦應(yīng)只存在于一個(gè)網(wǎng)絡(luò)段,宏觀的看是這樣的,這里說的卻是從協(xié)議內(nèi)部微觀角度查看。
1.網(wǎng)絡(luò)地址(Network Destination)網(wǎng)絡(luò)目的地址范圍包含以下四種:
主機(jī)地址:某個(gè)特定主機(jī)的網(wǎng)絡(luò)地址。
子網(wǎng)地址:某個(gè)特定子網(wǎng)的網(wǎng)絡(luò)地址。
網(wǎng)絡(luò)地址:某個(gè)特定網(wǎng)絡(luò)的網(wǎng)絡(luò)地址。
默認(rèn)路由:所有未在路由表中指定的網(wǎng)絡(luò)地址。
2.網(wǎng)絡(luò)掩碼(Netmask):用于標(biāo)明本地計(jì)算機(jī)的網(wǎng)絡(luò)地址范圍。與網(wǎng)絡(luò)地址相與的結(jié)果用于定義本地計(jì)算機(jī)可以到達(dá)的網(wǎng)絡(luò)目的地址范圍。通常情況下,在添加路由時(shí),Windows要求輸入的網(wǎng)絡(luò)地址和網(wǎng)絡(luò)掩碼相與后的結(jié)果必須等于網(wǎng)絡(luò)地址,否則路由添加會(huì)失敗。
圖4 正常的本地路由信息表
3.網(wǎng)關(guān)(Gateway,又稱下一跳服務(wù)器):在發(fā)送IP數(shù)據(jù)包時(shí),網(wǎng)關(guān)定義了針對(duì)特定的網(wǎng)絡(luò)目的地址,數(shù)據(jù)包發(fā)送到的下一跳服務(wù)器。如果是本地計(jì)算機(jī)直接連接到的網(wǎng)絡(luò),網(wǎng)關(guān)通常是本地計(jì)算機(jī)對(duì)應(yīng)的網(wǎng)絡(luò)接口,但此時(shí)接口必須和網(wǎng)關(guān)一致;如果是遠(yuǎn)程網(wǎng)絡(luò)或默認(rèn)路由,網(wǎng)關(guān)通常是本地計(jì)算機(jī)所連接到的網(wǎng)絡(luò)上的某個(gè)服務(wù)器或路由器。
4.接 口(Interface):接口定義了針對(duì)特定的網(wǎng)絡(luò)目的地址,本地計(jì)算機(jī)用于發(fā)送數(shù)據(jù)包的網(wǎng)絡(luò)接口。網(wǎng)關(guān)必須位于和接口相同的子網(wǎng)(默認(rèn)網(wǎng)關(guān)除外),否則造成在使用此路由項(xiàng)時(shí)需調(diào)用其他路由項(xiàng),從而可能會(huì)導(dǎo)致路由死鎖。
5.躍點(diǎn)數(shù)(Metric):躍點(diǎn)數(shù)用于指出路由的成本,通常代表到達(dá)目標(biāo)地址所需要經(jīng)過的躍點(diǎn)數(shù)量,一個(gè)躍點(diǎn)代表經(jīng)過一個(gè)路由器。躍點(diǎn)數(shù)越低,代表路由成本越低;躍點(diǎn)數(shù)越高,則路由成本越高。當(dāng)具有多條到達(dá)相同目的網(wǎng)絡(luò)的路由項(xiàng)時(shí),TCP/IP會(huì)選擇具有更低躍點(diǎn)數(shù)的路由項(xiàng)。
當(dāng)TCP/IP需要向某個(gè)IP地址發(fā)起通信時(shí),它會(huì)對(duì)路由表進(jìn)行評(píng)估,以確定如何發(fā)送數(shù)據(jù)包。評(píng)估過程如下: TCP/IP使用需要通信的目的IP地址和路由表中每一個(gè)路由項(xiàng)的網(wǎng)絡(luò)掩碼進(jìn)行相與計(jì)算,如果相與后的結(jié)果匹配對(duì)應(yīng)路由項(xiàng)的網(wǎng)絡(luò)地址,則記錄下此路由項(xiàng)。
當(dāng)計(jì)算完路由表中所有的路由項(xiàng)后,TCP/IP選擇記錄下的路由項(xiàng)中的最長(zhǎng)匹配路由(網(wǎng)絡(luò)掩碼中具有最多“1”位的路由項(xiàng))來(lái)和此目的IP地址進(jìn)行通信。如果存在多個(gè)最長(zhǎng)匹配路由,那么選擇具有最低躍點(diǎn)數(shù)的路由項(xiàng)。如果所有目標(biāo)不是多播、廣播、本地回路、本地IP的數(shù)據(jù)包,全部通過指定的網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)訪問。一般也就是表中第一項(xiàng)路由。
現(xiàn)在我們回過頭來(lái)看一下這臺(tái)電腦與外網(wǎng)連接的過程,因?yàn)槭峭饩W(wǎng),所以直接找到默認(rèn)的網(wǎng)關(guān)了,但這里有兩個(gè),選擇哪一個(gè),看后面的躍點(diǎn)數(shù)(Metric),192.168.0.1 的躍 點(diǎn) 數(shù)(Metric) 為 20,而192.168.0.1的躍點(diǎn)數(shù)(Metric)為15,根據(jù)路由規(guī)則,自然選擇路點(diǎn)數(shù)少的那一個(gè),也就是192.168.0.2。
現(xiàn)在問題找到了,至于這個(gè)路由項(xiàng)是怎么來(lái)的呢,我想可能是人為試用Route命令不小心加進(jìn)去了,或者有病毒有意破壞了?,F(xiàn)在把網(wǎng)卡禁用,再啟用一次,重新獲得路由表信息,如圖4所示。
那個(gè)多余的路由項(xiàng)消失了,打開瀏覽器,一切正常了。為了驗(yàn)證一下,我又試著加了一個(gè)路由選項(xiàng):
route add 0.0.0.0 mask 0.0.0.0 192.168.0.2 Metric 25
這樣路由表又多了一個(gè)路由選項(xiàng),只不過是Metric值大于原來(lái)的值。這時(shí)再打開瀏覽器,一切正常,與外網(wǎng)連接未受到影響。現(xiàn)在總算弄清楚了。看來(lái)這小小的路由表也大有文章可作呀。