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

交換機(jī)無(wú)法Ping通本機(jī)IPv6接口地址問(wèn)題

詳解Linux網(wǎng)絡(luò)管理中的關(guān)鍵命令

使用openmv示例工程連接得上熱點(diǎn),但是ping不到熱點(diǎn)ip,也ping不到baidu.com,怎么解決?
飛凌嵌入式ElfBoard ELF 1板卡-uboot常用命令之網(wǎng)絡(luò)命令
為UART、MCXA142實(shí)現(xiàn)ISP通信的主機(jī)端,發(fā)送Ping數(shù)據(jù)包并收到預(yù)期的響應(yīng),發(fā)送和接收數(shù)據(jù)包的典型順序是什么?
T2081 VSC8572 phy:Ping不起作用的原因?
Linux ip命令常用操作
交換機(jī)常用配置命令
常用linux命令
ADS1291中有個(gè)Offset Calibration的命令起什么作用?
服務(wù)器ping不通但是http能請(qǐng)求成功是什么原因

評(píng)論