linux ping 命令解析 教程
文章目錄
linux ping 命令解析
不管在windows平台,還是在linux平台,ping都是非常常用的網路命令;ping命令通過ICMP(Internet控制消息協議)工作;ping可以用來測試本機與目標主機是否聯通、聯通速度如何、穩定性如何。
一 、ping 用法
ping命令運行在命令提示符終端,用法為:「ping 參數 目標主機」。其中參數為零到多個,目標主機可以是IP或者域名。
1
2
3
4
|
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface] [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos] [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline] [-W timeout] [hop1 ...] destination |
二、ping 參數解釋
參數 | 詳解 |
---|---|
-a | Audible ping. |
-A | 自適應ping,根據ping包往返時間確定ping的速度; |
-b | 允許ping一個廣播地址; |
-B | 不允許ping改變包頭的源地址; |
-c count | ping指定次數後停止ping; |
-d | 使用Socket的SO_DEBUG功能; |
-F flow_label | 為ping回顯請求分配一個20位的「flow label」,如果未設置,內核會為ping隨機分配; |
-f | 極限檢測,快速連續ping一台主機,ping的速度達到100次每秒; |
-i interval | 設定間隔幾秒發送一個ping包,默認一秒ping一次; |
-I interface | 指定網卡介面、或指定的本機地址送出數據包; |
-l preload | 設置在送出要求信息之前,先行發出的數據包; |
-L | 抑制組播報文回送,只適用於ping的目標為一個組播地址 |
-n | 不要將ip地址轉換成主機名; |
-p pattern | 指定填充ping數據包的十六進位內容,在診斷與數據有關的網路錯誤時這個選項就非常有用,如:「-p ff」; |
-q | 不顯示任何傳送封包的信息,只顯示最後的結果 |
-Q tos | 設置Qos(Quality of Service),它是ICMP數據報相關位;可以是十進位或十六進位數,詳見rfc1349和rfc2474文檔; |
-R | 記錄ping的路由過程(IPv4 only); 注意:由於IP頭的限制,最多只能記錄9個路由,其他會被忽略; |
-r | 忽略正常的路由表,直接將數據包送到遠端主機上,通常是查看本機的網路介面是否有問題;如果主機不直接連接的網路上,則返回一個錯誤。 |
-S sndbuf | Set socket sndbuf. If not specified, it is selected to buffer not more than one packet. |
-s packetsize | 指定每次ping發送的數據位元組數,默認為「56位元組」+「28位元組」的ICMP頭,一共是84位元組; 包頭+內容不能大於65535,所以最大值為65507(linux:65507, windows:65500); |
-t ttl | 設置TTL(Time To Live)為指定的值。該欄位指定IP包被路由器丟棄之前允許通過的最大網段數; |
-T timestamp_option | 設置IP timestamp選項,可以是下面的任何一個: 'tsonly' (only timestamps) 'tsandaddr' (timestamps and addresses) 'tsprespec host1 [host2 [host3]]' (timestamp prespecified hops). |
-M hint | 設置MTU(最大傳輸單元)分片策略。 可設置為: 'do':禁止分片,即使包被丟棄; 'want':當包過大時分片; 'dont':不設置分片標誌(DF flag); |
-m mark | 設置mark; |
-v | 使ping處於verbose方式,它要ping命令除了列印ECHO-RESPONSE數據包之外,還列印其它所有返回的ICMP數據包; |
-U | Print full user-to-user latency (the old behaviour). Normally ping prints network round trip time, which can be different f.e. due to DNS failures. |
-W timeout | 以毫秒為單位設置ping的超時時間; |
-w deadline | deadline; |
參考內容:http://ss64.com/bash/ping.html
三 、輸出格式
下圖為簡單的ping產生的響應內容,圖中返回內容具體的含義如下:
1 2 3 4 5 6 7 |
① ping目標主機的域名和IP(ping會自動將域名轉換為IP) ② 不帶包頭的包大小和帶包頭的包大小(參考「-s」參數) ③ icmp_seq:ping序列,從1開始;如果數字不是按順序遞增也就意味著丟包了 ttl:剩餘的ttl;見四TTL解釋 time: 響應時間,數值越小,聯通速度越快; ④ 發出去的包數,返回的包數,丟包率,耗費時間; ⑤ 最小/最大/平均響應時間和本機硬體耗費時間; |
四 、TTL解釋
當我們在使用ping命令時,返回結果里會帶一個TTL值。這個東西的含義其實就是Time To Live,指的是報文在網路中能夠『存活』的限制。以前這個限制方式是設定一個時間(Time To Live中的Time就是這樣來的),當報文在網路中轉發時,時間超過這個限制,最後一個收到報文的『路由點』就會把它扔掉,而不繼續轉發。後來把時間限制改為了跳數限制,就是當報文在網路中轉發時,每經過一個『路由點『,就把預先設定的這個TTL數值減1,直到最後TTL=1時報文就被扔掉,不向下轉發。
路由點:我這裡是指完成路由功能的機器,因為並不是只有路由器才可以完成路由轉發功能,比如主機可以配置路由轉發。
ping命令中的TTL
上邊解釋的TTL是基礎,然後,我們這篇文章要說明的是ping中的TTL到底是什麼意思。因為不管怎麼想,返回了一個TTL這東西,是說被你ping的主機預設的報文TTL是這個值嗎?還是說你ping它的時候自己的報文自動設定了TTL是這個值?還是說你的報文經過了TTL跳到達被ping主機?。。。總之就是不能明確地說出這個TTL的意義。
其實這個TTL是指:被ping主機那裡返回的報文,到了你這裡,從它自己預設的TTL減小到還剩下多少。
有點繞口,舉個例子就明白了。
我們先tracert www.baidu.com
這裡表示,我們發出的ICMP報文從自己主機到目標主機一共經過12跳,這裡可以想成我們發過去的和對方返回的路由路徑是一樣的(其實網路很複雜的,這樣說是在基本理論上簡化問題——一般網路情況不變化就是這樣的),也就是目標主機它預設的報文TTL要減掉12。現在,按照剛才說的「被ping主機那裡返回的報文,到了你這裡,從它自己預設的TTL減小到還剩下多少。」,我們可以計算ping www.baidu.com時的TTL了。
TTL = 目標主機預設報文TTL - 12
現在等式中有兩個未知數,但是「目標主機預設報文TTL」其實比較容易知道。並且有一個前提:一般有64、128等幾個值(這些東西大家另外去查資料吧)
我們先來ping www.baidu.com
這裡我們看到 TTL = 52。一般就可以推斷目標主機預設的報文TTL為64,因為它比較接近(一般啦)。然後對比一下上邊的等式,代入數值:
52 = 64 - 12
1 |
默認情況下,Linux系統的TTL值為64或255,Windows NT/2000/XP系統的TTL值為128,Windows 98系統的TTL值為32,UNIX主機的TTL值為255。 |
五 、簡單示例
1、每隔0.6秒ping一次,一共ping 5次:
1
2
3
4
5
6
7
8
9
10
11
|
[root@aiezu.com ~] # ping -c 5 -i 0.6 qq.com PING qq.com (14.17.32.211) 56(84) bytes of data. 64 bytes from 14.17.32.211: icmp_seq=1 ttl=54 time =16.5 ms 64 bytes from 14.17.32.211: icmp_seq=2 ttl=54 time =17.0 ms 64 bytes from 14.17.32.211: icmp_seq=3 ttl=54 time =16.6 ms 64 bytes from 14.17.32.211: icmp_seq=4 ttl=54 time =18.3 ms 64 bytes from 14.17.32.211: icmp_seq=5 ttl=54 time =19.9 ms --- qq.com ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 2405ms rtt min /avg/max/mdev = 16.520 /17 .692 /19 .919 /1 .293 ms |
2、極限快速的使用大包ping:
以最快的速度,使用最大的包進行ping,可用於測試目標主機的承壓能力:
1
2
3
4
5
6
|
[root@aiezu ~] # ping -f -s 65507 10.0.0.52 PING 10.0.0.52 (10.0.0.52) 65507(65535) bytes of data. .^ --- 10.0.0.52 ping statistics --- 646 packets transmitted, 646 received, 0% packet loss, time 1675ms rtt min /avg/max/mdev = 1.202 /2 .406 /8 .253 /0 .507 ms, ipg /ewma 2.598 /2 .318 ms |
注意:此用法非常危險,65535(包頭+內容)*100個包每秒=6.25MB,每秒發送6.25MB的數據,相當於50Mbps的帶寬,完全可能導致目標主機拒絕服務。請勿用於非法用途,造成不良後果自負。
3、聯通不穩定,丟包嚴重的情形:
下面的ping發出17個ping icmp包,而只有序號為8、9、12的包收到響應信息,丟包率達82%,聯通非常不穩定:
1
2
3
4
5
6
7
8
9
|
[root@aiezu.com ~] # ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=8 ttl=43 time =32.3 ms 64 bytes from 8.8.8.8: icmp_seq=9 ttl=43 time =32.2 ms 64 bytes from 8.8.8.8: icmp_seq=12 ttl=43 time =32.0 ms ^C --- 8.8.8.8 ping statistics --- 17 packets transmitted, 3 received, 82% packet loss, time 16003ms rtt min /avg/max/mdev = 32.038 /32 .208 /32 .362 /0 .246 ms |
4、完全無法ping通的情形:
1
2
3
4
5
|
[root@aiezu.com ~] # ping -c 3 9.9.9.9 PING 9.9.9.9 (9.9.9.9) 56(84) bytes of data. --- 9.9.9.9 ping statistics --- 3 packets transmitted, 0 received, 100% packet loss, time 1999ms |
六:常見錯誤
1、錯誤一:
1
|
ping: packet size too large: 70000 |
1
2
3
4
|
WARNING: packet size 65508 is too large. Maximum is 65507 PING 10.0.0.52 (10.0.0.52) 65508(65536) bytes of data. ping: local error: Message too long, mtu=1500 ping: local error: Message too long, mtu=1500 |
解決:
將ping的「-s」參數設置一個更小的值,windows最大值為「65500」,linux最大值為「65507」。
1. 帶 [親測] 說明源碼已經被站長親測過!
2. 下載後的源碼請在24小時內刪除,僅供學慣用途!
3. 分享目的僅供大家學習和交流,請不要用於商業用途!
4. 本站資源售價只是贊助,收取費用僅維持本站的日常運營所需!
5. 本站所有資源來源於站長上傳和網路,如有侵權請郵件聯繫站長!
6. 沒帶 [親測] 代表站長時間緊促,站長會保持每天更新 [親測] 源碼 !
7. 盜版ripro用戶購買ripro美化無擔保,若設置不成功/不生效我們不支持退款!
8. 本站提供的源碼、模板、插件等等其他資源,都不包含技術服務請大家諒解!
9. 如果你也有好源碼或者教程,可以到審核區發布,分享有金幣獎勵和額外收入!
10.如果您購買了某個產品,而我們還沒來得及更新,請聯繫站長或留言催更,謝謝理解 !
GG資源網 » linux ping 命令解析 教程