天天看點

沒看完這篇文章,别說你會用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

小提示:使用者也可以直接使用“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

掌握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)。

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

在 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

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

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

這是不是也很出乎預料?

除了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的好。

沒看完這篇文章,别說你會用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年資深網絡工程師,更多網工提升幹貨,請關注公衆号:網絡工程師俱樂部