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
[root@linux ~]# 

//-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配置不正確。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章