複製鏈接
請複製以下鏈接發送給好友

ping

(網絡診斷工具)

鎖定
ping (Packet Internet Groper),中文名稱因特網包探索器,是一種計算機網絡管理應用,該程序通常被用於確認因特網上的一台主機是否可達 [1]  。Ping是工作在 TCP/IP網絡體系結構中應用層的一個服務命令, 其原理是向特定的目的主機發送 ICMP(Internet Control Message Protocol 因特網報文控制協議)Echo回顯 請求(Echo Request)報文,並根據回覆的ICMP回顯應答消息(Echo Reply),測試目的站是否可達並獲取連接的丟包率和平均往返時間等有關狀態信息。
中文名
因特網包探索器
外文名
Packet Internet Groper
簡    稱
PING
作    用
測試網絡連接量

ping基本信息

ping用於確定本地主機是否能與另一台主機成功交換(發送與接收)數據包,再根據返回的信息,就可以推斷TCP/IP參數是否設置正確,以及運行是否正常、網絡是否通暢等。Ping命令可以進行以下操作 [2]  :
①通過將ICMP(Internet控制消息協議)回顯(Echo)數據包發送到計算機並偵聽回顯回覆數據包來驗證與一台或多台遠程計算機的連接。
②每個發送的數據包最多等待一秒。
③打印已傳輸和接收的數據包數。
需要注意的是,Ping成功並不一定就代表TCP/IP配置正確,有可能還要執行大量的本地主機與遠程主機的數據包交換,才能確信TCP/IP配置的正確性。如果執行ping成功而網絡仍無法使用,那麼問題很可能出在網絡系統的軟件配置方面,ping成功只保證當前主機與目的主機間存在一條連通的物理路徑 [2] 

ping歷史由來

ping程序是由Mike Muuss編寫的,ping程序的命名源自聲納系統在進行回聲定位時發出的聲音。ping程序的作者將ping程序對“網絡空間”的探測與聲納系統對物理空間的探測類比,因其原理的範式是相同的: ping 使用定時 IP/ICMP 協議回顯請求(ECHO_REQUEST) 和 回顯應答(ECHO_REPLY )數據包探測到目標主機的“距離” [2] 
資料 [9]  中記錄了一個有趣的網頁來描述ping程序的歷史和源碼 [1] 

ping實現方式

ICMPPing
ICMP是一種將差錯與控制集於一體的協議,不僅用於傳輸差錯報文,還用於消息控制報文。它與IP協議相互依賴:IP在發送一個差錯或控制報文時要用到ICMP,而ICMP利用IP來傳遞報文 [3] 
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
TCP/IP協議組中,用户數據報協議(UDP)提供應用進程之間數據報傳送的基本機制。每個UDP報文不僅傳送用户數據,而且還包括髮送方和接收方的協議端口號 [3] 
UDPPing與TCPPing的原理類似,通過RAWSocket定製UDP包,主要是格式化UDP包中的目的端口號,一般指定一個數量值很大的目的端口號(比如31558),很少應用程序用到數量值入的端口號,也就是説該端口很有可能是處於關閉狀態。首先構建好UDP報文,然後遞交給IP實體發送。如果目標主機不可達(網絡不通或主機未打開),則路由器將發送一個目的不可達ICMP報文。而如果目標主機可達,在其接收數據時,其UDP實體首先判斷接收到的目的端口號是否與當前使用的某端口號匹配,如果匹配,則將數據報放入到對應的接收隊列,否則如果目的端口號對應的端口關閉則丟棄該數據報,並回送一個“端口不可達”的ICMP報文,因此,只要目標主機可達,UDPPing程序將收到一個UDP迴應包(也可能沒有)或者“端口不可達”的ICMP報文而目標主機不可達,將收到“目的不可達’’的ICMP報文 [3] 

ping工作原理

ping命令示意圖 ping命令示意圖
Ping 命令本質上是一種發送 Internet 控制消息協議 (ICMP) 回顯請求和響應消息的命令組合。ICMP協議是一種構建在IP協議之上的網絡協議,其報頭封裝在IP層報頭之內。
當網絡管理員在命令提示符下輸入 ping 命令時,主機會向目標設備或指定的 IP 地址發送ICMP回顯請求消息(ICMP Echo Request Message),這些請求消息是最多 64 字節的小數據包(在ping命令中一般為32字節),用於判斷數據包是否成功到達對端。然後,發送請求的本地計算機將等待遠程主機的響應。如果遠程主機正在運行且網絡可達,目標計算機收到回顯請求消息後,會將ICMP回顯響應消息(ICMP Echo Reply Message)送回原始計算機。
回顯請求消息(Echo Request)報文格式
8字節
8字節
16字節
Type = 8(IPv4,ICMP)128(IPv6,ICMP6)
Code = 0
Checksum
Identifier
Sequence Number
Payload(可選) [5] 
回顯應答消息(Echo Reply)報文格式
8字節
8字節
16字節
Type = 0(IPv4,ICMP)129(IPv6,ICMP6)
Code = 0
Checksum
Identifier
Sequence Number
Payload(可選) [5] 
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 包會被丟棄。
Ping百度網站示例 Ping百度網站示例
以下是一個ping的例子:
可以看到測試的是主機和百度服務器(220.181.38.149)的連接性,ping程序收到4條回顯應答消息,每個消息32字節,以及估計的往返時間、TTL和丟失(丟包率)。
使用Ping命令探測服務器可訪問性 使用Ping命令探測服務器可訪問性
若沒有 ping 響應,則表明目標設備不可用或脱機。如果 ping 網絡測試結果顯示數據包丟失,則可能是網絡連接不良。同樣,在 ping 網絡測試中頻繁出現回顯請求超時通常是由於 IP 地址輸入不正確 [4] 
ICMP報文類型
類型
代碼
描述
種類
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:
在Windows系列的操作系統中,我們都可以使用ping命令來解決網絡中出現的路由問題,方法如下 [6] 
①進入命令提示符(可通過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]  。下面就給出一個典型的檢測次序及對應的可能故障:
ping127.0.0.1——這個Ping命令被送到本地計算機的IP軟件,該命令永不退出該計算機。如果沒有做到這一點,就表示TCP/IP的安裝或運行存在某些最基本的問題 [2] 
ping本機IP——這個命令被送到你計算機所配置的IP地址,你的計算機始終都應該對該Ping命令做出應答,如果沒有,則表示本地配置或安裝存在問題。出現此問題時,局域網用户請斷開網絡電纜,然後重新發送該命令。如果網線斷開後,本命令正確,則表示另一台計算機可能配置了相同的IP地址 [2] 
ping局域網內其他IP——這個命令應該離開你的計算機,經過網卡及網絡電纜到達其他計算機,再返回。收到回顯(Echo)應答表明本地網絡中的網卡和載體運行正確。但如果收到0個回顯(Echo)應答,那麼表示子網掩碼(進行子網分割時,將IP地址的網絡部分與主機部分分開的代碼)不正確或網卡配置錯誤或電纜系統有問題 [2] 
ping網關IP——這個命令如果應答正確,表示局域網中的網關路由器正在運行並能夠作出應答 [2] 
ping遠程IP——如果收到4個應答,表示成功的使用了缺省網關。對於撥號上網用户則表示能夠成功的訪問Internet(但不排除ISP的DNS會有問題) [2] 
pinglocalhost——localhost是個操作系統的網絡保留名,它是127.0.0.1的別名,每台計算機都應該能夠將該名字轉換成該地址。如果沒有做到這一條,則表示主機文件(/Windows/host)中存在問題 [2] 
pingwww.baidu.com——對這個域名執行Ping命令,你的計算機必須先將域名轉換成IP地址,通常是通過DNS服務器。如果這裏出現故障,則表示DNS服務器的IP地址配置不正確或DNS服務器有故障 [2] 
如果上面所列出的所有Ping命令都能正常運行,那麼計算機可以進行本地和遠程通信。但是,這些命令的成功並不表示所有的網絡配置都沒有問題,例如,某些子網掩碼錯誤就可能無法用這些方法檢測到 [2] 

ping影響因素

在物理鏈路連通和路由設置正確的情況下,使用Ping命令仍然屏不通,可能有以下幾個問題:
(1)網線剛插到交換機上就Ping通網關,忽略了生成樹的收斂時間。當然,較新的交換機都支持快速生成樹,或者有的管理員乾脆把用户端口(accessport)的生成樹協議關掉,問題就解決了 [6] 
(2)不管中間經過了多少個節點,只要有節點(包括端節點)對ICMP信息包進行了過濾,Ping不通是正常的。最常見的就是防火牆的行為 [6] 
(3)某些路由器端口是不允許用户Ping的 [6] 
(4)網絡因設備間的超時,造成ICMP報文無法在缺省時間(2秒)內收到。超時的原因有:主機沒有足夠的時間和資源來響應;路徑太長,沒到達目的地時TTL的值為0,最後一個路由器將發回ICMP超時信息;使用擴展Ping,增加應答等待時間間隔等 [6] 
(5)引入NAT的場合會造成單向Ping通。NAT可以起到隱蔽內部地址的作用,當由內Ping外時,可以Ping通是因為NAT表的映射關係存在,當由外發起Ping內網主機時,就無從查找邊界路由器的NAT訪問列表了 [6] 

ping安全漏洞

基於ICMP的Ping洪泛 [7] 
網絡攻擊者可以以很快的速度向目標發送 ping 請求,從而可能使受害者不堪重負。為了進行拒絕服務攻擊,攻擊者只需不斷地向攻擊目標發送Ping,一旦ICMP數據包超過最大上限時,就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,致使攻擊的目標死機或導致網絡阻塞。此技術稱為 ping洪泛攻擊。 [7] 
ICMP 回顯掃描(ping 掃描) [8] 
Ping主機掃描可以使用一個ICMP 回顯數據包來探測主機地址是否存活,對多個地址進行ping 請求可以獲取網絡上所有主機的列表,此技術稱為ICMP 回顯(Echo)掃描 [8] 
參考資料
  • 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]