為了更有效的提高ip數據報的成功轉發和交付的效率,在網際層使用了icmp網際控制報文協議,這個協議允許主機和路由器提供差錯和異常情況的報告,icmp不是高層協議,而是網際層的協議,加在ip數據報中一起發出
ICMP的報文種類有ICMP差錯報文和ICMP詢問報文:
差錯報告報文有5種:
(1)終點不可以到達:當路由器和主機不能交付的時候:
(2)源點抑制:當路由器由於網絡擁塞而丟棄的時候
(3)時間超過:當路由器收到生存時間為0的數據報的時候
(4)參數問題:當目的主機發現收到的數據報首部有問題的時候
(5)改變路由:路由器把改變你的路由交付主機,告訴下一次的主機
改變路由:每一個主機都有一個自己的路由表,當該主機發送數據報的時候,他先查看自己的路由表,看看應該從哪一個接口吧數據報發送出去,由於主機的數量過大,主機不會主動去更新自己內部的路由表,所以,在一個新的主機加入的時候,都會加入一個默認的路由,他會將數據報發送給這個默認的路由,這個默認路由知道到達每一個目的·ip的最佳路由,如果發現最佳的轉發路由不是自己,而是另一個,他就用改變路由報文發送黑源主機,源主句就在自己的路由表中加入這個信息
所有的icmp差錯報文都是一樣的,把收到的數據報的首部和數據字段的前8個字節提取出來,在在前面加上ICMP的前8個字節,就構成了ICMP的差錯報告報文。這個作為數據報的數據字段,在加上首部,一起作為ip數據報發送出去。
兩種ICMP詢問報文:
(1)ICMP請求與回答報文:主機和路由器向主機發送一個ICMP請求報文,目的主機發送一個ICMP回答報文,用來測試兩方能否互相通信
(2)ICMP時間戳請求與回答報文:ICMP時間戳報文請某個主機和路由器回答當前的時間,ICMP回答時間戳是一個32位的字段,其中寫入的整數表示從1900/1/1到現在的秒數
ICMP應用ping
(1)ping直接是應用層調用網路層的一個例子,應用ICMP請求與回答報文
連續發送4個icmp請求報文
(2)traceroute:用來跟蹤源主機到目的主機的路徑
是從源主機向目的主機發送的一連串的ip數據報,數據報中封裝的無法交付的UDP用戶數據報(就是使用了非法端口),第一個將生存時間TTL設為1,到達第一個路由,TTL-1=0.路由器直接丟棄,並向源主機發送了ICMP時間超過差錯報文,第二次的TTL生存時間為2,這樣依次進行,知道某個路由接受到的ttl-1=1,那么主機不轉發了,但是因為無法交付,就返回一個ICMP終點不可到達差錯報文。這樣就結束了
並不一定經過的路由器多時間就多,可能路由器少的會發生阻塞