不管在windows平臺(tái),還是在linux平臺(tái),ping都是非常常用的網(wǎng)絡(luò)命令;ping命令通過(guò)ICMP(Internet控制消息協(xié)議)工作;ping可以用來(lái)測(cè)試本機(jī)與目標(biāo)主機(jī)是否聯(lián)通、聯(lián)通速度如何、穩(wěn)定性如何。
ping命令運(yùn)行在命令提示符終端,用法為:“ping 參數(shù) 目標(biāo)主機(jī)”。其中參數(shù)為零到多個(gè),目標(biāo)主機(jī)可以是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 |
參數(shù) | 詳解 |
---|---|
-a | Audible ping. |
-A | 自適應(yīng)ping,根據(jù)ping包往返時(shí)間確定ping的速度; |
-b | 允許ping一個(gè)廣播地址; |
-B | 不允許ping改變包頭的源地址; |
-c count | ping指定次數(shù)后停止ping; |
-d | 使用Socket的SO_DEBUG功能; |
-F flow_label | 為ping回顯請(qǐng)求分配一個(gè)20位的“flow label”,如果未設(shè)置,內(nèi)核會(huì)為ping隨機(jī)分配; |
-f | 極限檢測(cè),快速連續(xù)ping一臺(tái)主機(jī),ping的速度達(dá)到100次每秒; |
-i interval | 設(shè)定間隔幾秒發(fā)送一個(gè)ping包,默認(rèn)一秒ping一次; |
-I interface | 指定網(wǎng)卡接口、或指定的本機(jī)地址送出數(shù)據(jù)包; |
-l preload | 設(shè)置在送出要求信息之前,先行發(fā)出的數(shù)據(jù)包; |
-L | 抑制組播報(bào)文回送,只適用于ping的目標(biāo)為一個(gè)組播地址 |
-n | 不要將ip地址轉(zhuǎn)換成主機(jī)名; |
-p pattern | 指定填充ping數(shù)據(jù)包的十六進(jìn)制內(nèi)容,在診斷與數(shù)據(jù)有關(guān)的網(wǎng)絡(luò)錯(cuò)誤時(shí)這個(gè)選項(xiàng)就非常有用,如:“-p ff”; |
-q | 不顯示任何傳送封包的信息,只顯示最后的結(jié)果 |
-Q tos | 設(shè)置Qos(Quality of Service),它是ICMP數(shù)據(jù)報(bào)相關(guān)位;可以是十進(jìn)制或十六進(jìn)制數(shù),詳見(jiàn)rfc1349和rfc2474文檔; |
-R | 記錄ping的路由過(guò)程(IPv4 only); 注意:由于IP頭的限制,最多只能記錄9個(gè)路由,其他會(huì)被忽略; |
-r | 忽略正常的路由表,直接將數(shù)據(jù)包送到遠(yuǎn)端主機(jī)上,通常是查看本機(jī)的網(wǎng)絡(luò)接口是否有問(wèn)題;如果主機(jī)不直接連接的網(wǎng)絡(luò)上,則返回一個(gè)錯(cuò)誤。 |
-S sndbuf | Set socket sndbuf. If not specified, it is selected to buffer not more than one packet. |
-s packetsize | 指定每次ping發(fā)送的數(shù)據(jù)字節(jié)數(shù),默認(rèn)為“56字節(jié)”+“28字節(jié)”的ICMP頭,一共是84字節(jié); 包頭+內(nèi)容不能大于65535,所以最大值為65507(linux:65507, windows:65500); |
-t ttl | 設(shè)置TTL(Time To Live)為指定的值。該字段指定IP包被路由器丟棄之前允許通過(guò)的最大網(wǎng)段數(shù); |
-T timestamp_option | 設(shè)置IP timestamp選項(xiàng),可以是下面的任何一個(gè): 'tsonly' (only timestamps) 'tsandaddr' (timestamps and addresses) 'tsprespec host1 [host2 [host3]]' (timestamp prespecified hops). |
-M hint | 設(shè)置MTU(最大傳輸單元)分片策略。 可設(shè)置為: 'do':禁止分片,即使包被丟棄; 'want':當(dāng)包過(guò)大時(shí)分片; 'dont':不設(shè)置分片標(biāo)志(DF flag); |
-m mark | 設(shè)置mark; |
-v | 使ping處于verbose方式,它要ping命令除了打印ECHO-RESPONSE數(shù)據(jù)包之外,還打印其它所有返回的ICMP數(shù)據(jù)包; |
-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 | 以毫秒為單位設(shè)置ping的超時(shí)時(shí)間; |
-w deadline | deadline; |
參考內(nèi)容:http://ss64.com/bash/ping.html
下圖為簡(jiǎn)單的ping產(chǎn)生的響應(yīng)內(nèi)容,圖中返回內(nèi)容具體的含義如下:
① ping目標(biāo)主機(jī)的域名和IP(ping會(huì)自動(dòng)將域名轉(zhuǎn)換為IP)② 不帶包頭的包大小和帶包頭的包大?。▍⒖肌?s”參數(shù))③ icmp_seq:ping序列,從1開(kāi)始;如果數(shù)字不是按順序遞增也就意味著丟包了 ttl:剩余的ttl;見(jiàn)四TTL解釋 time: 響應(yīng)時(shí)間,數(shù)值越小,聯(lián)通速度越快;④ 發(fā)出去的包數(shù),返回的包數(shù),丟包率,耗費(fèi)時(shí)間;⑤ 最小/最大/平均響應(yīng)時(shí)間和本機(jī)硬件耗費(fèi)時(shí)間;
當(dāng)我們?cè)谑褂胮ing命令時(shí),返回結(jié)果里會(huì)帶一個(gè)TTL值。這個(gè)東西的含義其實(shí)就是Time To Live,指的是報(bào)文在網(wǎng)絡(luò)中能夠‘存活’的限制。以前這個(gè)限制方式是設(shè)定一個(gè)時(shí)間(Time To Live中的Time就是這樣來(lái)的),當(dāng)報(bào)文在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)時(shí),時(shí)間超過(guò)這個(gè)限制,最后一個(gè)收到報(bào)文的‘路由點(diǎn)’就會(huì)把它扔掉,而不繼續(xù)轉(zhuǎn)發(fā)。后來(lái)把時(shí)間限制改為了跳數(shù)限制,就是當(dāng)報(bào)文在網(wǎng)絡(luò)中轉(zhuǎn)發(fā)時(shí),每經(jīng)過(guò)一個(gè)‘路由點(diǎn)‘,就把預(yù)先設(shè)定的這個(gè)TTL數(shù)值減1,直到最后TTL=1時(shí)報(bào)文就被扔掉,不向下轉(zhuǎn)發(fā)。
路由點(diǎn):我這里是指完成路由功能的機(jī)器,因?yàn)椴⒉皇侵挥新酚善鞑趴梢酝瓿陕酚赊D(zhuǎn)發(fā)功能,比如主機(jī)可以配置路由轉(zhuǎn)發(fā)。
ping命令中的TTL
上邊解釋的TTL是基礎(chǔ),然后,我們這篇文章要說(shuō)明的是ping中的TTL到底是什么意思。因?yàn)椴还茉趺聪耄祷亓艘粋€(gè)TTL這東西,是說(shuō)被你ping的主機(jī)預(yù)設(shè)的報(bào)文TTL是這個(gè)值嗎?還是說(shuō)你ping它的時(shí)候自己的報(bào)文自動(dòng)設(shè)定了TTL是這個(gè)值?還是說(shuō)你的報(bào)文經(jīng)過(guò)了TTL跳到達(dá)被ping主機(jī)?。。。總之就是不能明確地說(shuō)出這個(gè)TTL的意義。
其實(shí)這個(gè)TTL是指:被ping主機(jī)那里返回的報(bào)文,到了你這里,從它自己預(yù)設(shè)的TTL減小到還剩下多少。
有點(diǎn)繞口,舉個(gè)例子就明白了。
我們先tracert www.baidu.com
這里表示,我們發(fā)出的ICMP報(bào)文從自己主機(jī)到目標(biāo)主機(jī)一共經(jīng)過(guò)12跳,這里可以想成我們發(fā)過(guò)去的和對(duì)方返回的路由路徑是一樣的(其實(shí)網(wǎng)絡(luò)很復(fù)雜的,這樣說(shuō)是在基本理論上簡(jiǎn)化問(wèn)題——一般網(wǎng)絡(luò)情況不變化就是這樣的),也就是目標(biāo)主機(jī)它預(yù)設(shè)的報(bào)文TTL要減掉12?,F(xiàn)在,按照剛才說(shuō)的“被ping主機(jī)那里返回的報(bào)文,到了你這里,從它自己預(yù)設(shè)的TTL減小到還剩下多少?!?,我們可以計(jì)算ping www.baidu.com時(shí)的TTL了。
TTL = 目標(biāo)主機(jī)預(yù)設(shè)報(bào)文TTL - 12
現(xiàn)在等式中有兩個(gè)未知數(shù),但是“目標(biāo)主機(jī)預(yù)設(shè)報(bào)文TTL”其實(shí)比較容易知道。并且有一個(gè)前提:一般有64、128等幾個(gè)值(這些東西大家另外去查資料吧)
我們先來(lái)ping www.baidu.com
這里我們看到 TTL = 52。一般就可以推斷目標(biāo)主機(jī)預(yù)設(shè)的報(bào)文TTL為64,因?yàn)樗容^接近(一般啦)。然后對(duì)比一下上邊的等式,代入數(shù)值:
52 = 64 - 12
默認(rèn)情況下,Linux系統(tǒng)的TTL值為64或255,Windows NT/2000/XP系統(tǒng)的TTL值為128,Windows 98系統(tǒng)的TTL值為32,UNIX主機(jī)的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:
以最快的速度,使用最大的包進(jìn)行ping,可用于測(cè)試目標(biāo)主機(jī)的承壓能力:
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 |
注意:此用法非常危險(xiǎn),65535(包頭+內(nèi)容)*100個(gè)包每秒=6.25MB,每秒發(fā)送6.25MB的數(shù)據(jù),相當(dāng)于50Mbps的帶寬,完全可能導(dǎo)致目標(biāo)主機(jī)拒絕服務(wù)。請(qǐng)勿用于非法用途,造成不良后果自負(fù)。
3、聯(lián)通不穩(wěn)定,丟包嚴(yán)重的情形:
下面的ping發(fā)出17個(gè)ping icmp包,而只有序號(hào)為8、9、12的包收到響應(yīng)信息,丟包率達(dá)82%,聯(lián)通非常不穩(wěn)定:
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、完全無(wú)法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、錯(cuò)誤一:
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”參數(shù)設(shè)置一個(gè)更小的值,windows最大值為“65500”,linux最大值為“65507”。
本文轉(zhuǎn)自:
https://blog.csdn.net/AlimSah/article/details/52439029?utm_source=blogxgwz0
http://aiezu.com/article/linux_ping_command.html
聯(lián)系客服