作者 | 向閑
小編 | 不吃豬頭肉
引言
在車載以太網(wǎng)測試中,因?yàn)镮P協(xié)議本身提供的是不可靠傳輸,所以如果網(wǎng)絡(luò)出現(xiàn)丟包、網(wǎng)絡(luò)錯(cuò)誤等問題就需要及時(shí)向管理者報(bào)告錯(cuò)誤和狀態(tài)信息,此時(shí)就需要借助ICMP協(xié)議來實(shí)現(xiàn)這一功能。
什么是ICMPv4協(xié)議
ICMP協(xié)議全稱是Internet Control Message Protocol,即互聯(lián)網(wǎng)控制報(bào)文協(xié)議。其中,ICMPv4和ICMPv6分別指用于IPv4和IPv6的ICMP版本。目前在車載以太網(wǎng)里常用到的IP協(xié)議是IPv4,所以本文著重介紹ICMPv4,ICMPv6不涉及。
ICMPv4協(xié)議是TCP/IP協(xié)議簇的一個(gè)子協(xié)議,封裝在IPv4報(bào)文中,主要用于在IPv4主機(jī)、路由器之間傳遞控制消息,用于報(bào)告網(wǎng)絡(luò)通不通、主機(jī)是否可達(dá)、路由是否可用等網(wǎng)絡(luò)本身的消息。這些控制消息雖然并不傳輸用戶數(shù)據(jù),但是對(duì)于收集各種網(wǎng)絡(luò)信息、診斷和排除各種網(wǎng)絡(luò)故障以及用戶數(shù)據(jù)的傳遞起著重要的作用。
ICMPv4報(bào)文格式
ICMPv4報(bào)文封裝在IPv4數(shù)據(jù)報(bào)里,所以一個(gè)ICMPv4報(bào)文會(huì)包括IPv4頭部、ICMPv4頭部和ICMPv4 Payload。當(dāng)IPv4頭部的Protocol值為1時(shí),表示為一個(gè)ICMPv4報(bào)文。
ICMPv4報(bào)頭格式如下圖:
ICMP報(bào)頭格式
類型(Type):ICMPv4報(bào)文的類型,如目標(biāo)不可達(dá)報(bào)文(Type=3)。代碼(Code):ICMPv4報(bào)文類型(Type)下細(xì)化的子類型,如對(duì)于目標(biāo)不可達(dá)報(bào)文(Type=3),code=1表示主機(jī)不可達(dá),code=2表示協(xié)議不可達(dá)。校驗(yàn)和(Checksum):ICMPv4報(bào)文的校驗(yàn)和,校驗(yàn)方法與IP數(shù)據(jù)報(bào)首部校驗(yàn)和算法相同。
報(bào)文分類
ICMPv4分為兩類報(bào)文,1類是查詢報(bào)文(通過對(duì)對(duì)端主機(jī)發(fā)送請(qǐng)求和接收對(duì)端主機(jī)發(fā)送響應(yīng)的方式去傳輸消息,可以用來報(bào)告網(wǎng)絡(luò)連通性等消息),1類是差錯(cuò)報(bào)文(報(bào)告IP數(shù)據(jù)報(bào)在傳輸過程中出現(xiàn)的錯(cuò)誤)。
常見的ICMPv4報(bào)文類型
響應(yīng)請(qǐng)求
平時(shí)使用較多的Ping命令就是通過對(duì)端主機(jī)發(fā)送回顯請(qǐng)求(Type=8)和接收對(duì)端主機(jī)發(fā)送的回顯回答(Type=0)去判斷主機(jī)之間是否通信連通。
實(shí)際測試數(shù)據(jù)如下:
目標(biāo)不可達(dá)
當(dāng)路由器無法根據(jù)路由表轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)到指定的目標(biāo)地址時(shí),會(huì)向發(fā)送端主機(jī)返回一個(gè)目標(biāo)不可達(dá)的差錯(cuò)報(bào)文,并報(bào)告不可達(dá)的原因。常見的目標(biāo)不可達(dá)差錯(cuò)報(bào)文類型有網(wǎng)絡(luò)不可達(dá)(Code=0)、主機(jī)不可達(dá)(Code=1)、協(xié)議不可達(dá)(Code=2)、端口不可達(dá)(Code=3)等。
實(shí)際測試數(shù)據(jù)如下:
時(shí)間戳
時(shí)間戳請(qǐng)求報(bào)文(Type=13)和時(shí)間戳應(yīng)答報(bào)文(Type=14)用于測試兩臺(tái)主機(jī)之間數(shù)據(jù)報(bào)來回一次的傳輸時(shí)間。傳輸時(shí),主機(jī)填充原始時(shí)間戳,接收方收到請(qǐng)求后填充接收時(shí)間戳后以Type=14的報(bào)文格式返回,發(fā)送方計(jì)算這個(gè)時(shí)間差。
實(shí)際測試數(shù)據(jù)如下:
參數(shù)錯(cuò)誤報(bào)文
一旦路由器或主機(jī)發(fā)現(xiàn)錯(cuò)誤的數(shù)據(jù)報(bào)首部和錯(cuò)誤的數(shù)據(jù)報(bào)選項(xiàng)參數(shù)時(shí),便丟棄該數(shù)據(jù)報(bào),并向源主機(jī)發(fā)送參數(shù)問題(Parameter Problem)報(bào)文(Type=12)。代碼Code=0表示數(shù)據(jù)報(bào)首部中的某個(gè)字段的值有錯(cuò)或不明確,這時(shí)ICMP報(bào)文首部的指針指向數(shù)據(jù)報(bào)中有問題的字節(jié)。
實(shí)際測試數(shù)據(jù)如下:
下表是完整的ICMP報(bào)文分類:
應(yīng)用
ICMPv4最常見的用法是對(duì)網(wǎng)絡(luò)進(jìn)行測試和故障診斷,常用的程序是Ping 和tracert。
1)Ping
使用ping命令確定本地主機(jī)是否能與另一臺(tái)主機(jī)成功交換數(shù)據(jù)包,再根據(jù)返回的信息,就可以推斷TCP/IP參數(shù)是否設(shè)置正確,以及運(yùn)行是否正常、網(wǎng)絡(luò)是否通暢等。
2)tracert
tracert 命令主要用來顯示數(shù)據(jù)包到達(dá)目的主機(jī)所經(jīng)過的路徑。通過執(zhí)行一個(gè)tracert到對(duì)方主機(jī)的命令,返回?cái)?shù)據(jù)包到達(dá)目的主機(jī)所經(jīng)歷的路徑詳細(xì)信息,并顯示每個(gè)路徑所消耗的時(shí)間。
總結(jié)
ICMP協(xié)議是TCP/IP協(xié)議簇中不可或缺的一部分。通過理解和應(yīng)用ICMP協(xié)議,可以更好地幫助管理員去收集各種網(wǎng)絡(luò)信息、診斷和排除各種網(wǎng)絡(luò)故障。
-
互聯(lián)網(wǎng)
+關(guān)注
關(guān)注
54文章
11148瀏覽量
103226 -
ICMP
+關(guān)注
關(guān)注
0文章
52瀏覽量
14923 -
車載以太網(wǎng)
+關(guān)注
關(guān)注
18文章
220瀏覽量
22986 -
報(bào)文
+關(guān)注
關(guān)注
0文章
38瀏覽量
4027
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論