面試題-----ICMP協議簡介


ICMP協議簡介

l  ICMP網際控制報文協議,通過它可以知道故障的具體原因和位置。

l  由於IP不是為可靠傳輸服務設計的,ICMP的目的主要是用於在TCP/IP網絡中發送出錯和控制消息。

l  ICMP的錯誤報告只能通知出錯數據包的源主機,而無法通知從源主機到出錯路由中途所的所有路由器。

l  ICMP數據包是封裝在IP數據包中的。

l  網絡層的協議有:ICMP、IGMP、IP、RARP、ARP。

 

l  ICMP報文的種類有三種,即ICMP差錯報告報文、控制報文、請求/應答報

 

 

報告IP數據報在傳輸層中的差錯是ICMP報文的最基本的功能,ICMP差錯報文有如下特點:

l  ICMP差錯報文都是右路由器發送到源主機的,因為IP數據報中含有源主機的IP地址,報告給源主機是最可行的方案,另外,發出IP數據報的源主機最需要知道數據是否達到目標主機。

l  ICMP差錯報文只提供IP數據報在傳輸過程中的差錯報告,並不規定對各類差錯采取什么樣的處理措施。具體對差錯的處理,由收到ICMP差錯報文的源主機將相應的差錯與應用程序聯系起來才能進行相應的差錯處理。

l  ICMP差錯報文不享受任何優先權,也沒有特別的可靠性保證措施,與普通的IP數據報一樣進行傳輸,傳輸過程中可能被丟失、損壞,誰知被拋棄。

l  ICMP差錯報文是伴隨着拋棄出錯的IP數據報而產生的。

l  當路由器發送一份參數錯誤等的ICMP差錯報文時,ICMP報文數據區始終包含產生ICMP差錯報文的IP數據報的頭部和其數據區的前8個字節。

l  在有些情況下,為了防止在網絡中產生大量的ICMP差錯報文(廣播風暴),影響網絡的正常工作,即使發生錯誤,也不會產生ICMP差錯報文,這些情況包括:

  1. ICMP發生差錯。這是為了避免差錯報文無休止產生(但是ICMP查詢報文可能產生ICMP差錯報文)
  2. 目的地址是廣播或者多播地址(D類地址)的IP數據報。
  3. 作為鏈路層廣播的數據報
  4. 不是IP分片的第一片
  5. 原地址不是單個主機的數據報。這就是說,源地址不能為零地址、會送地址、廣播地址或多播地址。

 

ICMP控制報文

擁塞控制與源站抑制報文
當一個路由器接收IP數據報的速度比其處理IP數據報的速度快,或者一個路由器傳入數據報的速率大於傳出數據報的速率時,就會產生擁塞現象。
這時路由器可以通過發送源站抑制報文來抑制源主機發送IP數據報的速率,避免可能產生的差錯。
源站抑制技術進行擁塞控制的方法如下

  1. 當路由器放生擁塞時,便發出ICMP源站抑制報文。
  2. 源主機收到抑制報文后,按一定的速率降低發往目標主機的數據傳輸率。
  3. 如果在一定時間間隔內源主機沒有收到抑制報文,便認為擁塞已經解除,源主機可以之間恢復到原來數據報的流量。

路由控制與重定向報文
假如源主機要向目標主機發送IP數據報,源主機默認路由是路由器1,則源主機先把IP數據報送到路由器1,再由路由器1進行路由選擇。路由器1經過選路后,把IP數據報送到路由器2。
同時路由器1也發現源主機要發送到目標主機的IP數據報以后可以直接發送到路由器2(因為路由器1和路由器2在同一個網絡中)則由路由器1向源主機發送一個ICMP重定向報文,告訴它可以直接把IP數據報送到路由器2。這樣,就使源主機始終保持着一個動態的、既小且優的路徑表。

請求與應答報文
典型的有:ping程序使用回顯請求和應答報文來確定一台主機是否可達;Tracert(linux下是traceroute)程序來確定通過網絡的路由。

n  ping直接使用ICMP,沒有使用TCP或UDP

 

 

n  tracert使用ICMP和UDP

  1. IP首部有個字段叫生存時間
    生存時間:IP報文所允許通過的路由器的最大數量。每經過一個路由器,TTL減1,當為0時,路由器將該數據報丟棄。TTL 字段是由發送端初始設置一個 8 bit字段.推薦的初始值由分配數字 RFC 指定,當前值為 64。發送 ICMP 回顯應答時經常把 TTL 設為最大值 255。
  2. Tracert 命令用 IP 生存時間 (TTL) 字段和 ICMP 錯誤消息來確定從一個主機到網絡上其他主機的路由(在判斷是否達到目的主機時使用了UDP)。
    首先,tracert送出一個TTL是1的IP 數據包到目的地,當路徑上的第一個路由器收到這個數據包時,它將TTL減1。此時,TTL變為0,所以該路由器會將此數據包丟掉,並送回一個「ICMP time exceeded」消息(包括發IP包的源地址,IP包的所有內容及路由器的IP地址),tracert 收到這個消息后,便知道這個路由器存在於這個路徑上,接着tracert 再送出另一個TTL是2 的數據包,發現第2 個路由器...... tracert 每次將送出的數據包的TTL 加1來發現另一個路由器,這個重復的動作一直持續到某個數據包 抵達目的地。當數據包到達目的地后,該主機則不會送回ICMP time exceeded消息,一旦到達目的地,由於tracert通過UDP數據包向不常見端口(30000以上)發送數據包,因此會收到「ICMP port unreachable」消息,故可判斷到達目的地。


免責聲明!

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



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