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