ICMP报文格式详解
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                ICMP报文格式详解
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                1 引言
2 ICMP報(bào)文的類型
3 ICMP地址掩請(qǐng)求與應(yīng)答
4 ICMP時(shí)間戳請(qǐng)求與應(yīng)答
5 ICMP端口不可達(dá)差錯(cuò)
1 引言
ICMP經(jīng)常被認(rèn)為是IP層的一個(gè)組成部分。它傳遞差錯(cuò)以及其他需要注意的信息。ICMP報(bào)文通常被IP層或更層協(xié)議(TCP或UDP)使用。一些ICMP報(bào)文把差錯(cuò)報(bào)文返回給用戶進(jìn)程。
ICMP報(bào)文是在IP數(shù)據(jù)報(bào)內(nèi)部被傳輸?shù)模庋b在IP數(shù)據(jù)報(bào)內(nèi)。
關(guān)于ICMP的正式規(guī)范參見RFC792.
在ICMP報(bào)文的格式如圖所示。所有報(bào)文的前4個(gè)字節(jié)都是一樣的,但是剩下的其他字節(jié)則互不相同。下面我們將逐個(gè)介紹各種報(bào)文格式。
類型字段可以有15個(gè)不同的值,以描述特定類型的ICMP報(bào)文。某些ICMP報(bào)文還使用代碼字段的值來進(jìn)一步描述不同的條件。
檢驗(yàn)和字段覆蓋整個(gè)ICMP報(bào)文。
在本章中,我們將一般地討論ICMP報(bào)文,并對(duì)其中一部分作詳細(xì)介紹:地址掩碼請(qǐng)求和應(yīng)答,時(shí)間戳請(qǐng)求和應(yīng)答以及不可達(dá)端口。
2 ICMP報(bào)文類型
各種類型的ICMP報(bào)文如所示,不現(xiàn)類型由報(bào)文中的類型字段和代碼字段來共同決定。
圖中的最后兩列表明了ICMP報(bào)文是一份查詢報(bào)文還是一份差錯(cuò)報(bào)文。因?yàn)閷?duì)ICMP差錯(cuò)報(bào)文有時(shí)需要作特殊處理,因此我們需要對(duì)它們進(jìn)行區(qū)分。例如,在對(duì)ICMP差錯(cuò)文進(jìn)行響應(yīng)時(shí),永遠(yuǎn)不會(huì)生成另一份ICMP差錯(cuò)報(bào)文(如果沒有這個(gè)限制規(guī)則,可能會(huì)遇到一個(gè)差錯(cuò)產(chǎn)生另一個(gè)差錯(cuò)的情況,而差錯(cuò)再產(chǎn)生差錯(cuò),這樣會(huì)無休止地循環(huán)下去)。
當(dāng)發(fā)送一份ICMP差錯(cuò)報(bào)文時(shí),報(bào)文始終包含IP的首部和產(chǎn)生ICMP差錯(cuò)報(bào)文的IP數(shù)據(jù)報(bào)的前8個(gè)字節(jié)。這樣,接收ICMP差錯(cuò)報(bào)文就會(huì)把它與某個(gè)特定的協(xié)議(根據(jù)IP數(shù)據(jù)報(bào)首部中的協(xié)議字段來判斷)和用戶進(jìn)程(根據(jù)包含在IP數(shù)據(jù)報(bào)前8個(gè)字節(jié)中的TCP或UDP報(bào)文首部中的TCP或UDP端口號(hào)來判斷)聯(lián)系起來。
下面各種情況都不會(huì)導(dǎo)致產(chǎn)生ICMP差錯(cuò)報(bào)文:
1)ICMP差錯(cuò)報(bào)文(但是,ICMP查詢報(bào)文可能會(huì)產(chǎn)生ICMP差錯(cuò)報(bào)文)。
2)目的地址是廣播地址或多播地址的IP數(shù)據(jù)報(bào)。
3)作為鏈路層廣播的數(shù)據(jù)報(bào)。
4)不是IP分片的第一片
5)源地址不是單個(gè)主機(jī)的數(shù)據(jù)報(bào)。這就是說,源地址不能為零地址、環(huán)回地址、廣播地址或多播地址。
這些規(guī)則是為了防止過去允許ICMP差錯(cuò)報(bào)文對(duì)廣播分組響應(yīng)所帶來的廣播風(fēng)暴。
3 ICMP地址掩碼請(qǐng)求和應(yīng)答
ICMP地址掩碼請(qǐng)求用于無盤系統(tǒng)在引導(dǎo)過程中獲取自已的子網(wǎng)掩碼。系統(tǒng)廣播它的ICMP請(qǐng)求報(bào)文(這一過程與無盤系統(tǒng)在引導(dǎo)過程中用RARP獲取IP地址是類似的)。無盤系統(tǒng)獲取子網(wǎng)掩碼的另一個(gè)方法是BOOTP協(xié)議。ICMP地址掩碼請(qǐng)求和應(yīng)答報(bào)文的格式如下圖所示
ICMP報(bào)文中的標(biāo)識(shí)符和序列號(hào)字段由發(fā)送端任意選擇設(shè)定,這些值在應(yīng)答中將衩返回。這樣,發(fā)送端就可以把應(yīng)答與請(qǐng)求進(jìn)行匹配。
4 ICMP時(shí)間戳請(qǐng)求與應(yīng)答
ICMP時(shí)間戳請(qǐng)求允許系統(tǒng)向另一個(gè)系統(tǒng)查詢當(dāng)前的時(shí)間。返回的建議值是自午夜開始計(jì)算的毫秒數(shù),協(xié)調(diào)的統(tǒng)一時(shí)間(Coordinated Universal Time,UTC)。這種ICMP報(bào)文的好處是它提供了毫秒級(jí)的分辨率,而利用其他方法從別的主機(jī)獲取的時(shí)間(如某些Unix系統(tǒng)提供的rdate命令)只能提供秒級(jí)的分辨率。由于返回的時(shí)間是從午夜開始計(jì)算的,因此調(diào)用者必須通過其他方法獲知當(dāng)時(shí)的日期,這是它的一個(gè)缺陷。
ICMP時(shí)間戳請(qǐng)求和應(yīng)答報(bào)文格式如下圖所示。
請(qǐng)求端填寫發(fā)起時(shí)間戳,然后發(fā)送報(bào)文。應(yīng)答系統(tǒng)收到請(qǐng)求報(bào)文時(shí)間填寫接收時(shí)間戳,在發(fā)送應(yīng)答時(shí)填寫發(fā)送時(shí)間戳。但是,實(shí)際上,大多數(shù)的實(shí)現(xiàn)把后面兩個(gè)字段都設(shè)成相同的值。
另一種方法獲取時(shí)間和日期。
1)日期服務(wù)程序和時(shí)間服務(wù)程序。前者是以以人們可讀的格式返回當(dāng)前的時(shí)間和日期,是一行ASCII字符。可以用telnet命令來驗(yàn)證這個(gè)服務(wù),時(shí)間服務(wù)程序返回的是一個(gè)32位的二進(jìn)制數(shù)值,表示UTC,1900年1月1日午夜起算的秒數(shù)。這個(gè)程序是以秒為單位提供的日期和時(shí)間。
2)嚴(yán)格的計(jì)時(shí)器使用網(wǎng)絡(luò)時(shí)間協(xié)議(NTP),該協(xié)議在RFC 1305中給出了描述。這個(gè)協(xié)議采用先進(jìn)的技術(shù)來保證LAN或WAN上的一組系統(tǒng)時(shí)鐘誤差在毫秒級(jí)以內(nèi)。
3)開放軟件基金會(huì)(OSF)的分布式計(jì)算環(huán)境(DCE)定義了分布式時(shí)間服務(wù)(DTS),它也提拱計(jì)算機(jī)之間的時(shí)鐘同步。
4)伯克利大學(xué)的Unix系統(tǒng)提供守護(hù)程序(time(8)),來同步局域網(wǎng)上的系統(tǒng)時(shí)鐘。不像NTP和DTS,timed不在廣域網(wǎng)范圍內(nèi)工作。
5 ICMP端口不可達(dá)差錯(cuò)
端口不可達(dá)報(bào)文,它是ICMP目的不可到達(dá)報(bào)文中的一種,以此來看看ICMP差錯(cuò)報(bào)文中所附加的信息。使用UDP來查看它。
UDP的規(guī)則之一是,如果收到一份UDP數(shù)據(jù)報(bào)而目的端口與某個(gè)正在使用的進(jìn)程不相符,那么UDP返回一個(gè)不可達(dá)報(bào)文。可以用TFTP來強(qiáng)制生成一個(gè)端口不可達(dá)報(bào)文。
總結(jié)
以上是生活随笔為你收集整理的ICMP报文格式详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: strsep的作用
 - 下一篇: SEO优化中关键词布局怎么做