揭開(kāi)單向Ping通的工作過(guò)程
發(fā)布時(shí)間:2008-09-12 閱讀數(shù): 次 來(lái)源:網(wǎng)樂(lè)原科技
當(dāng)網(wǎng)絡(luò)出現(xiàn)問(wèn)題時(shí),我們最常用的測(cè)試工具就是“ping”命令了。但有時(shí)候我們會(huì)碰到單方向ping通的現(xiàn)象,例如通過(guò)hub或一根交叉線(xiàn)連接的在同一個(gè)局域網(wǎng)內(nèi)的電腦a、 b,在檢查它們之間的網(wǎng)絡(luò)連通性時(shí),發(fā)現(xiàn)從主機(jī)a ping 主機(jī)b正常而從主機(jī)b ping 主機(jī)a時(shí),出現(xiàn)“超時(shí)無(wú)應(yīng)答”錯(cuò)誤。為什么呢?
要知道這其中的奧秘,我們有必要來(lái)看看ping命令的工作過(guò)程到底是怎么樣的。
假定主機(jī)a的ip地址是192.168.1.1,主機(jī)b的ip地址是192.168.1.2,都在同一子網(wǎng)內(nèi),則當(dāng)你在主機(jī)a上運(yùn)行“ping 192.168.1.2”后,都發(fā)生了些什么呢?
首先,ping命令會(huì)構(gòu)建一個(gè)固定格式的icmp請(qǐng)求數(shù)據(jù)包,然后由icmp協(xié)議將這個(gè)數(shù)據(jù)包連同地址“192.168.1.2”一起交給ip層協(xié)議(和icmp一樣,實(shí)際上是一組后臺(tái)運(yùn)行的進(jìn)程),ip層協(xié)議將以地址“192.168.1.2”作為目的地址,本機(jī)ip地址作為源地址,加上一些其他的控制信息,構(gòu)建一個(gè)ip數(shù)據(jù)包,并在一個(gè)映射表中查找出ip地址192.168.1.2所對(duì)應(yīng)的物理地址(也叫mac地址,熟悉網(wǎng)卡配置的朋友不會(huì)陌生,這是數(shù)據(jù)鏈路層協(xié)議構(gòu)建數(shù)據(jù)鏈路層的傳輸單元——幀所必需的),一并交給數(shù)據(jù)鏈路層。后者構(gòu)建一個(gè)數(shù)據(jù)幀,目的地址是ip層傳過(guò)來(lái)的物理地址,源地址則是本機(jī)的物理地址,還要附加上一些控制信息,依據(jù)以太網(wǎng)的介質(zhì)訪問(wèn)規(guī)則,將它們傳送出去。
主機(jī)b收到這個(gè)數(shù)據(jù)幀后,先檢查它的目的地址,并和本機(jī)的物理地址對(duì)比,如符合,則接收;否則丟棄。接收后檢查該數(shù)據(jù)幀,將ip數(shù)據(jù)包從幀中提取出來(lái),交給本機(jī)的ip層協(xié)議。同樣,ip層檢查后,將有用的信息提取后交給icmp協(xié)議,后者處理后,馬上構(gòu)建一個(gè)icmp應(yīng)答包,發(fā)送給主機(jī)a,其過(guò)程和主機(jī)a發(fā)送icmp請(qǐng)求包到主機(jī)b一模一樣。
從ping的工作過(guò)程,我們可以知道,主機(jī)a收到了主機(jī)b的一個(gè)應(yīng)答包,說(shuō)明兩臺(tái)主機(jī)之間的去、回通路均正常。也就是說(shuō),無(wú)論從主機(jī)a到主機(jī)b,還是從主機(jī)b到主機(jī)a,都是正常的。那么,是什么原因引起只能單方向ping通的呢?
一、安裝了個(gè)人防火墻
在共享上網(wǎng)的機(jī)器中,出于安全考慮,大部分作為服務(wù)器的主機(jī)都安裝了個(gè)人防火墻軟件,而其他作為客戶(hù)機(jī)的機(jī)器則一般不安裝。幾乎所有的個(gè)人防火墻軟件,默認(rèn)情況下是不允許其他機(jī)器ping本機(jī)的。一般的做法是將來(lái)自外部的icmp請(qǐng)求報(bào)文濾掉,但它卻對(duì)本機(jī)出去的icmp請(qǐng)求報(bào)文,以及來(lái)自外部的icmp應(yīng)答報(bào)文不加任何限制。這樣,從本機(jī)ping其他機(jī)器時(shí),如果網(wǎng)絡(luò)正常,就沒(méi)有問(wèn)題。但如果從其他機(jī)器ping這臺(tái)機(jī)器,即使網(wǎng)絡(luò)一切正常,也會(huì)出現(xiàn)“超時(shí)無(wú)應(yīng)答”的錯(cuò)誤。
大部分的單方向ping通現(xiàn)象源于此。解決的辦法也很簡(jiǎn)單,根據(jù)你自己所用的不同類(lèi)型的防火墻,調(diào)整相應(yīng)的設(shè)置即可。
二、錯(cuò)誤設(shè)置ip地址
正常情況下,一臺(tái)主機(jī)應(yīng)該有一個(gè)網(wǎng)卡,一個(gè)ip地址,或多個(gè)網(wǎng)卡,多個(gè)ip地址(這些地址一定要處于不同的ip子網(wǎng))。但對(duì)于在公共場(chǎng)所使用的電腦,特別是網(wǎng)吧,人多手雜,其中不泛有“探索者”。曾有一次兩臺(tái)電腦也出現(xiàn)了這種單方向ping通的情況,經(jīng)過(guò)仔細(xì)檢查,發(fā)現(xiàn)其中一臺(tái)電腦的“撥號(hào)網(wǎng)絡(luò)適配器”(相當(dāng)于一塊軟網(wǎng)卡)的tcp/ip設(shè)置中,設(shè)置了一個(gè)與網(wǎng)卡ip地址處于同一子網(wǎng)的ip地址,這樣,在ip層協(xié)議看來(lái),這臺(tái)主機(jī)就有兩個(gè)不同的接口處于同一網(wǎng)段內(nèi)。當(dāng)從這臺(tái)主機(jī)ping其他的機(jī)器時(shí),會(huì)存在這樣的問(wèn)題:
(1)主機(jī)不知道將數(shù)據(jù)包發(fā)到哪個(gè)網(wǎng)絡(luò)接口,因?yàn)橛袃蓚€(gè)網(wǎng)絡(luò)接口都連接在同一網(wǎng)段;
?。?)主機(jī)不知道用哪個(gè)地址作為數(shù)據(jù)包的源地址。因此,從這臺(tái)主機(jī)去ping其他機(jī)器,ip層協(xié)議會(huì)無(wú)法處理,超時(shí)后,ping 就會(huì)給出一個(gè)“超時(shí)無(wú)應(yīng)答”的錯(cuò)誤信息提示。但從其他主機(jī)ping這臺(tái)主機(jī)時(shí),請(qǐng)求包從特定的網(wǎng)卡來(lái),icmp只須簡(jiǎn)單地將目的、源地址互換,并更改一些標(biāo)志即可,icmp應(yīng)答包能順利發(fā)出,其他主機(jī)也就能成功ping通這臺(tái)機(jī)器了。