在測試和部署網絡通信應用時,我們經常會遇到網絡不通的問題。一般都會想到ping一下。那么ping命令的作用和原理到底是什么呢?
ping 命令是基于 ICMP 協議來工作的,要明白ping, 先了解下ICMP協議吧~
ICMP協議
ICMP全稱為互聯網控制報文協議(Internet Control Message Protocol)。那么具體是怎么“控制”的呢?
在復雜的網絡傳輸環境里,數據包常常會遇到各種問題導致傳輸失敗。網絡層的IP協議是一種無連接的,不可靠的數據包協議,它并不能保證數據一定被送達,因此,我們需要其它的協議,在數據包傳發送異常時,能將異常信息傳回來,這樣才可以調整傳輸策略,以此來控制整個局面。
ICMP協議格式
ICMP 協議是通過IP協議來發送的,報文封裝在 IP 包里面。如下:
ICMP報文格式:
ICMP數據包由8bit的類型字段和8bit的代碼字段以及16bit的校驗字段再加上選項數據組成。ICMP報文大致分為兩類:查詢報文類型和差錯報文類型。
查詢報文類型
查詢報文主要應用于ping查詢、子網掩碼查詢、時間戳查詢等。ping命令其實就是對ICMP協議查詢報文類型的使用。
主機A ping 主機B時,ping命令在主機A構建ICMP請求數據包時,ICMP的類型字段為8(回送請求),當主機B構建ICMP請求數據包時,ICMP的類型字段為0(回送應答)。如果主機A在一定時間內收到了主機B的應答,則表明兩臺主機之間網絡是可達的。
差錯報文類型
差錯報文主要產生于數據傳送發送錯誤的時候,包括:目標不可達(網絡不可達、主機不可達、協議不可達、端口不可達、禁止分片等)、超時、參數問題、重定向(網絡重定向、主機重定向等)等。
IP 路由器無法將 IP 數據包發送給目標地址時,會給發送端主機返回一個目標不可達的 ICMP 消息,并在這個消息中顯示不可達的具體原因,原因記錄在 ICMP 包頭的代碼字段。
ping命令的工作過程
舉一個例子來描述「ping」命令的工作過程:
假設有兩個主機,主機A(192.168.0.1)和主機B(192.168.0.2),現在我們要監測主機A和主機B之間網絡是否可達,在主機A上輸入命令:ping 192.168.0.2
1.發送端主機構建ICMP請求數據包。ping命令會在主機A上構建一個 ICMP的請求數據包。數據包包含多個字段,主要的有類型和序號。類型:在請求數據包中,類型字段為8;序號:主要用于區分連續 ping 的時候發出的多個數據包。
每發出一個請求數據包,序號會自動加 1。為了能夠計算往返時間 RTT,它會在報文的數據部分插入發送時間。
2.IP層構建IP數據包。ICMP協議會將這個數據包以及目標IP(192.168.0.2)等信息一同交給IP層協議。IP層協議得到這些信息后,將源地址(即本機IP)、目標地址(即目標IP:192.168.0.2)、再加上一些其它的控制信息,構建成一個IP數據包。
3.加入MAC地址。需要通過ARP映射表找出目標IP(192.168.0.2)所對應的MAC地址。當拿到了目標主機的MAC地址和本機MAC后,一并交給數據鏈路層,組裝成一個數據幀,依據以太網的介質訪問規則,將它們傳送出出去。
主機B收到數據幀后,進行如下步驟:
1.檢查MAC地址,丟棄或接收,提取IP數據包。當主機B收到這個數據幀之后,會首先檢查它的目標MAC地址是不是本機,如果是就接收下來處理,接收之后會檢查這個數據幀,將數據幀中的IP數據包取出來,交給本機的IP層協議。
2.IP層檢查IP。IP層協議檢查完之后,再將ICMP數據包取出來交給ICMP協議處理。
3.構建ICMP應答包。應答包的類型字段為 0,序號為接收到的請求數據包中的序號。
4.應答數據包回發給主機A。
在一定的時間內,如果主機A收到了應答包,則說明它與主機B之間網絡可達,如果沒有收到,則說明網絡不可達。除了監測是否可達以外,還可以利用應答時間和發起時間之間的差值,計算出數據包的延遲耗時。
課堂練習
關于ICMP協議與ping命令如何工作我們已經了解了,那對于我們在云上搭建的應用,如何測試彈性云服務器間的通信狀況呢?
回憶一下,彈性云服務器數據流量的進出是需要遵守安全組規則的,沒有安全組規則的允許,誰都不能訪問。
那我們就可以在安全組中添加放通ICMP協議的安全組規則,允許其他云服務器通過 ICMP 協議訪問該云服務器,進而實現通過ping命令來測試彈性云服務器間的通信狀況了。
安全組規則配置如下:
原文標題:爆文速遞| 網絡好不好,ping一下就知道
文章出處:【微信公眾號:華為開發者社區】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
通信
+關注
關注
18文章
6069瀏覽量
136294 -
Ping
+關注
關注
0文章
69瀏覽量
16024
原文標題:爆文速遞| 網絡好不好,ping一下就知道
文章出處:【微信號:Huawei_Developer,微信公眾號:華為開發者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論