“Ping”的幕后過(guò)程
我們以下面一個(gè)網(wǎng)絡(luò )為例:有A、B、C、D四臺機子,一臺路由RA,子網(wǎng)掩碼均為255.255.255.0,默認路由為192.168.0.1
1.在同一網(wǎng)段內
在主機A上運行“Ping 192.168.0.5”后,都發(fā)生了些什么呢? 首先,Ping命令會(huì )構建一個(gè)固定格式的ICMP請求數據包,然后由ICMP協(xié)議將這個(gè)數據包連同地址“192.168.0.5”一起交給IP層協(xié)議(和 ICMP一樣,實(shí)際上是一組后臺運行的進(jìn)程),IP層協(xié)議將以地址“192.168.0.5”作為目的地址,本機IP地址作為源地址,加上一些其他的控制信息,構建一個(gè)IP數據包,并想辦法得到192.168.0.5的MAC地址(物理地址,這是數據鏈路層協(xié)議構建數據鏈路層的傳輸單元——幀所必需的),以便交給數據鏈路層構建一個(gè)數據幀。關(guān)鍵就在這里,IP層協(xié)議通過(guò)機器B的IP地址和自己的子網(wǎng)掩碼,發(fā)現它跟自己屬同一網(wǎng)絡(luò ),就直接在本網(wǎng)絡(luò )內查找這臺機器的MAC,如果以前兩機有過(guò)通信,在A(yíng)機的ARP緩存表應該有B機IP與其MAC的映射關(guān)系,如果沒(méi)有,就發(fā)一個(gè)ARP請求廣播,得到B機的MAC, 一并交給數據鏈路層。后者構建一個(gè)數據幀,目的地址是IP層傳過(guò)來(lái)的物理地址,源地址則是本機的物理地址,還要附加上一些控制信息,依據以太網(wǎng)的介質(zhì)訪(fǎng)問(wèn)規則,將它們傳送出去。
主機B收到這個(gè)數據幀后,先檢查它的目的地址,并和本機的物理地址對比,如符合,則接收;否則丟棄。接收后檢查該數據幀,將IP數據包從幀中提取出來(lái),交給本機的IP層協(xié)議。同樣,IP層檢查后,將有用的信息提取后交給ICMP協(xié)議,后者處理后,馬上構建一個(gè)ICMP應答包,發(fā)送給主機A,其過(guò)程和主機A發(fā)送ICMP請求包到主機B一模一樣。
2.不在同一網(wǎng)段內
在主機A上運行“Ping 192.168.1.4”后,開(kāi)始跟上面一樣,到了怎樣得到MAC地址時(shí),IP協(xié)議通過(guò)計算發(fā)現D機與自己不在同一網(wǎng)段內,就直接將交由路由處理,也就是將路由的MAC取過(guò)來(lái),至于怎樣得到路由的MAC,跟上面一樣,先在A(yíng)RP緩存表找,找不到就廣播吧。路由得到這個(gè)數據幀后,再跟主機D進(jìn)行聯(lián)系,如果找不到,就向主機A返回一個(gè)超時(shí)的信息。
對Ping后返回信息的分析
1.Request timed out
這是大家經(jīng)常碰到的提示信息,很多文章中說(shuō)這是對方機器置了過(guò)濾ICMP數據包,從上面工作過(guò)程來(lái)看,這是不完全正確的,至少有下幾種情況。

?。?) 對方已關(guān)機,或者網(wǎng)絡(luò )上根本沒(méi)有這個(gè)地址:比如在上圖中主機A中PING 192.168.0.7 ,或者主機B關(guān)機了,在主機A中PING 192.168.0.5 都會(huì )得到超時(shí)的信息。
?。?)對方與自己不在同一網(wǎng)段內,通過(guò)路由也無(wú)法找到對方,但有時(shí)對方確實(shí)是存在的,當然不存在也是返回超時(shí)的信息。
?。?)對方確實(shí)存在,但設置了ICMP數據包過(guò)濾(比如防火墻設置)。
怎樣知道對方是存在,還是不存在呢,可以用帶參數 -a 的Ping命令探測對方,如果能得到對方的NETBIOS名稱(chēng),則說(shuō)明對方是存在的,是有防火墻設置,如果得不到,多半是對方不存在或關(guān)機,或不在同一網(wǎng)段內。
?。?)錯誤設置IP地址
正常情況下,一臺主機應該有一個(gè)網(wǎng)卡,一個(gè)IP地址,或多個(gè)網(wǎng)卡,多個(gè)IP地址(這些地址一定要處于不同的IP子網(wǎng))。但如果一臺電腦的“撥號網(wǎng)絡(luò )適配器”(相當于一塊軟網(wǎng)卡)的TCP/IP設置中,設置了一個(gè)與網(wǎng)卡IP地址處于同一子網(wǎng)的IP地址,這樣,在IP層協(xié)議看來(lái),這臺主機就有兩個(gè)不同的接口處于同一網(wǎng)段內。當從這臺主機Ping其他的機器時(shí),會(huì )存在這樣的問(wèn)題:
A.主機不知道將數據包發(fā)到哪個(gè)網(wǎng)絡(luò )接口,因為有兩個(gè)網(wǎng)絡(luò )接口都連接在同一網(wǎng)段。
B.主機不知道用哪個(gè)地址作為數據包的源地址。因此,從這臺主機去Ping其他機器,IP層協(xié)議會(huì )無(wú)法處理,超時(shí)后,Ping 就會(huì )給出一個(gè)“超時(shí)無(wú)應答”的錯誤信息提示。但從其他主機Ping這臺主機時(shí),請求包從特定的網(wǎng)卡來(lái),ICMP只須簡(jiǎn)單地將目的、源地址互換,并更改一些標志即可,ICMP應答包能順利發(fā)出,其他主機也就能成功Ping通這臺機器了。
2.Destination host Unreachable
?。?) 對方與自己不在同一網(wǎng)段內,而自己又未設置默認的路由,比如上例中A機中不設定默認的路由,運行Ping 192.168.0.1.4就會(huì )出現“Destination host Unreachable”。
?。?)網(wǎng)線(xiàn)出了故障
這里要說(shuō)明一下“destination host unreachable”和 “time out”的區別,如果所經(jīng)過(guò)的路由器的路由表中具有到達目標的路由,而目標因為其他原因不可到達,這時(shí)候會(huì )出現“time out”,如果路由表中連到達目標的路由都沒(méi)有,那就會(huì )出現“destination host unreachable”。
3.Bad IP address
這個(gè)信息表示您可能沒(méi)有連接到DNS服務(wù)器,所以無(wú)法解析這個(gè)IP地址,也可能是IP地址不存在。
4.Source quench received
這個(gè)信息比較特殊,它出現的機率很少。它表示對方或中途的服務(wù)器繁忙無(wú)法回應。
5.Unknown host——不知名主機
這種出錯信息的意思是,該遠程主機的名字不能被域名服務(wù)器(DNS)轉換成IP地址。故障原因可能是域名服務(wù)器有故障,或者其名字不正確,或者網(wǎng)絡(luò )管理員的系統與遠程主機之間的通信線(xiàn)路有故障。
6.No answer——無(wú)響應
這種故障說(shuō)明本地系統有一條通向中心主機的路由,但卻接收不到它發(fā)給該中心主機的任何信息。故障原因可能是下列之一:中心主機沒(méi)有工作;本地或中心主機網(wǎng)絡(luò )配置不正確;本地或中心的路由器沒(méi)有工作;通信線(xiàn)路有故障;中心主機存在路由選擇問(wèn)題。
7.Ping 127.0.0.1:127.0.0.1是本地循環(huán)地址
如果本地址無(wú)法Ping通,則表明本地機TCP/IP協(xié)議不能正常工作。
8.no rout to host:網(wǎng)卡工作不正常。
9.transmit failed,error code:10043網(wǎng)卡驅動(dòng)不正常。
10.unknown host name:DNS配置不正確。
聯(lián)系客服