ping的作用
Ping是潛水艇人員的專用術語,表示回應的聲納脈衝,在網絡中Ping 是一個十分好用的TCP/IP工具。它主要的功能是用來檢測網絡的連通情況和分析網絡速度。
Ping有好的善的一面也有惡的一面。先說一下善的一面吧。上面已經說過Ping的用途就是用來檢測網絡的連同情況和分析網絡速度,但它是通過什麼來顯示連通呢?這首先要了解Ping的一些參數和返回信息。
以下是PING的一些參數:
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
-t Ping 指定的計算機直到中斷。
-a 將地址解析為計算機名。
-n count 發送 count 指定的 ECHO 數據包數。默認值為 4。
-l length 發送包含由 length 指定的數據量的 ECHO 數據包。默認為 32 字節;最大值是65,527。
-f 在數據包中發送"不要分段"標誌。數據包就不會被路由上的網關分段。
-i ttl 將"生存時間"字段設置為 ttl 指定的值。
-v tos 將"服務類型"字段設置為 tos 指定的值。
-r count 在"記錄路由"字段中記錄傳出和返回數據包的路由。count 可以指定最少 1 臺,最多 9 臺計算機。
-s count 指定 count 指定的躍點數的時間戳。
-j computer-list 利用 computer-list 指定的計算機列表路由數據包。連續計算機可以被中間網關分隔(路由稀疏源)IP 允許的最大數量為 9。
-k computer-list 利用 computer-list 指定的計算機列表路由數據包。連續計算機不能被中間網關分隔(路由嚴格源)IP 允許的最大數量為 9。
-w timeout 指定超時間隔,單位為毫秒。
destination-list 指定要 ping 的遠程計算機。
Ping的返回信息有"Request Timed Out"、"Destination Net Unreachable"和"Bad IP address"還有"Source quench received"。
"Request Timed Out"這個信息表示對方主機可以到達到TIME OUT,這種情況通常是為對方拒絕接收你發給它的數據包造成數據包丟失。大多數的原因可能是對方裝有防火牆或已下線。
"Destination Net Unreachable"這個信息表示對方主機不存在或者沒有跟對方建立連接。這裡要說明一下"destination host unreachable"和"time out"的區別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因為其它原因不可到達,這時候會出現"time out",如果路由表中連到達目標的路由都沒有,那就會出現"destination host unreachable"。
"Bad IP address" 這個信息表示你可能沒有連接到DNS服務器所以無法解析這個IP地址,也可能是IP地址不存在。
"Source quench received"信息比較特殊,它出現的機率很少。它表示對方或中途的服務器繁忙無法回應。
怎樣使用Ping這命令來測試網絡連通呢?
連通問題是由許多原因引起的,如本地配置錯誤、遠程主機協議失效等,當然還包括設備等造成的故障。
首先我們講一下使用Ping命令的步驟。
使用Ping檢查連通性有五個步驟:
1. 使用ipconfig /all觀察本地網絡設置是否正確;
2. Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是為了檢查本地的TCP/IP協議有沒有設置好;
3. Ping本機IP地址,這樣是為了檢查本機的IP地址是否設置有誤;
4. Ping本網網關或本網IP地址,這樣的是為了檢查硬件設備是否有問題,也可以檢查本機與本地網絡連接是否正常;(在非局域網中這一步驟可以忽略)
5. Ping遠程IP地址,這主要是檢查本網或本機與外部的連接是否正常。
在檢查網絡連通的過程中可能出現一些錯誤,這些錯誤總的來說分為兩種最常見。
1. Request Timed Out
"request time out"這提示除了在《PING(一)》提到的對方可能裝有防火牆或已關機以外,還有就是本機的IP不正確和網關設置錯誤。
①、IP不正確:
IP不正確主要是IP地址設置錯誤或IP地址衝突,這可以利用ipconfig /all這命令來檢查。在WIN2000下IP衝突的情況很少發生,因為系統會自動檢測在網絡中是否有相同的IP地址並提醒你是否設置正確。在NT中不但會出現"request time out"這提示而且會出現"Hardware error"這提示信息比較特殊不要給它的提示所迷惑。
②、網關設置錯誤:這個錯誤可能會在第四個步驟出現。網關設置錯誤主要是網關地址設置不正確或網關沒有幫你轉發數據,還有就是可能遠程網關失效。這裡主要是在你Ping外部網絡地址時出錯。錯誤表現為無法Ping外部主機返回信息"Request timeout"。
2. Destination Host Unreachable
當你在開始PING網絡計算機時如果網絡設備出錯它返回信息會提示"destination host unreachable"。如果局域網中使用DHCP分配IP時,而碰巧DHCP失效,這時使用 PING命令就會產生此錯誤。因為在DHCP失效時客戶機無法分配到IP系統只有自設IP,它往往會設為不同子網的IP。所以會出現"Destination Host Unreachable"。另外子網掩碼設置錯誤也會出現這錯誤。
還有一個比較特殊就是路由返回錯誤信息,它一般都會在"Destination Host Unreachable"前加上IP地址說明哪個路由不能到達目標主機。這說明你的機器與外部網絡連接沒有問題,但與某臺主機連接存在問題。
舉個例子吧。
我管理的網絡有19臺機,由一臺100M集線器連接服務器,使用DHCP動態分配IP地址。
有一次有位同事匆忙地告訴我"我的OUTLOOK打不開了",我到他機器檢查,首先我檢查了本地網絡設置,我用ipconfig /all看IP分配情況一切正常。接著我就開始PING網絡中的其中一臺機器,第一次PING結果很正常,但OUTLOOK還是無法使用其它網絡軟件和Copy網絡文件都可以使用但網絡速度很慢,第二次PING我用了一個參數-t(-t可以不中斷地PING對方,當時我想PING一次可能發現不了問題)發現有time=30ms和request time out,從服務器PING這臺機就更有趣,request time out比正常數據還多,在局域中竟然有time=30ms和request time out太不正常了。開始我認為是網卡的問題但換網卡後故障依舊,重做網線還是不能解決問題,這故障真有趣!最後我沒辦法了把它插在集線器端口上的另一端的網線換到另一個端口,哈!故障解決了。原來是集線器端口壞了。
如何用Ping命令來判斷一條鏈路的速度?
Ping這個命令除了可以檢查網絡的連通和檢測故障以外,還有一個比較有趣的用途,那就是可以利用它的一些返回數據,來估算你跟某臺主機之間的速度是多少字節每秒
我們先來看看它有那些返回數據。
Pinging 202.105.136.105 with 32 bytes of data:
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
Ping statistics for 202.105.136.105:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 590ms, Maximum = 601ms, Average = 593ms
在例子中"bytes=32"表示ICMP報文中有32個字節的測試數據(這是估算速度的關鍵數據),"time=590ms"是往返時間。
怎樣估算鏈路的速度呢?舉個例子吧。我們把A和B之間設置為PPP鏈路。
從上面的PING例子可以注意到,默認情況下發送的ICMP報文有32個字節。除了這32個字節外再加上20個字節的IP首部和8個字節的ICMP首部,整個IP數據報文的總長度就是60個字節(因為IP和ICMP是Ping命令的主要使用協議,所以整個數據報文要加上它們)。另外在使用Ping命令時還使用了另一個協議進行傳輸,那就是PPP協議(點對點協議),所以在數據的開始和結尾再加上8個字節。在傳輸過程中,由於每個字節含有8bit數據、1bit起始位和1bit結束位,因此傳輸速率是每個字節2.98ms。由此我們可以估計需要405ms。即68*2.98*2(乘2是因為我們還要計算它的往返時間)。
我們來測試一下33600 b/s的鏈路:
Pinging 202.105.36.125 with 32 bytes of data:
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
Ping statistics for 202.105.36.125:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 415ms, Maximum = 421ms, Average = 417ms
這裡大家可能要注意到,這估算值跟實際值是有誤差的,為什麼呢?因為我們現在估算的是一個理論值,還有一些東西我們沒有考慮。比如在網絡中的其它干擾,這些干擾主要來之別的計算機。因為在你測試時不可能全部計算機停止使用網絡給你做測試,這是不實際的。另外就是傳輸設備,因為有某些設備如MODEM它在傳輸時會把數據壓縮後再發送,這大大減少了傳輸時間。這些東西產生的誤差我們是不能避免的,但其數值大約在5%以內我們都可以接受(利用MODEM傳輸例外),但是可以減少誤差的產生。比如把MODEM的壓縮功能關閉和在網絡沒有那麼繁忙時進行測試。有時候誤差是無須消除的。因為我們需要這些誤差跟所求得的理論值進行比較分析,從而找出網絡的缺陷而進行優化。這時測試網絡的所有數據包括誤差都會成為我們優化的依據。
還要注意,這種算法在局域網並不適用,因為在局域網中速度非常的快幾乎少於1ms,而Ping的最小時間分辨率是1ms,所以根本無法用Ping命令來檢測速度。如果想測試速度那就要用專門儀器來檢測。
總的來說,Ping命令是一個在故障檢查方面很有用而且很便利的工具,你不應該忽視它的存在.
對於ping指令相信大家已經再熟悉不過了,但是能把ping的功能發揮到最大的人卻並不是很多,當然我也並不是說我可以讓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:
-t Ping the specified host until stopped.To see statistics and 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 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),Approximate round trip times in milli-secods:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
從上面就可以知道IP為192.168.1.21的計算機NetBios名為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),Approximate round 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),
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_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DefaultTTL"=dword:000000ff
255---FF
128---80
64----40
32----20
好了,ping命令也基本上完全講解完了,其中還有-j,-k參數我還沒有詳細說明。
C:\\>ping /?
Usage: ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]
[-r count] [-s count] [[-j host-list] | [-k host-list]]
[-w timeout] destination-list
Options:
-t Ping the specified host until stopped.
To see statistics and continue - type Control-Break;
To stop - type Control-C.
-a Resolve addresses to hostnames.
-n count Number of echo requests to send.
-l size Send buffer size.
-f Set Don't Fragment flag in packet.
-i TTL Time To Live.
-v TOS Type Of Service.
-r count Record route for count hops.
-s count Timestamp for count hops.
-j host-list Loose source route along host-list.
-k host-list Strict source route along host-list.
-w timeout Timeout in milliseconds to wait for each reply
補充:
traceroute 用它來檢測網路可知道是那一處網絡環節出了問題,有利於網絡人員檢查,修復. 具體用法:用man看一下。
閱讀更多 SPOTO—思科華為培訓 的文章