ICMP报文分析
一.概述:
1.???ICMP同意主機(jī)或路由報告差錯情況和提供有關(guān)異常情況。ICMP是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議,但I(xiàn)CMP不是高層協(xié)議,而是IP層的協(xié)議。通常ICMP報文被IP層或更高層協(xié)議(TCP或UDP)使用。一些ICMP報文把差錯報文返回給用戶進(jìn)程。
2.???ICMP報文作為IP層數(shù)據(jù)報的數(shù)據(jù),加上數(shù)據(jù)報的首部,組成數(shù)據(jù)報發(fā)送出去。
3.???ICMP報文的種類有兩種,即ICMP差錯報告報文和ICMP詢問報文。
二.ICMP報文的格式
1.???類型:占8位
2.???代碼:占8位
3.???檢驗和:占16位
說明:ICMP全部報文的前4個字節(jié)都是一樣的,可是剩下的其它字節(jié)則互不同樣。
4.???其它字段都ICMP報文類型不同而不同。
1>? ICMP報文的前4個字節(jié)是統(tǒng)一的格式,共同擁有三個字段:即類型,代碼和檢驗和。
2>? 8位類型和8位代碼字段一起決定了ICMP報文的類型。
類型8,代碼0:表示回顯請求(ping請求)。
類型0,代碼0:表示回顯應(yīng)答(ping應(yīng)答)
類型11,代碼0:超時
3>16位的檢驗和字段:包含數(shù)據(jù)在內(nèi)的整個ICMP數(shù)據(jù)包的檢驗和;其計算方法和IP頭部檢驗和的計算方法一樣的。
ICMP報文詳細(xì)分為查詢報文和差錯報文(對ICMP差錯報文有時須要做特殊處理,因此要對其進(jìn)行區(qū)分。如:對ICMP差錯報文進(jìn)行響應(yīng)時,永遠(yuǎn)不會生成還有一份ICMP差錯報文,否則會出現(xiàn)死循環(huán))
三.ICMP差錯報文(56字節(jié))
1.???ICMP差錯報告報文共同擁有5種
1>? 終點(diǎn)不可達(dá):終點(diǎn)不可達(dá)分為:網(wǎng)絡(luò)不可達(dá),主機(jī)不可達(dá),協(xié)議不可達(dá),port不可達(dá),須要分片但DF比特已置為1,以及源路由失敗等六種情況,其代碼字段分別置為0至5。當(dāng)出現(xiàn)以上六種情況時就向源站發(fā)送終點(diǎn)不可達(dá)報文。
說明:
port不可達(dá):UDP的規(guī)則之中的一個是:假設(shè)收到UDP數(shù)據(jù)報并且目的port與某個正在使用的進(jìn)程不相符,那么UDP返回一個ICMP不可達(dá)報文。
2>? 源站抑制:當(dāng)路由器或主機(jī)因為擁塞而丟棄數(shù)據(jù)報時,就向源站發(fā)送源站抑制報文,使源站知道應(yīng)當(dāng)將數(shù)據(jù)報的發(fā)送速率放慢。
3>? 時間超過:當(dāng)路由器收到生存時間為零的數(shù)據(jù)報時,除丟棄該數(shù)據(jù)報外,還要向源站發(fā)送時間超過報文。當(dāng)目的站在預(yù)先規(guī)定的時間內(nèi)不能收到一個數(shù)據(jù)報的全部數(shù)據(jù)報片時,就將已收到的數(shù)據(jù)報片都丟棄,并向源站發(fā)送時間超過報文。
4>? 參數(shù)問題:當(dāng)路由器或目的主機(jī)收到的數(shù)據(jù)報的首部中的字段的值不對時,就丟棄該數(shù)據(jù)報,并向源站發(fā)送參數(shù)問題報文。
5>? 改變路由(重定向)路由器將改變路由報文發(fā)送給主機(jī),讓主機(jī)知道下次應(yīng)將數(shù)據(jù)報發(fā)送給另外的路由器。
說明:
下面幾種情況都不會導(dǎo)致產(chǎn)生ICMP差錯報文
1>ICMP差錯報文(可是,ICMP查詢報文可能會產(chǎn)生ICMP差錯報文)
2>目的地址是廣播地址或多播地址的IP數(shù)據(jù)報
3>作為鏈路層廣播的數(shù)據(jù)報
4>不是IP分片的第一片
5>源地址不是單個主機(jī)的數(shù)據(jù)報。即源地址不能為零地址、環(huán)回地址、廣播地址或多播地址。
這些規(guī)則是為了防止過去同意ICMP差錯報文對廣播分組響應(yīng)所帶來的廣播風(fēng)暴。
2.全部的ICMP差錯報告報文中的數(shù)據(jù)字段都具有同樣的格式。將收到的須要進(jìn)行差錯報告IP數(shù)據(jù)報的首部和數(shù)據(jù)字段的前8個字節(jié)提取出來,作為ICMP報文的數(shù)據(jù)字段。再加上響應(yīng)的ICMP差錯報告報文的前8個字節(jié),就構(gòu)成了ICMP差錯報告報文。提取收到的數(shù)據(jù)報的數(shù)據(jù)字段的前8個字節(jié)是為了得到運(yùn)輸層的port號(對于TCP和UDP)以及運(yùn)輸層報文的發(fā)送序號(對于TCP)。
注:一下情況不發(fā)送ICMP差錯報告報文
三.ICMP詢問報文(40字節(jié))
1.ICMP詢問報文有四種回送請求和回答,時間戳請求和回答,掩碼地址請求和回答,以及路由器詢問和通過。
1>ICMP回送請求報文是由主機(jī)或路由器向一個特定的目的主機(jī)發(fā)出的詢問。收到此報文的機(jī)器必須給源主機(jī)發(fā)送ICMP回送應(yīng)答報文。這樣的詢問報文用來測試目的站是否可達(dá)以及了解其有關(guān)狀態(tài)。
2>ICMP時間戳請求同意系統(tǒng)向還有一個系統(tǒng)查詢當(dāng)前的時間。該ICMP報文的優(yōu)點(diǎn)是它提供了毫秒級的分辨率,而利用其它方法從別的主機(jī)獲取的時間僅僅能提供秒級的分辨率。請求端填寫發(fā)起時間,然后發(fā)送報文。應(yīng)答系統(tǒng)收到請求報文時填寫接收時間戳,在發(fā)送應(yīng)答時填寫發(fā)送時間戳。大多數(shù)的實現(xiàn)是把后面兩個字段都設(shè)成同樣的值。
3>主機(jī)使用ICMP地址掩碼請求報文可向子網(wǎng)掩碼server得到某個接口的地址掩碼。系統(tǒng)廣播它的ICMP請求報文。ICMP報文中的標(biāo)識符和序列號字段由發(fā)送端隨意選擇設(shè)定,這些值在應(yīng)答中將被返回,這樣,發(fā)送端就能夠把應(yīng)答與請求進(jìn)行匹配。
4>主機(jī)使用ICMP路由器詢問和通過報文可了解連接在本網(wǎng)絡(luò)上的路由器是否正常工作。主機(jī)將路由器詢問報文進(jìn)行廣播(或多播)。收到詢問報文的一個或幾個路由器就使用路由器通過報文廣播其路由選擇信息
四.Ping程序
1.概述
1>Ping程序是為了測試還有一臺主機(jī)是否可達(dá)。該程序發(fā)送一份ICMP回顯請求報文給主機(jī),并等待返回ICMP回顯應(yīng)答。
2>Ping程序還能測出到這臺主機(jī)的往返時間,以表明該主機(jī)離我們有多遠(yuǎn)。
2.我們將發(fā)送回顯請求的ping程序為客戶,而稱被ping的主機(jī)為server。
3.ICMP回顯請求和回顯應(yīng)答報文格式:
1>Unix系統(tǒng)在實現(xiàn)ping程序時把ICMP報文中的標(biāo)識符字段置成發(fā)送進(jìn)程的ID號。這樣即使在同一臺主機(jī)上同一時候執(zhí)行了多個ping程序?qū)嵗?#xff0c;ping程序也能夠識別出返回的信息。
2>序列號從0開始,每發(fā)送一次新的回顯請求就加1。ping程序打印出返回的每一個分組的序列號,同意我們查看是否有分組丟失,失序或反復(fù)。.
3>ping程序通過在ICMP報文中存放發(fā)送請求的時間值來計算往返時間。當(dāng)應(yīng)答返回時,用當(dāng)前時間減去存放在ICMP報文中的時間值,即是往返時間。
4>當(dāng)返回ICMP回顯應(yīng)答時,要打印出序列號和TTL,并計算往返時間。TTL位于IP首部的生存時間字段。ping程序通過在ICMP報文數(shù)據(jù)段中存放發(fā)送請求的時間值來計算往返時間。當(dāng)應(yīng)答返回時,用當(dāng)前時間減去存放在ICMP報文中的時間值,即是往返時間。
轉(zhuǎn)載于:https://www.cnblogs.com/yxwkf/p/3816489.html
總結(jié)
- 上一篇: 东方显圣在佛教里是哪位
- 下一篇: 求一个qq网名男生好听