-
ping
(網絡診斷工具)
鎖定
- 中文名
- 因特網包探索器
- 外文名
- Packet Internet Groper
- 簡 稱
- PING
- 作 用
- 測試網絡連接量
ping基本信息
ping用於確定本地主機是否能與另一台主機成功交換(發送與接收)數據包,再根據返回的信息,就可以推斷TCP/IP參數是否設置正確,以及運行是否正常、網絡是否通暢等。Ping命令可以進行以下操作
[2]
:
②每個發送的數據包最多等待一秒。
③打印已傳輸和接收的數據包數。
需要注意的是,Ping成功並不一定就代表TCP/IP配置正確,有可能還要執行大量的本地主機與遠程主機的數據包交換,才能確信TCP/IP配置的正確性。如果執行ping成功而網絡仍無法使用,那麼問題很可能出在網絡系統的軟件配置方面,ping成功只保證當前主機與目的主機間存在一條連通的物理路徑
[2]
。
ping歷史由來
ping程序是由Mike Muuss編寫的,ping程序的命名源自聲納系統在進行回聲定位時發出的聲音。ping程序的作者將ping程序對“網絡空間”的探測與聲納系統對物理空間的探測類比,因其原理的範式是相同的: ping 使用定時 IP/ICMP 協議回顯請求(ECHO_REQUEST) 和 回顯應答(ECHO_REPLY )數據包探測到目標主機的“距離”
[2]
。
ping實現方式
ICMPPing
ICMP報文分為信息報文、差錯報文、控制報文。信息報文一般由客户端發出,例如用於測試目的地址可達性的迴應請求/應答報文;而差錯報文一般由服務器或是路由器發出,表示網絡或主機不能完成要求的服務。當發送一份ICMP差錯報文時,文始終包含了IP首部和產生ICMP差錯報文的IP數據報的前8個字節
[3]
。
ICMP Ping就是向目標主機發送ICMP信息報文,目標主機(有時是路由器)迴應ICMP信息報文或差錯報文,Ping程序根據這些收到的ICMP報文,以知道目標主機的可達性。可用於Ping的信息報文有:迴應請求與響應報文、時間戳請求與響應報文和掩碼請求與響應報文
[3]
。
TCPPing
在進行ICMPPing的時候,如果在目標主機的網絡網關過濾了ICMP Ping包,ICMPPing的結果就不準確了。此時,應該考慮其他方式,如TCPPing、LIDPPing。TCP的功能是在一對ULP(UpperLayerProtocol,高層協議)之間提供的數據報服務基礎上,建立可靠的端對端連接,並提供虛電路服務和麪向數據流的傳輸服務。TCP中的基本傳輸單元是段(Segment),一個TCP段由段頭和數據流兩部分組成
[3]
。
在TCP協議中,SYN包用來表示建立連接請求。如果對方端口處在listening狀態,就會回送ACK包,並附上自己的ISN。但是如果對方端口是關閉的,它會發回一個RST包,表示應該馬上斷開連接(少數情況下會發回一個同時置SYN和ACK位的包)。如果我們向一個端口發送ACK包,而事先沒有與此端口建立連接,那麼,無論端口是否打開,它都會回送一個RST包。所以可以看出,無論這個端口是否打開,總會有某一種數據包返回,以此可以判定目標主機可達。而目標主機如果不可達,路由器就會向掃描主機發送目的地不可達的ICMP報文。這樣,通過向目標主機發送TCPSYN包或TCPACK包就可以準確判斷目標主機是否可達,而且根據RFC793(TCP),目標主機(或路由器)都無法屏蔽TCPSYN包和TCPACK包,因此,TCPPing的準確性比ICMPPing的準確性要高。在實現的時候,需要利用RAW Socket,定製TCP包並封裝在IP包中。在Linux系統下,非root用户是沒有此項權利的,同樣Windows的非.Administrator組用户也不能直接填寫TCP包頭和IP包頭
[3]
。
UDPPing
UDPPing與TCPPing的原理類似,通過RAWSocket定製UDP包,主要是格式化UDP包中的目的端口號,一般指定一個數量值很大的目的端口號(比如31558),很少應用程序用到數量值入的端口號,也就是説該端口很有可能是處於關閉狀態。首先構建好UDP報文,然後遞交給IP實體發送。如果目標主機不可達(網絡不通或主機未打開),則路由器將發送一個目的不可達ICMP報文。而如果目標主機可達,在其接收數據時,其UDP實體首先判斷接收到的目的端口號是否與當前使用的某端口號匹配,如果匹配,則將數據報放入到對應的接收隊列,否則如果目的端口號對應的端口關閉則丟棄該數據報,並回送一個“端口不可達”的ICMP報文,因此,只要目標主機可達,UDPPing程序將收到一個UDP迴應包(也可能沒有)或者“端口不可達”的ICMP報文而目標主機不可達,將收到“目的不可達’’的ICMP報文
[3]
。
ping工作原理
Ping 命令本質上是一種發送 Internet 控制消息協議 (ICMP) 回顯請求和響應消息的命令組合。ICMP協議是一種構建在IP協議之上的網絡協議,其報頭封裝在IP層報頭之內。
當網絡管理員在命令提示符下輸入 ping 命令時,主機會向目標設備或指定的 IP 地址發送ICMP回顯請求消息(ICMP Echo Request Message),這些請求消息是最多 64 字節的小數據包(在ping命令中一般為32字節),用於判斷數據包是否成功到達對端。然後,發送請求的本地計算機將等待遠程主機的響應。如果遠程主機正在運行且網絡可達,目標計算機收到回顯請求消息後,會將ICMP回顯響應消息(ICMP Echo Reply Message)送回原始計算機。
8比特 | 8比特 | 16比特 |
Type = 8(IPv4,ICMP)128(IPv6,ICMP6) | Code = 0 | Checksum |
Identifier | Sequence Number | |
8比特 | 8比特 | 16比特 |
Type = 0(IPv4,ICMP)129(IPv6,ICMP6) | Code = 0 | Checksum |
Identifier | Sequence Number | |
ping程序會在傳出的回顯請求(Echo Request)的可選數據區(Payload)中包含一份本地時間拷貝。這個時間和數據區域中的剩餘內容均包含在返回的回顯應答(Echo Reply)報文中。當應答被髮出ping的收到時,ping程序注意到當前的時間,並用它減去應答中的時間,便得到了一個達到被ping主機的往返時間(RTT)估計值。由於只用到了原始發送者記錄的時間,因此這個特徵不會涉及到發送者和接收者之間的時鐘同步
[1]
。
通常,在 ping 網絡測試中發送多個回顯請求,以評估遠程主機的可用性。例如,在 Windows 中,發送到 IP 地址的回顯請求數通常為 4 個。命令提示符會顯示每個請求的結果,並幫助網絡管理員確定它是否得到了響應。它還顯示發送/接收的總字節數、丟失數據包率(丟包率)、平均往返時間(RTT, round trip time)和生存時間(TTL, time to live),以幫助網絡管理員評估網絡狀態
[4]
。
平均往返時間(RTT)是衡量網絡鏈路延遲的指標。該過程以毫秒 (ms) 為單位,從瀏覽器向服務器發送請求時開始,在收到來自服務器的響應時完成。RTT 是 Web 應用程序的關鍵性能指標,反應了數據包從主機到另一台主機的延遲。丟包率則描述了鏈路中傳輸的數據包丟失的比例,描述了鏈路的傳輸質量。生存時間(TTL)描述了從主機到目標設備的網絡鏈路中的跳數,它的值隨着每經過一次路由器就會減 1,直到減到 0 時該 IP 包會被丟棄。
可以看到測試的是主機和百度服務器(220.181.38.149)的連接性,ping程序收到4條回顯應答消息,每個消息32字節,以及估計的往返時間、TTL和丟失(丟包率)。
若沒有 ping 響應,則表明目標設備不可用或脱機。如果 ping 網絡測試結果顯示數據包丟失,則可能是網絡連接不良。同樣,在 ping 網絡測試中頻繁出現回顯請求超時通常是由於 IP 地址輸入不正確
[4]
。
類型 | 代碼 | 描述 | 種類 |
0 | 0 | 回顯應答(echo reply) | 查詢報文 |
3 | 0-15 | 目標不可達(destination unreachable) | 差錯報文 |
4 | 0 | 原點抑制(source quench) | 差錯報文 |
5 | 0-3 | 重定向或改變路由(redirect) | 差錯報文 |
8 | 0 | 回顯請求(echo request) | 查詢報文 |
9 | 0 | 路由器通告(router advertisement) | 查詢報文 |
10 | 0 | 路由器請求(router solicitation) | 查詢報文 |
11 | 0-1 | 超時(time exceeded) | 差錯報文 |
ping命令用法
在個人電腦Windows中使用ping:
①進入命令提示符(可通過win+R鍵並輸入cmd進入)。
②輸入命令:
C:\Users\用户>ping 網址(www.xxx.com)/IP地址(xxx.xxx.xxx.xxx)
例如:
Ping 127.0.0.1(回送地址,用於測試本機tcp/ip配置是否正常)
Ping 10.207.255.254(網關地址,可通過在命令行中輸入ipconfig查詢)
Ping 8.8.8.8(DNS服務器地址)
Ping www.baidu.com(測試訪問遠程服務器和域名解析是否正常)
當ping一個網址時,主機會訪問DNS服務器獲得該網址的IP地址解析。
在路由器中使用ping命令:
- 用户Ping
在路由器的用户模式下,也可以使用ping命令,它是一個簡單的全局命令,用法同Windows下相同,只是返回代碼不同。其形式是:Router>ping 169.254.104.10路由器缺省使用IP協議
[6]
。
- 擴展Ping
在路由器的特權模式下,可以使用其他幾個選項,這就是所謂的擴展ping,它是交互形式工作的。擴展ping的可用其他選項包括:使用不同大小的數據包;增加應答等待時間間隔;一次發送多於5個數據包;在IP報頭設置“不分段”位;在其他協議中使用ping,例如IPX和AppleTalk。方法是:在enable模式下輸入ping並按回車鍵即可啓動擴展ping,ping工具將提示輸入各種變量值。其形式是:
[6]
Router#ping
Protocol[ip]:***
TargetIPaddress:****
…………
ping檢查網絡故障
正常情況下,當你使用Ping命令來查找問題所在或檢驗網絡運行情況時,你需要使用許多Ping命令,如果所有都運行正確,你就可以相信基本的連通性和配置參數沒有問題;如果某些Ping命令出現運行故障,它也可以指明到何處去查找問題
[2]
。下面就給出一個典型的檢測次序及對應的可能故障:
ping本機IP——這個命令被送到你計算機所配置的IP地址,你的計算機始終都應該對該Ping命令做出應答,如果沒有,則表示本地配置或安裝存在問題。出現此問題時,局域網用户請斷開網絡電纜,然後重新發送該命令。如果網線斷開後,本命令正確,則表示另一台計算機可能配置了相同的IP地址
[2]
。
ping局域網內其他IP——這個命令應該離開你的計算機,經過網卡及網絡電纜到達其他計算機,再返回。收到回顯(Echo)應答表明本地網絡中的網卡和載體運行正確。但如果收到0個回顯(Echo)應答,那麼表示子網掩碼(進行子網分割時,將IP地址的網絡部分與主機部分分開的代碼)不正確或網卡配置錯誤或電纜系統有問題
[2]
。
pinglocalhost——localhost是個操作系統的網絡保留名,它是127.0.0.1的別名,每台計算機都應該能夠將該名字轉換成該地址。如果沒有做到這一條,則表示主機文件(/Windows/host)中存在問題
[2]
。
pingwww.baidu.com——對這個域名執行Ping命令,你的計算機必須先將域名轉換成IP地址,通常是通過DNS服務器。如果這裏出現故障,則表示DNS服務器的IP地址配置不正確或DNS服務器有故障
[2]
。
ping影響因素
在物理鏈路連通和路由設置正確的情況下,使用Ping命令仍然屏不通,可能有以下幾個問題:
(4)網絡因設備間的超時,造成ICMP報文無法在缺省時間(2秒)內收到。超時的原因有:主機沒有足夠的時間和資源來響應;路徑太長,沒到達目的地時TTL的值為0,最後一個路由器將發回ICMP超時信息;使用擴展Ping,增加應答等待時間間隔等
[6]
。
(5)引入NAT的場合會造成單向Ping通。NAT可以起到隱蔽內部地址的作用,當由內Ping外時,可以Ping通是因為NAT表的映射關係存在,當由外發起Ping內網主機時,就無從查找邊界路由器的NAT訪問列表了
[6]
。
ping安全漏洞
網絡攻擊者可以以很快的速度向目標發送 ping 請求,從而可能使受害者不堪重負。為了進行拒絕服務攻擊,攻擊者只需不斷地向攻擊目標發送Ping,一旦ICMP數據包超過最大上限時,就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,致使攻擊的目標死機或導致網絡阻塞。此技術稱為 ping洪泛攻擊。
[7]
- 參考資料
-
- 1. Stevens W R.TCP/IP 詳解卷 1: 協議.北京:機械工業出版社,2000
- 2. 胡一凡. 淺談ping實用程序的用法[J]. 網管員世界, 2006(8):154-155
- 3. 傅佳芳,趙保華. Ping技術研究[J]. 微型電腦應用(6):47-50
- 4. What Is Ping? .SolarWinds[引用日期2024-05-21]
- 5. Postel J. Internet control message protocol[R]. 1981.RFC 792: Internet Control Message Protocol (rfc-editor.org)
- 6. 陶福貴, 王鋭. Ping命令的使用方法詳解綜述[J]. 科技創新導報, 2007(6):18-18
- 7. 譚瑛.基於DDoS攻擊的防禦技術研究[J].微計算機信息,2011,27(02):151-15
- 8. 魏翠紅.漏洞掃描技術分析[J].信息與電腦(理論版),2016(06):182-183
- 9. The Story of the PING Program .WebCite[引用日期2024-05-22]