當網絡出現問題時,咱們最經常使用的測試工具就是「Ping」命令了。但有時候咱們會碰到單方向Ping通的現象,例如經過HUB或一根交叉線鏈接的在同一個局域網內的電腦A、B,在檢查它們之間的網絡連通性時,發現從主機A Ping主機B正常而從主機B Ping主機A時,出現「超時無應答」錯誤。爲何呢? 安全
要知道這其中的奧祕,咱們有必要來看看Ping命令的工做過程究竟是怎麼樣的。服務器
假定主機A的IP地址是192.168.1.1,主機B的IP地址是192.168.1.2,都在同一子網內,則當你在主機A上運行「Ping 192.168.1.2」後,都發生了些什麼呢?網絡
首先,Ping命令會構建一個固定格式的ICMP請求數據包,而後由ICMP協議將這個數據包連同地址「192.168.1.2」一塊兒交給IP層協議(和ICMP同樣,其實是一組後臺運行的進程),IP層協議將以地址「192.168.1.2」做爲目的地址,本機IP地址做爲源地址,加上一些其餘的控制信息,構建一個IP數據包,並在一個映射表中查找出IP地址192.168.1.2所對應的物理地址(也叫MAC地址,熟悉網卡配置的朋友不會陌生,這是數據鏈路層協議構建數據鏈路層的傳輸單元——幀所必需的),一併交給數據鏈路層。後者構建一個數據幀,目的地址是IP層傳過來的物理地址,源地址則是本機的物理地址,還要附加上一些控制信息,依據以太網的介質訪問規則,將它們傳送出去。工具
主機B收到這個數據幀後,先檢查它的目的地址,並和本機的物理地址對比,如符合,則接收;不然丟棄。接收後檢查該數據幀,將IP數據包從幀中提取出來,交給本機的IP層協議。一樣,IP層檢查後,將有用的信息提取後交給ICMP協議,後者處理後,立刻構建一個ICMP應答包,發送給主機A,其過程和主機A發送ICMP請求包到主機B如出一轍。 測試
從Ping的工做過程,咱們能夠知道,主機A收到了主機B的一個應答包,說明兩臺主機之間的去、回通路均正常。也就是說,不管從主機A到主機B,仍是從主機B到主機A,都是正常的。spa
可是假如安裝並開啓了防火牆:blog
在共享上網的機器中,出於安全考慮,大部分做爲服務器的主機都安裝了我的防火牆軟件,而其餘做爲客戶機的機器則通常不安裝。幾乎全部的我的防火牆軟件,默認狀況下是不容許其餘機器Ping本機的。通常的作法是未來自外部的ICMP請求報文濾掉,但它卻對本機出去的ICMP請求報文,以及來自外部的ICMP應答報文不加任何限制。這樣,從本機Ping其餘機器時,若是網絡正常,就沒有問題。但若是從其餘機器Ping這臺機器,即便網絡一切正常,也會出現「超時無應答」的錯誤。進程
大部分的單方向Ping通現象源於此。解決的辦法也很簡單,根據你本身所用的不一樣類型的防火牆,調整相應的設置便可。後臺