“Ping”的幕后過程
我們以下面一個網(wǎng)絡(luò)為例:有A、B、C、D四臺機子,一臺路由RA,子網(wǎng)掩碼均為255.255.255.0,默認(rèn)路由為192.168.0.1
1.在同一網(wǎng)段內(nèi)
在主機A上運行“Ping 192.168.0.5”后,都發(fā)生了些什么呢? 首先,Ping命令會構(gòu)建一個固定格式的ICMP請求數(shù)據(jù)包,然后由ICMP協(xié)議將這個數(shù)據(jù)包連同地址“192.168.0.5”一起交給IP層協(xié)議(和 ICMP一樣,實際上是一組后臺運行的進(jìn)程),IP層協(xié)議將以地址“192.168.0.5”作為目的地址,本機IP地址作為源地址,加上一些其他的控制信息,構(gòu)建一個IP數(shù)據(jù)包,并想辦法得到192.168.0.5的MAC地址(物理地址,這是數(shù)據(jù)鏈路層協(xié)議構(gòu)建數(shù)據(jù)鏈路層的傳輸單元——幀所必需的),以便交給數(shù)據(jù)鏈路層構(gòu)建一個數(shù)據(jù)幀。關(guān)鍵就在這里,IP層協(xié)議通過機器B的IP地址和自己的子網(wǎng)掩碼,發(fā)現(xiàn)它跟自己屬同一網(wǎng)絡(luò),就直接在本網(wǎng)絡(luò)內(nèi)查找這臺機器的MAC,如果以前兩機有過通信,在A機的ARP緩存表應(yīng)該有B機IP與其MAC的映射關(guān)系,如果沒有,就發(fā)一個ARP請求廣播,得到B機的MAC, 一并交給數(shù)據(jù)鏈路層。后者構(gòu)建一個數(shù)據(jù)幀,目的地址是IP層傳過來的物理地址,源地址則是本機的物理地址,還要附加上一些控制信息,依據(jù)以太網(wǎng)的介質(zhì)訪問規(guī)則,將它們傳送出去。
主機B收到這個數(shù)據(jù)幀后,先檢查它的目的地址,并和本機的物理地址對比,如符合,則接收;否則丟棄。接收后檢查該數(shù)據(jù)幀,將IP數(shù)據(jù)包從幀中提取出來,交給本機的IP層協(xié)議。同樣,IP層檢查后,將有用的信息提取后交給ICMP協(xié)議,后者處理后,馬上構(gòu)建一個ICMP應(yīng)答包,發(fā)送給主機A,其過程和主機A發(fā)送ICMP請求包到主機B一模一樣。
2.不在同一網(wǎng)段內(nèi)
在主機A上運行“Ping 192.168.1.4”后,開始跟上面一樣,到了怎樣得到MAC地址時,IP協(xié)議通過計算發(fā)現(xiàn)D機與自己不在同一網(wǎng)段內(nèi),就直接將交由路由處理,也就是將路由的MAC取過來,至于怎樣得到路由的MAC,跟上面一樣,先在ARP緩存表找,找不到就廣播吧。路由得到這個數(shù)據(jù)幀后,再跟主機D進(jìn)行聯(lián)系,如果找不到,就向主機A返回一個超時的信息。
對Ping后返回信息的分析
1.Request timed out
這是大家經(jīng)常碰到的提示信息,很多文章中說這是對方機器置了過濾ICMP數(shù)據(jù)包,從上面工作過程來看,這是不完全正確的,至少有下幾種情況。
?。?) 對方已關(guān)機,或者網(wǎng)絡(luò)上根本沒有這個地址:比如在上圖中主機A中PING 192.168.0.7 ,或者主機B關(guān)機了,在主機A中PING 192.168.0.5 都會得到超時的信息。
?。?)對方與自己不在同一網(wǎng)段內(nèi),通過路由也無法找到對方,但有時對方確實是存在的,當(dāng)然不存在也是返回超時的信息。
?。?)對方確實存在,但設(shè)置了ICMP數(shù)據(jù)包過濾(比如防火墻設(shè)置)。
怎樣知道對方是存在,還是不存在呢,可以用帶參數(shù) -a 的Ping命令探測對方,如果能得到對方的NETBIOS名稱,則說明對方是存在的,是有防火墻設(shè)置,如果得不到,多半是對方不存在或關(guān)機,或不在同一網(wǎng)段內(nèi)。
?。?)錯誤設(shè)置IP地址
正常情況下,一臺主機應(yīng)該有一個網(wǎng)卡,一個IP地址,或多個網(wǎng)卡,多個IP地址(這些地址一定要處于不同的IP子網(wǎng))。但如果一臺電腦的“撥號網(wǎng)絡(luò)適配器”(相當(dāng)于一塊軟網(wǎng)卡)的TCP/IP設(shè)置中,設(shè)置了一個與網(wǎng)卡IP地址處于同一子網(wǎng)的IP地址,這樣,在IP層協(xié)議看來,這臺主機就有兩個不同的接口處于同一網(wǎng)段內(nèi)。當(dāng)從這臺主機Ping其他的機器時,會存在這樣的問題:
A.主機不知道將數(shù)據(jù)包發(fā)到哪個網(wǎng)絡(luò)接口,因為有兩個網(wǎng)絡(luò)接口都連接在同一網(wǎng)段。
B.主機不知道用哪個地址作為數(shù)據(jù)包的源地址。因此,從這臺主機去Ping其他機器,IP層協(xié)議會無法處理,超時后,Ping 就會給出一個“超時無應(yīng)答”的錯誤信息提示。但從其他主機Ping這臺主機時,請求包從特定的網(wǎng)卡來,ICMP只須簡單地將目的、源地址互換,并更改一些標(biāo)志即可,ICMP應(yīng)答包能順利發(fā)出,其他主機也就能成功Ping通這臺機器了。
(責(zé)任編輯:武林網(wǎng))
|
新聞熱點
疑難解答