沒看完這篇文章,別說你會用Ping

中午好,我的網工朋友。

網工生活裡每天都和ping打交道,ping來ping去,很多人知道ping,卻不知道怎麼把ping用出更多花樣出來。

今天,我特地給你關於ping命令的使用大全,在更多不同的項目場景裡,ping到底怎麼用,才能幫你高效幹活。

全篇文章超過萬字,歡迎及時收藏轉發到你的網工群和朋友圈,收藏備用!

今日文章閱讀福利:《 深入理解計算機網絡 》

想把ping用好,前提是把網絡學好。私信我,發送暗號“網絡”,即可領取此份經典網絡書籍資源。

01 檢測網絡故障的典型次序

正常情況下,當你使用Ping 命令來查找問題所在或檢驗網絡運行情況時,你需要使用許多Ping 命令,如果所有都運行正確,你就可以相信基本的連通性和配置參數沒有問題。

如果某些Ping命令出現運行故障,它也可以指明到何處去查找問題。下面就給出一個典型的檢測次序及對應的可能故障:

1. ping127.0.0.1

這個Ping命令被送到本地計算機的IP軟件, 該命令永不退出該計算機。如果沒有做到這一點,就表示TCP/IP的安裝或運行存在某些最基本的問題。

2. ping本機 IP

這個命令被送到你計算機所配置的IP地址,你的計算機始終都應該對該Ping 命令作出應答,如果沒有,則表示本地配置或安裝存在問題。出現此問題時,局域網用戶請斷開網絡電纜,然後重新發送該命令。如果網線斷開後本命令正確,則表示另一臺計算機可能配置瞭相同的IP地址。

3. ping局域網內其他IP

這個命令應該離開你的計算機,經過網卡及網 絡電纜到達其他計算機,再返回。收到回送應答表明本地網絡中的網卡和載體運行正確。但如果收到0 個回送應答,那麼表示子網掩碼(進行子網分割時,將IP地址的網絡部分與主機部分分開的代碼)不正確或網卡配置錯誤或電纜系統有問題。

4. ping網關 IP

這個命令如果應答正確,表示局域網中的網關路由器正 在運行並能夠作出應答。

5. ping遠程 IP

如果收到4 個應答,表示成功的使用瞭缺省網關。對於 撥號上網用戶則表示能夠成功的訪問Internet (但不排除ISP 的 DNS會有問題)。

6. ping localhost

localhost 是個作系統的網絡保留名,它是127.0.0.1的別名,每太計算機都應該能夠將該名字轉換成該地址。如果沒有做到這一帶內,則表示主機文件(/Windows/host)中存在問題。

7. http://pingwww.yahoo.com

對這個域名執行Ping地址,通常是通過DNS 服務器如果這裡出現故障,則表示 DNS服務器的 IP地址配置不正確或DNS服務 器有故障(對於撥號上網用戶,某些ISP已經不需要設置DNS服務器瞭)。

順便說一句:你也可以利用該命令實現域名對IP 地址的轉換功能。

如果上面所列出的所有Ping 命令都能正常運行,那麼你對你的計算機進行本地和遠程通信的功能基本上就可以放心瞭。但是,這些命令的成功並不表示你 所有的網絡配置都沒有問題,例如,某些子網掩碼錯誤就可能無法用這些方法檢測到。

02 Ping命令應用實例

Ping命令是我們日常網管工作中使用頻率最高的工具之一,主是用來測試網絡連接的。 在實際平時解決網絡故障的過程中,一般應該遵循“先軟後硬”的步驟來進行。

其中“軟”就是指使用Ping 命令大概判斷出網絡故障位置。今天我們就向大傢介紹Ping命令的三個典型應用。

01 驗證網卡工作狀態

Ping最簡單的一個應用就是驗證網卡工作狀態是否正常,這也是電腦出現 不能上網等故障最簡單的判斷手段。

在命令提示符下輸入“ ping 127.0.0.1”並回車,如果返回四行“ Reply from 127.0.0.1: bytes=32 time<1ms TTL=128 ”那麼則說明本地網卡是安裝正常的,若返回“ Request timed out. ”則說明本地網卡工作不正常(如下圖)。

小提示:用戶也可以直接使用“Ping本地計算機的IP 地址”,以驗證是否IP是否設置成功。

02 判斷網絡連接狀態

判斷網絡連接時,我們通常的做法就是ping網關地址和遠程主機地址,以此判斷出網絡故障所發地。

如果“ ping網關地址”出現“Request timed out.”,那麼則說明是內部網絡出現瞭問題,本地網卡發出的數據包不能到達網關;如果Ping 網關連接正常,那麼可以執行“ping遠程主機”,這時若出現“Request timed out.”, 則可能是外部連接的問題瞭。

在實際的應用中還會出現這樣的情況,在ping執行過程中,會同時包含 “Requesttimedout. ”和 “Reply from192168.0.1:bytes=32time<1ms TTL=128”這樣的信息.

這種情況則表示網絡不太穩定,存在丟包現象。

對此大傢可以使用“ ping IP地址 – t ”即在原有的命令後加上“- t ”參數,這樣ping 就會連續嘗試與目標主機進行連接,以此觀察網絡的穩定性。

當然從返回信息的 “time<1ms”也是一個很重要的信息,如果網絡很暢通, 例如測試與內網主機的連接,一般都會是“time<1ms”,若該數值比較大,同樣說明網絡不夠穩定,可能是設備不兼容,可能是節點接觸不好,也可能是網絡內有大量病毒導現堵塞等。

03 驗證 DNS服務器

DNS服務器負責將域名(網址)轉換成IP 地址,我們可以使用ping 命令判斷其配置是否正確以及工作是否正常。

其方法很簡單,隻需要在命令提示下輸入“ping域名地址”,例如“ping www.itedit.cn”,如果出現“ unknown Host Name”則表明不能到達,返回提示 “Reply from 222.191.251.34: bytes=32 time=27ms TTL=120”則證明DNS服務器能夠成功將域名轉換為IP地址。借助這個方法,我們也可以查看知名網站所使用的IP地址(如下圖)。

掌握Ping命令的正確使用, 對於我們快速判斷網絡故障有著非常大的幫助。

03 正確使用Windows的Ping命令

對於Windows下ping命令相信大傢已經再熟悉不過瞭,但是能把ping的功能發揮到最大的人卻並不是很多,總結瞭一些小經驗,現在和大傢分享一下。

現在我就參照ping 命令的幫助說明來給大傢說說我使用ping 時會用到的技巧, ping 隻有在安裝瞭TCP/IP 協議以後才可以使用:

ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [[-j computer-list] | [-k computer-list]] [-w timeout] destination-list

Options:

-tPingthespecifiedhostuntilstopped.Toseestatisticsand continue – type Control-Break;To stop – type Control-C.

不停的ping地方主機,直到你按下Control-C 。

此功能沒有什麼特別的技巧,不過可以配合其他參數使用,將在下面提到。

-a Resolve addresses to hostnames.

解析計算機NetBios 名。

示例:

C:\ >ping -a 192.168.1.21

Pinging http://iceblood.yofor.com [192.168.1.21] with 32 bytes of data: Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

Reply from 192.168.1.21: bytes=32 time<10ms TTL=254

Ping statistics for 192.168.1.21:

Packets:Sent = 4,Received = 4,Lost= 0 (0% loss),Approximateround trip times in milli-seconds:

Minimum = 0ms, Maximum = 0ms, Average = 0ms

從上面就可以知道IP為192.168.1.21的計算機NetBios名為

http://iceblood.yofor.com

-n count Number of echo requests to send.

發送 count 指定的 Echo 數據包數。

在默認情況下,一般都隻發送四個數據包,通過這個命令可以自己定義發送的個數,對衡量網絡速度很有幫助,比如我想測試發送50個數據包的返回的平均時間為多少,最快時間為多少,最慢時間為多少就可以通過以下獲知:

C:\ >ping -n 50 202.103.96.68

Pinging 202.103.96.68 with 32 bytes of data:

Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

Request timed out.

,,,,,,

Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

Reply from 202.103.96.68: bytes=32 time=50ms TTL=241

Ping statistics for 202.103.96.68:

Packets:Sent = 50, Received = 48, Lost = 2 (4% loss),Approximateround trip times in milli-seconds:

Minimum = 40ms, Maximum = 51ms, Average = 46ms

從以上我就可以知道在給202.103.96.68發送50個數據包的過程當中,返回瞭48個,其中有兩個由於未知原因丟失,這48個數據包當中返回速度最快為40ms,最慢為 51ms,平均速度為46ms。

-l size Send buffer size.

定義 echo 數據包大小。

在默認的情況下windows 的 ping發送的數據包大小為32byt ,我們也可以 自己定義它的大小,但有一個大小的限制,就是最大隻能發送65500byt。

也許有人會問為什麼要限制到65500byt ,因為Windows 系列的系統都有一個安全漏洞(也許還包括其他系統)就是當向對方一次發送的數據包大於或等於65532 時,對方就很有可能擋機, 所以微軟公司為瞭解決這一安全漏洞於是限制瞭ping的數據包大小。

雖然微軟公司已經做瞭此限制,但這個參數配合其他參數以後危 害依然非常強大,比如我們就可以通過配合-t參數來實現一個帶有攻擊性的命令:(以下介紹帶有危險性,僅用於試驗,請勿輕易施於別人機器上,否則後果自負)

C:\ >ping -l 65500 -t 192.168.1.21

Pinging 192.168.1.21 with 65500 bytes of data:

Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254

Reply from 192.168.1.21: bytes=65500 time<10ms TTL=254

,,,,,,

這樣它就會不停的向192.168.1.21計算機發送大小為65500byt 的數據包,如果你隻有一臺計算機也許沒有什麼效果,但如果有很多計算機那麼就可以使對方完全癱瘓,我曾經就做過這樣的試驗,當我同時使用10 臺以上計算機ping 一臺 Win2000Pro 系統的計算機時,不到5 分鐘對方的網絡就已經完全癱瘓,網絡嚴重堵塞, HTTP和 FTP服務完全停止,由此可見威力非同小可。

-f Set Don't Fragment flag in packet.

在數據包中發送“不要分段”標志。在一般你所發送的數據包都會通過路由分段再發送給對方,加上此參數以後路由就不會再分段處理。

-i TTL Time To Live.

指定TTL值在對方的系統裡停留的時間。 此參數同樣是幫助你檢查網絡運轉情況的。

-v TOS Type Of Service.

將“服務類型”字段設置為tos指定的值。

-r count Record route for count hops.

在“記錄路由”字段中記錄傳出和返回數據包的路由。在一般情況下你發送的數據包是通過一個個路由才到達對方的,但到底是經過瞭哪些路由?

通過此參數就可以設定你想探測經過的路由的個數,不過限制在瞭9個,也就是說你隻能跟蹤到9個路由, 如果想探測更多,可以通過其他命令實現,我將在以後的文章中給大傢講解。

以下為示例:

C:\ >ping -n 1 -r 9 202.96.105.101(發送一個數據包,最多記錄9個路由)

Pinging 202.96.105.101 with 32 bytes of data:

Reply from 202.96.105.101: bytes=32 time=10ms TTL=249

Route: 202.107.208.187 ->

202.107.210.214 ->

61.153.112.70 ->

61.153.112.89 ->

202.96.105.149 ->

202.96.105.97 ->

202.96.105.101 ->

202.96.105.150 ->

61.153.112.90

Ping statistics for 202.96.105.101:

Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 10ms, Maximum = 10ms, Average = 10ms

從上面我就可以知道從我的計算機到202.96.105.101一共通過瞭202.107.208.187, 202.107.210.214,61.153.112.70,61.153.112.89,202.96.105.149 , 202.96.105.97這幾個路由。

-s count Timestamp for count hops.

指定 count指定的躍點數的時間戳。

此參數和-r差不多,隻是這個參數不記錄數據包返回所經過的路由,最多也隻記錄4個。

-j host-list Loose source route along host-list.

利用 computer-list指定的計算機列表路由數據包。連續計算機可以被中 間網關分隔(路由稀疏源)IP允許的最大數量為9 。

-k host-list Strict source route along host-list.

利用 computer-list指定的計算機列表路由數據包。連續計算機不能被中間網關分隔(路由嚴格源)IP允許的最大數量為9 。

-w timeout Timeout in milliseconds to wait for each reply.

指定超時間隔,單位為毫秒。此參數沒有什麼其他技巧。

ping 命令的其他技巧:

在一般情況下還可以通過 ping 對方讓對方返回給你的TTL值大小,粗略的判斷目標主機的系統類型是Windows系列還是UNIX/Linux 系列,一般情況下Windows 系列的系統返回的 TTL值在100-130之間,而 UNIX/Linux 系列的系統返回的TTL值在240-255 之間,當然TTL的值在對方的主機裡是可以修改的, Windows系列的系統可以通過修改註冊表以下鍵值實現:

[HKEY_LOCAL_MACH\INSEYSTE\M CurrentControlSet\Services \Tcpip \Parameters] "DefaultTTL"=dword:000000ff

255—FF

128—80

64—-40

32—-20

04 檢測丟包

如何測試丟包?

我知道ping一個網站的信息和跟蹤路由的信息。

但是,我曾經聽一些人說他們的寬帶網連接上有丟包的問題。我懷疑我也許遇到瞭丟包的問題,因為當我進行速度測試的時候,速度比以前慢瞭,我沒有改變硬件或者使用任何新的應用軟件。

從傢裡測試寬帶網連接的丟包是一項非常困難的工作。丟包可以發生在從你的計算機到你在互聯網上正在連接的目的地之間的線路上的任何一個地方。

引起丟包的原因包括: 網絡阻塞、路由器或者交換機超過工作負荷、信號往返時間緩慢以及服務提供商或者托管你訪問的網站的公司使用的通信優先等級。

沒有主動測量實際重復傳輸的 TCP流量 ( 對於傢庭寬帶網連接來說,這類產品太昂貴瞭) ,很難確定是否真的發生瞭重復傳輸。

你指出的機制ping 和跟蹤路 由對於幫助傢庭用戶確定互聯網上哪裡的速度慢是最有用的工具。

Ping測量你的計算機和你要連接的IP地址之間的信號往返時間。

跟蹤路由是測量路由器在你的計算機和你正在跟蹤的路由的IP 地址之間的通道的反應時間。

使用 Ping

使用 Ping測量丟包的最佳方法是向一個IP地址發送大量的Ping命令,然後檢查沒有應答的那些Ping 命令。

如果你快速地發出50次Ping 命令,你可以檢查沒有沒有應答的次數,並把沒有應答的次數作為丟包。沒有應答的次數超過 5%可能就值得擔心瞭。

在一臺 Windows計算機上,在命令提示符後面輸入如下命令就可以完成這個任務 :

Ping -n 50(IP 地址或者域名,如http://www.website.com) 這個命令中的“ – n”開 關告訴發送ping 命令的次數,“ 50”是發送的次數。

然後,你將得到一個測試總結。這個總結將包括丟失的數量和百分比:

199.181.132.250 地址 Ping 的統計結果 : 包: 發送 = 6, 接收 = 6, 丟失 = 0 (0%) 大約往返時間以毫秒 (ms) 顯示 :

最小 = 26ms,最大 = 29ms,平均 = 27ms

如果你看到平均往返時間較高( 超過 100ms),這也會降低你的網絡下載速度。

設法消除某些引起丟包的網絡某些部分的故障的一種方法是在通道的各個部分進行ping 測試。我首先開始進行測試的地方是本地的“缺省網關”。

這是你所有的數據傳輸到網絡上經過的第一個路由器。如果在這一部分的丟包率很高, 那麼問題就在你的服務提供商的網絡上。

在Windows 命令提示符後面輸入“ipconfig”命令你就可以發現你的缺省 路由器的IP 地址。這個結果顯示如下:

以太網接口本地區域連接:

具體連接的DNS後綴 :http://domainname.com

IP 地址 . . . . . . : 192.168.2.189 子網掩碼. . . . . : 255.255.252.0 缺省網關. . . : 10.10.0.1

你在這裡要查看的是缺省網關的IP 地址。在上述例子中就10.10.0.1。

使用跟蹤路由在Windows 命令提示符後面使用跟蹤路由命令就可以實施跟蹤路由。

在Windows XPZH中這個命令是:tracert (IP地址或者主機名 )雖然結果不能向你顯示丟包,但是,可以向你顯示在路徑中路由器反應速度減慢的情況。這個輸出結果將顯示所有的路由器的反應時間。下面是一個例子:

5 ms 2 ms 3 ms http://malibu.domain.com [10.10.0.1]

10 ms 6 ms 7 ms 10.60.0.6

9 ms 7 ms 7 ms 10.20.0.1

6 ms 7 ms 7 ms http://x130.cd9e68.sj.concentric.net [205.158.104.130]

7 ms 7 ms 8 ms http://ge9-0.dcr2.dc-fremont-ca.us.xo.net [205.158.60.169]

7 ms 7 ms 7 ms http://ge2-0.dcr1.dc-fremont-ca.us.xo.net [65.106.2.205]

10 ms 7 ms 8 ms http://p5-1-0-2.rar2.sanjose-ca.us.xo.net [65.106.2.153]

10 ms 9 ms 11 ms http://p1-0.ir1.paloalto-ca.us.xo.net [65.106.5.178]

9 ms 10 ms 15 ms 206.http://111.12.114.ptr.us.xo.net [206.111.12.114]

9 ms 10 ms 10 ms http://svl-core-03.inet.qwest.net [205.171.205.29]

29 ms 28 ms 29 ms http://stl-core-02.inet.qwest.net [205.171.5.85]

30 ms 29 ms 29 ms http://sea-edge-03.inet.qwest.net [205.171.26.42]

* * * Request timed out.

* * * Request timed out.

28 ms 28 ms 29 ms http://sam.abcnews.go.com [199.181.132.250]

如果你看到在路徑中跟蹤路由往返時間有超過100ms(十分之一秒) 的,這就可能引起網絡上傳輸的時間減慢。

從上述例子中, 你可以看到數據在很多不同的網(XO, Qwest, ABC)上傳輸。

這是互聯網美妙的一部分。 不利的方面是一個用戶無法解決反應時間減慢的問題。最佳的出發點就是確認你和你的服務提供商之間沒有出現丟包。

05 特別提醒

使用 Ping 命令,有時會出現一個奇怪的現象。

Ping是 Windows自帶的運行於命令行程序,它是TCP/IP 環境下用於檢測網絡連接性、可到達性和名稱解析的疑難問題的主要命令。

Ping 最主要的用處就是檢測目標主機是不是可連通,其實質就是發送一個ICMP回顯請求報文給目的主機,並等待回顯的ICMP應答, 然後打印出回顯的報文。關於Ping 命令的應用不用本文詳細討論,在此指出一 個不為人註意的細節,提醒大傢要特別註意。

在 Windows2000/XP命令提示符狀態輸入ping 127.0.0.1回車,會出現回顯信息表示ping通瞭。有趣的是如果你輸入ping 127.0..1回車(註意不是127.0.0.1,中間少輸入一個0),同樣可以Ping 通!Windows會自動在IP 地址 中填充上一個“ 0”,組成127.0.0.1,如圖所示(圖1)。

在 Windows98/Me下執行這個命令也是同樣結果!換個方式,在命令行下輸 入命令:ping 127..0.1,同樣可以 Ping 通,系統還是會自動補充上一個“0”, 變為完整的形式。之所以會這樣,是因為在使用Ping命令 Ping 某個IP地址時, 可以省略IP 地址中的空值即為“0”的部分,而使用“ .. ”這種格式可以在其中自動加入空值,於是我們就可以省略其中的“0”瞭。

如果我們在命令行下分別輸入Ping 202.108.36.172 (這是網易的IP地址)

和Ping 202.108.036.172 ,其回顯的結果會不會是一樣的呢?開始我以為是一樣的,然而命令執行後的結果大大出乎我的意料——與我想像的完全不一樣。

在輸入Ping 202.108.36.172回車後顯示的結果一切正常, 和我們預想的完全一樣。而 Ping 202.108.036.172時在命令提示符窗口中顯示的竟然是在Ping 另外一個 IP 地址:202.108.30.172 (圖 2)

更有趣地是,如果你輸入Ping 202.108.044.172回車,此時在命令提示符 窗口中顯示的是我們在Ping 地址 202.108.36.172(圖 3)

這是不是也很出乎預料?

除瞭Windows系統以外,在 FreeBSD上測試的結果也是一樣的。

為什麼會這樣?這是因為系統將上述IP地址中的“ 036”當成八進制而 非十進制數字瞭,八進制數值“036”轉換為十進制正好是“30”(你可以用 Windows 自 帶 的 計算器來驗算),所以系統才會以為我們Ping的是202.108.30.172。

在IP地址的十進制數字前面加上0就表示這是八進制數,如果加上0x 則表示這是十六進制數值

我們可以驗證一下,在命令提示符下輸入Ping 0x7f.0.0.1,回車之後你會發現我們 Ping 的是127.0.0.1。

因為0x7f正是十進制數值127的十六進制表示方式。再試試輸入Ping 0x7f.0..1,猜猜看會怎麼樣?

沒錯,這樣輸入 Ping的還是127.0.0.1這個IP地址。

註意,在使用 Ping命令Ping某IP地址時,在IP地址的四部分中隻能有一部分可以采用八進制或十六進制才輸入,其餘部分必須還得是十進制數值,否則會出錯。

比方說 ,你要是將IP地址202.108.36.172轉為八進制0312.0154.044.0254 ,然後去Ping ,系統會報告錯誤(圖4),同樣的,如果將點分十進制IP地址的各個部分全部轉為十六進制, 然後去Ping系統也會報告出錯,無法Ping 通。所以還是老老實實采用十進制的IP地址去Ping的好。

06 Ping 命令的常用參數選項

ping IP -t

連續對IP 地址執行Ping 命令,直到被用戶以Ctrl+C中斷。

ping IP -l 2000

指定Ping 命令中的數據長度為2000 字節,而不是缺省的32字節。

ping IP -n

執行特定次數的Ping命令。

Netstat

Netstat用於顯示與IP 、TCP、UDP和 ICMP協議相關的統計數據,一般用於檢驗本機各端口的網絡連接情況。

如果你的計算機有時候接受到的數據報會導致出錯數據刪除或故障,你不必感到奇怪, TCP/IP可以容許這些類型的錯誤,並能夠自動重發數據報。

但如果累計的出錯情況數目占到所接收的IP數據報相當大的百分比,或者它的數目正迅速增加,那麼你就應該使用Netstat查一查為什麼會出現這些情況瞭。

整理:老楊丨10年資深網絡工程師,更多網工提升幹貨,請關註公眾號:網絡工程師俱樂部

赞(0)