1. 程式人生 > >Linux 網路通訊 : ping 命令詳解

Linux 網路通訊 : ping 命令詳解

ping命令用來測試主機之間網路的連通性。執行ping指令會使用ICMP傳輸協議,發出要求迴應的資訊,若遠端主機的網路功能沒有問題,就會迴應該資訊,因而得知該主機運作正常。

語法

ping(選項)(引數)

選項

-d:使用Socket的SO_DEBUG功能;
-c<完成次數>:設定完成要求迴應的次數;
-f:極限檢測;
-i<間隔秒數>:指定收發資訊的間隔時間;
-I<網路介面>:使用指定的網路介面送出資料包;
-l<前置載入>:設定在送出要求資訊之前,先行發出的資料包;
-n:只輸出數值;
-p<範本樣式>:設定填滿資料包的範本樣式;
-q:不顯示指令執行過程,開頭和結尾的相關資訊除外;
-r:忽略普通的Routing Table,直接將資料包送到遠端主機上;
-R:記錄路由過程;
-s<資料包大小>:設定資料包的大小;
-t<存活數值>:設定存活數值TTL的大小;
-v:詳細顯示指令的執行過程。

引數

目的主機:指定傳送ICMP報文的目的主機。

例項

檢測是否與主機連通

# ping www.w3cschool.cc //ping主機
PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data.
64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms
64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms
64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms
64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms

--- aries.m.alikunlun.com ping statistics ---
10 packets transmitted, 30 received, 0% packet loss, time 29246ms
rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms

//需要手動終止Ctrl+C

指定接收包的次數

# ping -c 2 www.w3cschool.cc
PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data.
64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms
64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms

--- aries.m.alikunlun.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1016ms
rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms

//收到兩次包後,自動退出

多引數使用

# ping -i 3 -s 1024 -t 255 g.cn //ping主機
PING g.cn (203.208.37.104) 1024(1052) bytes of data.
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms
1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms

--- g.cn ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 6001ms
rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2
[[email protected] ~]# 

//-i 3 傳送週期為 3秒 -s 設定傳送包的大小 -t 設定TTL值為 255

補充知識:

簡述:

ICMP協議是“Internet Control Message Ptotocol”(因特網控制訊息協議)的縮寫。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。

ping (Packet Internet Groper),因特網包探索器,用於測試網路連線量的程式。Ping傳送一個ICMP;回聲請求訊息給目的地並報告是否收到所希望的ICMP echo (ICMP回聲應答)。它是用來檢查網路是否通暢或者網路連線速度的命令

ping命令通常用來作為網路可用性的檢查。ping命令可以對一個網路地址傳送測試資料包,看該網路地址是否有響應並統計響應時間,以此測試網路。

ping和ICMP的關係:ping命令傳送資料使用的是ICMP協議。

ping的原理:

向指定的網路地址傳送一定長度的資料包,按照約定,若指定網路地址存在的話,會返回同樣大小的資料包,當然,若在特定時間內沒有返回,就是“超時”,會被認為指定的網路地址不存在。

ICMP協議通過IP協議傳送的,IP協議是一種無連線的,不可靠的資料包協議。在Unix/Linux,序號從0開始計數,依次遞增。而Windows ping程式的ICMP序列號是沒有規律。

ICMP協議在實際傳輸中資料包:20位元組IP首部 + 8位元組ICMP首部 + 1472位元組<資料大小>38位元組。

ICMP報文格式:IP首部(20位元組) + 8位型別 + 8位程式碼 + 16校驗和 + (不同型別和程式碼,格式也有所不同)。

1. 使用Ping這命令來測試網路連通

連通問題是由許多原因引起的,如本地配置錯誤、遠端主機協議失效等,當然還包括裝置等造成的故障。

首先我們講一下使用Ping命令的步驟。

使用Ping檢查連通性有五個步驟:

A. 使用ipconfig /all觀察本地網路設定是否正確,如圖;

B.Ping 127.0.0.1,127.0.0.1 回送地址Ping回送地址是為了檢查本地的TCP/IP協議有沒有設定好;

C. Ping本機IP地址,這樣是為了檢查本機的IP地址是否設定有誤;

D. Ping本網閘道器或本網IP地址,這樣的是為了檢查硬體裝置是否有問題,也可以檢查本機與本地網路連線是否正常;(在非區域網中這一步驟可以忽略)

E. Ping遠端IP地址,這主要是檢查本網或本機與外部的連線是否正常。

2. 用Ping命令來判斷一條鏈路好壞

Ping這個命令除了可以檢查網路的連通和檢測故障以外,還有一個比較有趣的用途,那就是可以利用它的一些返回資料,來估算你跟某臺主機之間的速度是多少位元組每秒。

在例子中:

"位元組=32"表示ICMP報文中有32個位元組的測試資料;

"時間=6ms"是往返時間。 

"已傳送=4"傳送多個秒包、"已接收=4"收到多個迴應包、"丟失=0"丟棄了多少個;

Minmum 最小值 、MAXimun 最大值、Average 平均值。

所在圖上來看,來回只用了6MS 時間,lost =0 即是丟包數為0,網路狀態相當良好;

3. 對Ping後返回資訊的分析

3.1  Request timed out

這是大家經常碰到的提示資訊,很多文章中說這是對方機器置了過濾ICMP資料包,從上面工作過程來看,這是不完全正確的,至少有下幾種情況:

A. 對方已關機,或者網路上根本沒有這個地址:比如在上圖中主機A中Ping 192.168.0.7,或者主機B關機了,在主機A中PING 192.168.0.5 都會得到超時的資訊。

B. 對方與自己不在同一網段內,通過路由也無法找到對方,但有時對方確實是存在的,當然不存在也是返回超時的資訊。

C. 對方確實存在,但設定了ICMP資料包過濾(比如防火牆設定)。

怎樣知道對方是存在,還是不存在呢,可以用帶引數 -a 的Ping命令探測對方,如果能得到對方的NETBIOS名稱,則說明對方是存在的,是有防火牆設定,如果得不到,多半是對方不存在或關機,或不在同一網段內。

D. 錯誤設定IP地址

正常情況下,一臺主機應該有一個網絡卡,一個IP地址,或多個網絡卡,多個IP地址(這些地址一定要處於不同的IP子網)。但如果一臺電腦的“撥號網路介面卡”(相當於一塊軟網絡卡)的TCP/IP設定中,設定了一個與網絡卡IP地址處於同一子網的IP地址,這樣,在IP層協議看來,這臺主機就有兩個不同的介面處於同一網段內。當從這臺主機Ping其他的機器時,會存在這樣的問題:

a. 主機不知道將資料包發到哪個網路介面,因為有兩個網路介面都連線在同一網段。

b. 主機不知道用哪個地址作為資料包的源地址。因此,從這臺主機去Ping其他機器,IP層協議會無法處理,超時後,Ping 就會給出一個“超時無應答”的錯誤資訊提示。但從其他主機Ping這臺主機時,請求包從特定的網絡卡來,ICMP只須簡單地將目的、源地址互換,並更改一些標誌即可,ICMP應答包能順利發出,其他主機也就能成功Ping通這臺機器了。

3.2 Destination host Unreachable

A. 對方與自己不在同一網段內,而自己又未設定預設的路由,比如上例中A機中不設定預設的路由,執行Ping 192.168.0.1.4就會出現“Destination host Unreachable”。

B. 網線出了故障

這裡要說明一下“destination host unreachable”和 “time out”的區別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因為其他原因不可到達,這時候會出現“time out”,如果路由表中連到達目標的路由都沒有,那就會出現“destination host unreachable”。

3.3 Bad IP address

這個資訊表示您可能沒有連線到DNS伺服器,所以無法解析這個IP地址,也可能是IP地址不存在。

3.4 Source quench received

這個資訊比較特殊,它出現的機率很少。它表示對方或中途的伺服器繁忙無法迴應。

3.5 Unknown host——不知名主機

這種出錯資訊的意思是,該遠端主機的名字不能被域名伺服器(DNS)轉換成IP地址。故障原因可能是域名伺服器有故障,或者其名字不正確,或者網路管理員的系統與遠端主機之間的通訊線路有故障。

3.6 No answer——無響應

這種故障說明本地系統有一條通向中心主機的路由,但卻接收不到它發給該中心主機的任何資訊。故障原因可能是下列之一:中心主機沒有工作;本地或中心主機網路配置不正確;本地或中心的路由器沒有工作;通訊線路有故障;中心主機存在路由選擇問題。

3.7 Ping 127.0.0.1:127.0.0.1是本地迴圈地址

如果本地址無法Ping通,則表明本地機TCP/IP協議不能正常工作。

3.8 no rout to host

網絡卡工作不正常。

6.9 transmit failed,error code

10043網絡卡驅動不正常。

3.10 unknown host name

DNS配置不正確。