摘要:在測試和部署網絡通訊應用時,咱們常常會遇到網絡不通的問題,通常都會想到ping一下。本文將帶您瞭解ping命令的做用和原理~
在測試和部署網絡通訊應用時,咱們常常會遇到網絡不通的問題。通常都會想到ping一下。那麼ping命令的做用和原理究竟是什麼呢?html
ping 命令是基於 ICMP 協議來工做的,要明白ping, 先了解下ICMP協議吧~安全
ICMP協議
ICMP全稱爲互聯網控制報文協議(Internet Control Message Protocol)。服務器
那麼具體是怎麼「控制」的呢?網絡
在複雜的網絡傳輸環境裏,數據包經常會遇到各類問題致使傳輸失敗。網絡層的IP協議是一種無鏈接的,不可靠的數據包協議,它並不能保證數據必定被送達,所以,咱們須要其它的協議,在數據包傳發送異常時,能將異常信息傳回來,這樣才能夠調整傳輸策略,以此來控制整個局面。測試
ICMP協議格式
ICMP 協議是經過IP協議來發送的,報文封裝在 IP 包裏面。以下:url
ICMP報文格式:spa
ICMP數據包由8bit的類型字段和8bit的代碼字段以及16bit的校驗字段再加上選項數據組成。.net
ICMP報文大體分爲兩類:查詢報文類型和差錯報文類型。3d
查詢報文類型
查詢報文主要應用於ping查詢、子網掩碼查詢、時間戳查詢等。htm
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收到數據幀後,進行以下步驟:
- 檢查MAC地址,丟棄或接收,提取IP數據包。當主機B收到這個數據幀以後,會首先檢查它的目標MAC地址是否是本機,若是是就接收下來處理,接收以後會檢查這個數據幀,將數據幀中的IP數據包取出來,交給本機的IP層協議。
- IP層檢查IP。IP層協議檢查完以後,再將ICMP數據包取出來交給ICMP協議處理。
- 構建ICMP應答包。應答包的類型字段爲 0,序號爲接收到的請求數據包中的序號。
- 應答數據包回發給主機A。
在必定的時間內,若是主機A收到了應答包,則說明它與主機B之間網絡可達,若是沒有收到,則說明網絡不可達。除了監測是否可達之外,還能夠利用應答時間和發起時間之間的差值,計算出數據包的延遲耗時。
課堂練習
關於ICMP協議與ping命令如何工做咱們已經瞭解了,那對於咱們在雲上搭建的應用,如何測試彈性雲服務器間的通訊情況呢?
回憶一下,彈性雲服務器數據流量的進出是須要遵照安全組規則的,沒有安全組規則的容許,誰都不能訪問。
那咱們就能夠在安全組中添加放通ICMP協議的安全組規則,容許其餘雲服務器經過 ICMP 協議訪問該雲服務器,進而實現經過ping命令來測試彈性雲服務器間的通訊情況了。
安全組規則配置以下:
獲取更多安全組信息,請戳這裏。
本文分享自華爲雲社區《【雲小課】基礎服務第65課 網絡知識一籮筐——網絡好很差,ping一下就知道》,原文做者:雲小萌。