使用ping可以測試計算機名和計算機的ip地址,驗證與遠程計算機的網絡連接是否通暢。該命令只有在安裝了tcp/ip 協議后才可以使用(主流操作系統默認已安裝)。注:防火牆等網絡數據包過濾工具可能會導致ping命令測試失敗,導致ping結果出現Request timed out異常提示。 ping 命令使用 ping 命令詳解 ping 命令原理 ping 幕后過程 ping 結果分析 ping 命令應用 1. ping命令使用 Windows下通過開始>運行(或Win+R),輸入cmd回車,在命令行窗口中使用。 Linux下在命令行終端下使用。 2. ping命令詳解 Windows下可在命令行提示符中輸入ping /?來查看ping命令詳解,如下: 用法: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] [-R] [-S srcaddr] [-4] [-6] target_name 選項: -t Ping 指定的主機,直到停止。 若要查看統計信息並繼續操作 – 請鍵入 Control-Break; 若要停止 – 請鍵入 Control-C。 -a 將地址解析成主機名。 -n count 要發送的回顯請求數。 -l size 發送緩沖區大小。 -f 在數據包中設置“不分段”標志(僅適用於 IPv4)。 -i TTL 生存時間。 -v TOS 服務類型(僅適用於 IPv4。該設置已不贊成使用,且 對 IP 標頭中的服務字段類型沒有任何影響)。 -r count 記錄計數躍點的路由(僅適用於 IPv4)。 -s count 計數躍點的時間戳(僅適用於 IPv4)。 -j host-list 與主機列表一起的松散源路由(僅適用於 IPv4)。 -k host-list 與主機列表一起的嚴格源路由(僅適用於 IPv4)。 -w timeout 等待每次回復的超時時間(毫秒)。 -R 同樣使用路由標頭測試反向路由(僅適用於 IPv6)。 -S srcaddr 要使用的源地址。 -4 強制使用 IPv4。 -6 強制使用 IPv6。 Linux主機下可通過man ping命令來查看ping命令詳解。 3. ping命令原理 源主機(輸ping命令的主機)向目標主機發送一個ICMP協議中的echo包;如目標主機存活,就向源主機返回一個ICMP協議的echo-reply包。 4. ping幕后過程 我們以下面一個網絡為例:有A、B、C、D四台機子(其中A、B的IP分別為192.168.0.4-192.168.0.5,子網掩碼均為255.255.255.0;C、D的IP分別為192.168.1.3-192.168.1.4,子網掩碼均為255.255.255.0),一台路由RA連接以上兩個子網。 1) 在同一網段內 在主機A上運行“Ping 192.168.0.5”后,都發生了些什么呢? 首先,Ping命令會構建一個固定格式的ICMP請求數據包,然后由ICMP協議將這個數據包連同地址“192.168.0.5”一起交給IP層協議(和 ICMP一樣,實際上是一組后台運行的進程),IP層協議將以地址“192.168.0.5”作為目的地址,本機IP地址作為源地址,加上一些其他的控制信息,構建一個IP數據包,並想辦法得到192.168.0.5的MAC地址(物理地址,這是數據鏈路層協議構建數據鏈路層的傳輸單元——幀所必需的),以便交給數據鏈路層構建一個數據幀。關鍵就在這里,IP層協議通過對比機器B的IP地址、自己的IP地址和自己的子網掩碼,發現它跟自己屬同一網絡,就直接在本網絡內查找這台機器的MAC。如果以前兩機有過通信,在A機的ARP緩存表應該有B機IP與其MAC的映射關系;如果沒有,就發一個ARP請求廣播,得到B機的MAC, 一並交給數據鏈路層。后者構建一個數據幀,目的地址是IP層傳過來的物理地址,源地址則是本機的物理地址,還要附加上一些控制信息,依據以太網的介質訪問規則,將它們傳送出去。 主機B收到這個數據幀后,先檢查它的目的地址,並和本機的物理地址對比,如符合,則接收;否則丟棄。接收后檢查該數據幀,將IP數據包從幀中提取出來,交給本機的IP層協議。同樣,IP層檢查后,將有用的信息提取后交給ICMP協議,后者處理后,馬上構建一個ICMP應答包,發送給主機A,其過程和主機A發送ICMP請求包到主機B一模一樣。 2) 不在同一網段內 在主機A上運行“Ping 192.168.1.4”后,開始跟上面一樣,到了怎樣得到MAC地址時,IP協議通過計算發現D機與自己不在同一網段內,就直接將交由路由處理,也就是將路由的MAC取過來,至於怎樣得到路由的MAC,跟上面一樣,先在ARP緩存表找,找不到就廣播吧。路由得到這個數據幀后,再跟主機D進行聯系,如果找不到,就向主機A返回一個超時的信息。 5. ping結果分析 1) ping成功的結果分析 例如輸入“Ping 61.135.163.94”,顯示如下信息: Pinging 61.135.163.94 with 32 bytes of data: Reply from 61.135.163.94: bytes=32 time=126ms TTL=46 Reply from 61.135.163.94: bytes=32 time=123ms TTL=46 Reply from 61.135.163.94: bytes=32 time=122ms TTL=46 Reply from 61.135.163.94: bytes=32 time=124ms TTL=46 Ping statistics for 61.135.163.94: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 122ms, Maximum = 126ms, Average = 123ms 上述結果的意思為:Ping命令用32字節(這是Windows默認發送的數據包大小,如要改變,則應該在后面加上 “-l 數據包大小”,如“Ping 61.135.163.94 -l 500”表示要測試的數據包大小為500字節)的數據包來測試能否連接到IP地址為“61.135.163.94”的主機;下面的四行“Reply from”表示本地主機已收到從被測試的機器上返回的信息——返回32個字節分別用了122、123、124、126毫秒,TTL為46。關於TTL說明請看Ping出現TTL expired in transit的原因這篇。 友情提示:TTL(Time to Live)的意思是存在時間值,通過該值可以算出數據包經過了多少個路由器,方法是:用255減去返回的TTL值.,例如本例中返回250,則應該用255來減去250,得到5。 再下面的“Ping statistics”則表示發送了(sent)4個數據包(這是系統的缺省值。如要指定發送數據包的次數,則在后面加上“-n 次數”,如“Ping 61.135.163.94 –n 20”表示傳送20次;如果希望一直Ping下去,則要在后面加上參數“-t”,此時要中斷則需要按Ctrl+C),收到了(Receieved)4個,共丟失了(Lost)0個(即沒有丟失),發送時間最小為122毫秒,最大126毫秒,平均時間為123毫秒。 2) ping失敗的結果分析 ①Request timed out 這是大家經常碰到的提示信息,很多文章中說這是對方機器置了過濾ICMP數據包,從上面工作過程來看,這是不完全正確的,至少有下幾種情況。 a. 對方已關機,或者網絡上根本沒有這個地址 都會得到超時的信息。 b. 對方與自己不在同一網段內,通過路由也無法找到對方,但對方確實是存在的。 c. 對方確實存在,但設置了ICMP數據包過濾(比如防火牆設置)。 怎樣知道對方是存在,還是不存在呢,可以用帶參數 -a 的Ping命令探測對方,如果能得到對方的NETBIOS名稱,則說明對方是存在的,是有防火牆設置,如果得不到,多半是對方不存在或關機,或不在同一網段內。 d. 錯誤設置IP地址 正常情況下,一台主機應該有一個網卡一個IP地址,或多個網卡多個IP地址(這些地址一定要處於不同的IP子網)。但如果一台電腦的“撥號網絡適配器”(相當於一塊軟網卡)的TCP/IP設置中,設置了一個與網卡IP地址處於同一子網的IP地址,這樣,在IP層協議看來,這台主機就有兩個不同的接口處於同一網段內。當從這台主機Ping其他的機器時,會存在這樣的問題:(1) 主機不知道將數據包發到哪個網絡接口,因為有兩個網絡接口都連接在同一網段。(2) 主機不知道用哪個地址作為數據包的源地址。因此,從這台主機去Ping其他機器,IP層協議會無法處理,超時后,Ping 就會給出一個“超時無應答”的錯誤信息提示。但從其他主機Ping這台主機時,請求包從特定的網卡來,ICMP只須簡單地將目的、源地址互換,並更改一些標志即可,ICMP應答包能順利發出,其他主機也就能成功Ping通這台機器了。 ② Destination host Unreachable a. 對方與自己不在同一網段內,而自己又未設置默認的路由,比如上例中A機中不設定默認的路由,運行Ping 192.168.0.1.4就會出現“Destination host Unreachable”。 b. 網線出了故障 這里要說明一下“destination host unreachable”和 “time out”的區別。如果所經過的路由器的路由表中具有到達目標的路由,而目標因為原因不可到達,這時候會出現“time out”;如果路由表中連到達目標的路由都沒有,那就會出現“destination host unreachable”。 ③ Bad IP address 這個信息表示您可能沒有連接到DNS服務器,所以無法解析這個IP地址,也可能是IP地址不存在。 ④ Source quench received 這個信息比較特殊,它出現的機率很少。它表示對方或中途的服務器繁忙無法回應。 ⑤ Unknown host——不知名主機 這種出錯信息的意思是,該遠程主機的名字不能被域名服務器(DNS)轉換成IP地址。故障原因可能是域名服務器有故障,或者其名字不正確,或者網絡管理員的系統與遠程主機之間的通信線路有故障。 ⑥ No answer——無響應 這種故障說明本地系統有一條通向中心主機的路由,但卻接收不到它發給該中心主機的任何信息。故障原因可能是下列之一:中心主機沒有工作;本地或中心主機網絡配置不正確;本地或中心的路由器沒有工作;通信線路有故障;中心主機存在路由選擇問題。 ⑦ Ping 127.0.0.1:127.0.0.1是本地回環地址 如果本地地址無法Ping通,則表明本地機TCP/IP協議不能正常工作。 ⑧ no route to host:網卡工作不正常。 ⑨ transmit failed,error code:10043網卡驅動不正常。 ⑩ unknown host name:DNS配置不正確。 6. ping命令應用(網絡故障診斷) 0) 使用ipconfig /all觀察本地網絡設置是否正確; 1) ping 127.0.0.1 檢查本機TCP/IP協議棧是否正常,失敗則重裝TCP/IP協議 2) ping 本機IP地址 檢查網卡是否工作正常,失敗則檢查網線是否插上、網卡驅動是否正常 3) ping 網關IP地址 檢查網關、網線及網絡設置是否正常 4) ping 遠端主機 檢查本機與外部網絡的連接是否正常 5) ping DNS服務器地址 檢查本機是否能正常連接到DNS,在QQ能連上但打不開網頁的時候可用來檢查DNS是否存活;更合適的檢查DNS是否可用的方法是利用nslookup命令來測試 以上網絡故障診斷步驟依次進行以確定故障范圍,之后可利用排除法細查是哪里出的問題。 參考資料: 1) Ping命令幕后過程及其返回信息分析 2) ping命令用法及返回結果詳解 整理得倉促,如有不對之處,歡迎拍磚。 楓芸志原創文章,轉載請注明來源並保留原文鏈接 本文鏈接:http://witmax.cn/ping.html