基本定義
1:ICMP是為了解決兩大問題
反饋分組傳送和到達中出現的各種錯誤
查詢主機或路由器信息
2:ICMP是網路層協定,但它不直接傳遞給下層(數據鏈路層),而是被封裝為IP數據報傳遞給下層
3:在IP數據報中,協定欄位為1則為ICMP報文
功能分類
ICMP報文分為差錯報告報文和查詢報文,
1:差錯報告報文
1:差錯報告報文總是發給數據源站,以下4中情況不產生ICMP報文
(1):攜帶ICMP的數據報不再產生ICMP報文
(2):若數據報進行了分片,只有第一個分片能產生ICMP報文
(3):多播地址的數據報,不產生ICMP報文
(4):特殊地址(如127.0.0.0或0.0.0.0)不產生ICMP報文
2:ICMP差錯報告報文含有出現差錯原始數據報的首部和數據部分的前8個位元組,這8個位元組可以提供傳輸層(TCP或UDP)關於數據報出錯部分相關信息,如連線埠號(TCP和UDP)和序號
3::差錯報文類別有
(1):終點不可達:原因可能有網路不可達,主機不可達,連線埠不可達,協定不可達等,有些是路由器發出,有些是目的主機發出,但即使源點沒有收到終點不可達ICMP,也不能確定目的主機已經收到了數據報,因為如乙太網這樣的網路,沒有數據報確認機制,必須由上層確認
(2):源點抑制:源點抑制提供了擁塞控制,當路由器或者主機因擁塞丟棄數據報時,每個被丟棄的數據報都要向源點傳送源點抑制報文
源點抑制作用有:
1:告訴源點數據報被丟棄
2:要求源點放慢發包速度.
說明:
1:沒有一種機制告訴源點擁塞已經得到緩解,源點只有不斷放慢發包速度,直到不再收到源點抑制數據報
2:在多對1發包的情況下,傳送方速度不一致,產生擁塞後,路由器或目的主機不知道那個源點該對擁塞負責,他們只知道向被丟棄的數據報源點傳送ICMP
(3):逾時:有兩種情況:
1:生存時間(實際是跳數)遞減為0,數據報被丟棄,向源點傳送ICMP逾時報文,這種報文只有可能是路由器傳送
2:當目的主機收到一個分片時,就會啟動一個分片計時器,如果計時器內分片沒完全到達,則傳送逾時報文並丟棄已經收到的所有分片
(4):參數問題:數據報首部出現錯誤或者首部缺少一些選項傳送此報文,主機和路由器都可能傳送此報文
(5):改變路由(非常重要):路由器要經常更新自己的路由表,網路上主機的數量遠遠大於路由器的數量,如果主機也動態更新,將產生無法忍受的通信量,所以主機使用靜態路由選擇,一般情況下,開始時主機只知道默認路由地址,IP數據報將被傳送到默認路由器,但也許此數據報應該被發到另外的路由器,默認路由器知道這種情況後,轉發此數據報,並向源點傳送改變路由ICMP,讓主機刷新自己的路由表,主機的路由表通過這種方式進行更新
說明:改變路由是唯一一個不會丟棄數據報的差錯報告報文
2:查詢報文
1:此報由源點發出,再由目的點以指定的格式進行回答
2:查詢報文類別有:
(1):回送請求與回答:一般用於源主機或源路由器判斷目的主機或目的路由器能否與其通信,主機和路由器都能傳送此報文,此報文包括了回送請求報文和回送回答報文,ping命令便是此報文
(2):時間戳請求和回答:包括時間戳請求報文和時間戳回答報文,它能夠確定IP數據報在兩台機器的往返時間,即使兩個路由器本地時間不同步,但他們的往返時間仍然是精確的,具體計算方法參考書上