只能單方向ping通的原因

網絡出現問題時,我們最常用的測試工具就是“Ping”命令了。但有時候我們會碰到單方向 Ping通的現象,例如通過HUB或一根交叉線連接的在同一個局域網內的電腦A、 B,在檢查它們之間的網絡連通性時,發現從主機A Ping 主機B正常而從主機B Ping 主機A時,出現“超時無應答”錯誤。爲什麼呢?
2 O; A& q$ l% {8 W" S" p; {$ X# k! C7 v
要知道這其中的奧祕,我們有必要來看看Ping命令的工作過程到底是怎麼樣的。
) C  c; _2 L, S# p- Y4 A6 O# o4 F$ z, G
假定主機A的IP地址是192.168.1.1,主機B的IP地址是192.168.1.2,都在同一子網內,則當你在主機A上運行“Ping 192.168.1.2”後,都發生了些什麼呢?
& o* ^7 B; }6 q* h5 m! E* A& a& H( t3 f) p# S/ `/ |" k! l* B
首先,Ping命令會構建一個固定格式的ICMP請求數據包,然後由ICMP協議將這個數據包連同地址 “192.168.1.2”一起交給IP層協議(和ICMP一樣,實際上是一組後臺運行的進程),IP層協議將以地址“192.168.1.2”作爲目的 地址,本機IP地址作爲源地址,加上一些其他的控制信息,構建一個IP數據包,並在一個映射表中查找出IP地址192.168.1.2所對應的物理地址 (也叫MAC地址,熟悉網卡配置的朋友不會陌生,這是數據鏈路層協議構建數據鏈路層的傳輸單元——幀所必需的),一併交給數據鏈路層。後者構建一個數據 幀,目的地址是IP層傳過來的物理地址,源地址則是本機的物理地址,還要附加上一些控制信息,依據以太網的介質訪問規則,將它們傳送出去。. d, p+ |3 q1 V( E  R/ D( G
6 w/ m- F. }6 Y3 V1 I5 O. [4 r
主機B收到這個數據幀後,先檢查它的目的地址,並和本機的物理地址對比,如符合,則接收;否則丟棄。接收後檢查該數據幀,將IP數據包從幀中提取出 來,交給本機的IP層協議。同樣,IP層檢查後,將有用的信息提取後交給ICMP協議,後者處理後,馬上構建一個ICMP應答包,發送給主機A,其過程和 主機A發送ICMP請求包到主機B一模一樣。
$ o1 y9 `% @2 G# G) j2 `  A. [  ?( {! a5 Q
從Ping的工作過程,我們可以知道,主機A收到了主機B的一個應答包,說明兩臺主機之間的去、回通路均正常。也就是說,無論從主機A到主機B,還是 從主機B到主機A,都是正常的。那麼,是什麼原因引起只能單方向Ping通的呢?2 K6 K" @) s9 R! x- f2 w# D& V* v
7 V5 p7 s' r  c
一、安裝了個人防火牆$ {" l7 m2 ]% N: ^
: q/ {1 s+ h' u9 D- P. }
在共享上網的機器中,出於安全考慮,大部分作爲服務器的主機都安裝了個人防火牆軟件,而其他作爲客戶機的機器則一般不安裝。幾乎所有的 個人防火牆軟件,默認情況下是不允許其他機器Ping本機的。一般的做法是將來自外部的ICMP請求報文濾掉,但它卻對本機出去的ICMP請求報文,以及 來自外部的ICMP應答報文不加任何限制。這樣,從本機Ping其他機器時,如果網絡正常,就沒有問題。但如果從其他機器Ping這臺機器,即使網絡一切 正常,也會出現“超時無應答”的錯誤。
4 s% b! ^# y$ a# K. O% H9 P" K( K% O# G$ m9 f! h; Z
大部分的單方向Ping通現象源於此。解決的辦法也很簡單,根據你自己所用的不同類型的防火 牆,調整相應的設置即可。0 U; d6 @; j# s# Z# M& T: z

! d+ G: @) v  s( Y$ O  二、錯誤設 置IP地址' E. E$ \6 x- Z; I/ P- t
8 J( ~$ P, @/ w* d/ a# E; A" J7 N& p' ^
正常情況下,一臺主機應該有一個網卡,一個IP地址,或多個網卡,多個IP地址(這些地址一定要處於不同的IP子網)。但對於在公共場所使用的電腦, 特別是網吧,人多手雜,其中不泛有“探索者”。曾有一次兩臺電腦也出現了這種單方向Ping通的情況,經過仔細檢查,發現其中一臺電腦的“撥號網絡適配 器”(相當於一塊軟網卡)的TCP/IP設置中,設置了一個與網卡IP地址處於同一子網的IP地址,這樣,在IP層協議看來,這臺主機就有兩個不同的接口 處於同一網段內。當從這臺主機Ping其他的機器時,會存在這樣的問題:
; Q! \) k4 h3 f5 Q( v, n0 t3 \) k
(1)主機不知道將數據包發到哪個網絡接口,因爲有兩個網絡接口都連接在同一網段;
# M2 A. \: R3 B* R8 I) R! A; B: G/ c& S
(2)主機不知道用哪個地址作爲數據包的源地址。因此,從這臺主機去Ping其他機器,IP層協議會無法處理,超時後,Ping 就會給出一個“超時無應答”的錯誤信息提示。但從其他主機Ping這臺主機時,請求包從特定的網卡來,ICMP只須簡單地將目的、源地址互換,並更改一些 標誌即可,ICMP應答包能順利發出,其他主機也就能成功Ping通這臺機器了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章