ICMP:internet控制報文協議 PING


ICMP概念:

由圖可知ICMP其實比IP層是要高一級的,但是此處將其放在IP層

ICMP種類由八位類型決定有的還需要8位代碼

ICMP報文分類:

1:差錯報文

為了避免過去允許ICMP差錯保溫對廣播分組相應所帶來的廣播風暴

1.1 ICMP端口不可達

類型(類型3:代表不可達差錯報文)|代碼(0-15)|校驗和(與IP首部校驗和計算方法相同)|未用(必須為0)|

IP首部(包括選項)+原始IP數據報中數據的前八字節

舉一個例子,在tftp中,UDP的公共端口號通常是69,但是tftp允許利用connect鏈接到一個不同的端口,當利用此端口號去找目的主機的端口的時候,就會發生端口不可達的錯誤,此時利用ICMP報文,傳達一個端口不可達的信息

列如


會發現並沒有這個報文(在這里其實百度並沒有tftp)

並且利用tcpdump觀看會看到

返回的ICMP差錯報文

1.2ICMP主機與網絡不可達


sun % netstat -rn

Rounting tables

Destination                                        gateway                    Flags          Refcnt         Use         Interface

140.252.13.65                                   140.252.13.35            UGH  (正在使用該路由的進程)    (發送的分組)  接口

127.0.0.1                                           127.0.0.1                    UH

140.252.1.183注意這是點對點的另一端IP                   140.252.1.29(這就是本機的另一個端口)              UH(分析,可用U,用H是因為目的端是一個主機,而沒有G是因為140.252.1.29是一個接口不是網關

default                                               140.252.1.183            UG

140.252.13.32(以太網)140.252.13.33(出口)            U

在這里當SLIP線路被拔掉的時候3,4行就會消失(因為這兩行是SLIP軟件啟動的時候自動創建的,當SLIP不存在的時候自動取消)

所以當有

svr4% ping gemini

svr4>gemini:icmp:echo request

sun>svr4:icmp:host gemini unreachable

主機不可達,因為找不到路由

類型(類型3:代表目的不可達)|代碼(1,代表主機不可達)|校驗和(與IP首部校驗和計算方法相同)|未用(必須為0)|

IP首部(包括選項)+原始IP數據報中數據的前八字節

1.3ICMP不可達報文(需要分片)

類型(類型3:代表目的不可達)|代碼(4,因為設置了IP層不允許分片位,所以對超過了MTU的IP報文不能進行分片,所以發生不可達)|校驗和(與IP首部校驗和計算方法相同)|未用(必須為0。4個字節)|下一站網絡MTU|IP首部(包括選項)+原始IP數據報中數據的前八字節


列如在solaris上面對bsdi發送600字節的數據報(ICMP請求回顯報文),可以利用ping程序指定發送字節數,

列如在solaris上面發送數據

solaris > bsdi:icmp:echo request(DF)設置了不分片標志

bsdi > solaris:icmp :echo reply(DF)

sun>bsdi:icmp :solaris unreachable - need to frag mtu = 0(DF)

在bsid上面利用tcpdump上面觀察

1.4ICMP重定向錯誤

類型(類型5:重定向)|代碼(0默認)|校驗和(與IP首部校驗和計算方法相同)|應該使用的路由器IP地址|

IP首部(包括選項)+原始IP數據報中數據的前八字節

概念

重定向是如何發生的:比如主機要發送一份文檔給R2,但是R1是主機的默認路由,發給R1后,R1將數據報發送給R2,在發送的時候會發現,數據報接受的端口和發送時候的端口是一致的,因此R1發送ICMP重定向報文

比如說本來有這么一條

Destination                                        gateway                    Flags          Refcnt         Use         Interface

default                                   140.252.1.4            UG  (正在使用該路由的進程)    (發送的分組)  接口

本來只有這一條默認的,現在則應該加上一條重定向的路由表項

140.252.13.35                        140.252.1.183    UGHD 

D:表示是一個ICMP重定向的路由條目
1.5ICMP源站抑制差錯

類型(類型4:ICMP源站抑制差錯)|代碼(0)|校驗和(與IP首部校驗和計算方法相同)|未用(4字節)|IP首部(包括選項)+原始IP數據報中數據的前八字節

概念,比如說從一個以太網局域網中發送數據給internet上面主機數據,途中經過點對點鏈路,由於點對點鏈路速度緩慢,發送的速度小於接受的速度,這就可能造成接受的路由器發送ICMP源站抑制差錯報文

2:查詢報文

2.1ICMP地址掩碼請求與應答

類型(類型17:ICMP地址掩碼請求/類型18:ICMP地址掩碼應答)|代碼(0)|校驗和(與IP首部校驗和計算方法相同)|標志符|序列號|32位地址掩碼

假定icmpaddrmask能夠發送ICMP地址掩碼請求

icmpaddrmask 140.252.13.63(是一個廣播地址)

received mask=ffffffe0,from 140.252.13.33 來自本機

received mask=ffffffe0,from 140.252.13.35 來自bsdi

其中發送是廣播發送的,但是應答不是廣播發送的

2.2CMP時間戳請求於應答

類型(類型13:時間戳請求/類型14:ICMP時間戳應答)|代碼(0)|校驗和(與IP首部校驗和計算方法相同)|標志符|序列號|發起時間戳(請求端填寫發起時間戳)|接收時間戳(應答系統收到的時候填寫)|傳送時間戳(應答系統發送的時候填寫,不過經常傳送和接收時間戳相同)

作用可以獲得時間

2.3PING程序

類型(類型0:回顯應答/類型8:回顯請求)|代碼(0)|校驗和(與IP首部校驗和計算方法相同)|標志符(設置成發送進程ID這樣運行多個ping程序也可以識別)|序列號(每發送一次新的回顯就加1)|選項數據

2.3.1概念:PING並不是一個用戶進程,他是在內核中直接實現的,他是一種盡力而為的數據報傳送服務,因此可能發生分組的丟失,重復,失序

2.3.2PING程序實際操作

第二張圖為tcpdump抓取指令所收到的,分析,ICMP請求報文,id2761,序列號27,length 98=以太網頭部14個字節+ip數據報頭部20個字節+ICMP報文64個字節(8字節的頭部和56字節的數據)

56byte of data是指ICMP有56個數據,下面加上8個字節即為ICMP數據報長度,所以發送的是64個字節

icmp_seq指的是ICMP回顯的序列,27(同一個請求和回顯序列號相同),長度是64

time是指的往返時間,在發送的時候PING程序會在ICMP報文中存放發送時間,當接到回顯應答的時候,將此刻的時間減去發送時間即能得到往返時間

注意當緩存中沒有ARP緩存的時候,會在ping程序發送ICMP請求回顯報文之前發送一份ARP請求報文,所以按照PING時間計算方法,時間會加長

2.3.2 ping記錄路由選項功能 是開啟IP數據報的RR選項

ping -R www.baidu.com 顯示所經過的路由器 

記錄選項格式

code(指明IP選項類型)|len(選項長度,一般是39,可以記錄9個IP記錄)|ptr(指針指向第幾個IP路由)|(IP addr #1)|(IP addr #2)|IP addr #3(<-ptr=12).......|(IP addr #4)<-ptr=40

解釋10:31:11.497395 0c:8b:fd:34:db:86 > 58:44:98:f8:a0:0c, ethertype IPv4 (0x0800), length 138

138是指ip數據報加上以太網頭部總長度

 (tos 0x0, ttl 64, id 8146, offset 0, flags [DF], proto ICMP (1), length 124:長度是指以IP數據報長度

options (NOP,RR 192.168.43.146, 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0 0.0.0.0)RR選項記錄詳細

 192.168.43.146 > 112.80.248.73: ICMP echo request, id 3918, seq 22, length 64:64是指ICMP保溫長度

注意只能記錄9個,ping外網沒用,內網ok!!!!

2.4ICMP路由器發現報文

類型(10:路由器請求報文)|代碼(0)|校驗和|(未用,設置為0)->為總共八個字節

一般認為主機在引導以后要廣播或者多播一份路由器請求報文

2.5ICMP路由器應答報文

類型(9:路由器應答報文)|代碼(0)|校驗和|地址數(后續有多少個地址)|地址項長度(默認為2)|生存時間(秒數)|路由器地址【1】|優先級【1】(表示作為默認地址的優先級。。。都是默認地址!!!!)

一般情況下,路由器會隨機發送路由器應答報文!!!!









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM