1. 程式人生 > >TCP/IP詳解--ICMP 控制報文和差錯報文 Tracerouter 命令的過程

TCP/IP詳解--ICMP 控制報文和差錯報文 Tracerouter 命令的過程

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

一。為什麼需要ICMP?

因為IP協議不提供可靠性且不能保證資訊傳遞,因此發生問題時,通知傳送人是很重要的。(IP協議是一種不可靠的協議,無法進行差錯控制。但IP協議可以藉助其他協議來實現這一功能,如ICMP)

。什麼是ICMP? 

ICMP: Internet Control Message Protocol 即Internet訊息控制協議。ICMP報文分為兩種型別(1)ICMP差錯報告報文  (2)ICMP詢問報文

 ICMP差錯報告報文共有5種

1、終點不可達:終點不可達分為:網路不可達,主機不可達,協議不可達,埠不可達,需要分片但DF位元已置為1,以及源路由失敗等六種情況,其程式碼欄位分別置為0至5。當出現以上六種情況時就向源站傳送終點不可達報文。

說明:

埠不可達:UDP的規則之一是:如果收到UDP資料報而且目的埠與某個正在使用的程序不相符,那麼UDP返回一個ICMP不可達報文。

2、 源站抑制:當路由器或主機由於擁塞而丟棄資料報時,就向源站傳送源站抑制報文,使源站知道應當將資料報的傳送速率放慢。

3、 時間超過:當路由器收到生存時間為零的資料報時,除丟棄該資料報外,還要向源站傳送時間超過報文。當目的站在預先規定的時間內不能收到一個數據報的全部資料報片時,就將已收到的資料報片都丟棄,並向源站傳送時間超過報文。

4、引數問題:當路由器或目的主機收到的資料報的首部中的欄位的值不正確時,就丟棄該資料報,並向源站傳送引數問題報文。

5、改變路由(重定向)路由器將改變路由報文傳送給主機,讓主機知道下次應將資料報傳送給另外的路由器。


ICMP定義了一套差錯報文

控制報文,用於使用者主機與路由之間交換不可到達地址、網路擁塞、重定向到更好的路徑、報文生命週期超時等資訊

ICMP協議是一種提供(有關阻止資料包傳遞的)網路故障問題反饋資訊的機制。(針對阻止資料包傳遞或者網路故障。)它讓TCP等上層協議能夠意識到資料包沒有送達目的地。他的主要功能:

支援網路管理PING命令
    報告一個特定的目的地不可到達
    請求一個傳送主機減少它的資料流量,以緩解網路擁塞
    報告配置和路由的變化
    報告一個特定的資料報中IP報頭引數的問題
    因超時而丟棄一個數據報
    CMP差錯報文

差錯報告作為ICMP最初始的功能,具有兩大特點:

    第一,ICMP作為差錯報文傳輸機制,最根本的功能是提供差錯報告,但ICMP並不嚴格規定對 某種差錯應採取什麼處理方式。
    第二,ICMP的差錯報告都是閘道器——源機模式的,因為:首先,IP資料報只包含信源地址 和信宿地址(除非選用“記錄路徑”選項),一旦發生錯誤,差錯情況要麼報告信源機, 要麼報告信宿機,但報告信宿機首先沒有意義(因為傳輸與信宿機毫無關係),其次也許 根本做不到(因為傳輸錯誤可能使信宿機不可到達),於是,差錯資訊只能傳給信源機。(這句話的意思就是,網路層提供的是點對點的服務,就是一個路由給另一個路由傳送資料的時候出現錯誤,這個使用ICMP的差錯報告都是閘道器,都是傳送端的閘道器!它只是報告,並不能採取什麼措施)

關於ICMP與TCP的差錯控制對比?

比如主機A到主機B的通訊,中間Router  r1 到Router  r2 的網路連線斷了。

通過ICMP,則可以快速診斷出出錯原因,並且報告主機。(差錯診斷)

TCP的差錯控制,主要是體現在,網路斷了,收不到確認回覆,TCP會一直再次傳送資料包,直到收到確認回覆。(差錯處理)

 

ICMP提供一組易懂的出錯報告資訊。傳送的出錯報文返回到傳送原資料的裝置,因為只有傳送裝置才是出錯報文的邏輯接受者傳送裝置隨後可根據ICMP報文確定發生錯誤的型別,確定如何才能更好地重發失敗的資料報但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務由傳送方完成。

。ICMP協議有哪些資料包?

一個ICMP資料包實際上就是一個(資料部分為ICMP協議資料的)IP資料包。 

IP頭

ICMP頭

Type

Code

Checksum

ICMP資料


如前所述,ICMP主要分為差錯報文控制報文

差錯報文包括:目標不可到達(網路、協議、主機、埠不可到達;禁止分割、目標網路不認識、目標主機不認識等等)、超時、引數問題、重定向(網路重定向、主機重定向等)等等

控制報文包括:請求回顯(ping請求)、回顯應答(ping應答)、地址掩碼請求、地址掩碼應答等等

如上,我們可以發現,同一型別的錯誤(不可到達)可能有不同種類(網路不可到達、主機不可到達),因此,我們使用type來code兩個標誌來確定一個具體的錯誤。

因為需要指出具體是哪個主機上的哪個程式發出的資訊沒有到達。

因此,每一個ICMP的錯誤訊息,應該包含:

1.具體的錯誤型別(Type/code 決定)

2.引發ICMP錯誤訊息的資料包的完全IP包頭(哪個主機的資料)

3.資料報的前8個位元組----UDP報頭或者TCP中的port部分(主機上的哪個程式)

因此,ICMP錯誤訊息的格式應該為如下

Type(8)

Code(8)

Checksum(16)

Unused(32)

Internet Header +64 Bits of Original Data Datagram

  控制報文因為控制的訊息各不相同,所以有所差異。下面分析下請求回顯(ping)和回顯應答,其他的訊息,大家可以觸類旁通。

Type

Code

Checksum

Identifier

Sequence Number

Data

當主機A需要知道和主機B通訊的狀況(資訊傳遞延時、丟包率)時,我們該怎麼辦呢?

我們可以參考聲納和雷達的原理:主機A傳送一個ICMP回顯請求(type=8,code=0)報文,資料域中存放當前時間T1,目的IP為主機B。主機B收到該ICMP回顯請求報文後,將目的IP和源IP調換位置,其他資訊都不變(Indentifier,Sequence Number),回覆一個ICMP回顯應答(type=0,code=0)。主機A收到改ICMP回顯應答的時間為T2。則,到主機B的通訊時間為:T2-T1。

又因為,要考慮丟包,所以我們向主機B傳送多個回顯請求,用Sequence Number來區分各個請求,根據Sequence Number,即可知道應答對應的請求資料包。

 

Ping命令就是這樣的一個實現,其實我們在命令列下輸入ping ip命令時,就是呼叫Ping程式。Ping程式根據輸入的IP(域名)封裝ICMP請求應答,傳送出去,並且接受ICMP回顯應答,進行解析,輸出。

 

關於超時:IP報頭中的生存期(TTL)屬性,用來控制報文段在網路中的生存期。

 

試想一下,當網路中的某些路由出現問題,Router A將IP a 的下一跳路由為Router B。同時在Router B中,又將IP a 的下一跳路由為 Router A。那麼顯然,兩個路由器之將會間形成迴路,通往網段a的資料包,將會一直在兩個路由之間傳送,導致網路流量爆炸,同時,資料包也無法正確的到達網路a。

 

因此,當IP資料包每經過一個路由器時,路由器將IP資料包中的TTL值減一。當TTL值為0時,路由器判斷資料包超時,傳送ICMP超時資訊給源主機。

 

當我們想知道:從主機A傳送到主機B的資料包在網路中都經過了哪些路由器的時候,我們有什麼辦法呢?

我們知道,當IP資料包在路由中出錯時,路由器會向傳送源傳送一個ICMP錯誤報文,傳送端從該ICMP錯誤報文中,可以得到該路由的IP

我們可以利用此原理。要得到從主機A到目標主機B之間的所有路由的IP,那麼我們必須讓IP資料包在每個路由器中都出錯一次。

又因此,TTL值在經過的每個路由器中都會減1。因此,我們可以利用TTL的超時資訊,在每個路由中都發生一次。即可得到從從主機A到主機B之間的所有路由的IP。

 

PS.怎麼判斷資料包正確到達了目標主機B?

當IP資料包到達了目標主機,將不會再發送TTL超時錯誤。而且在目標主機B中,沒有執行相對應的應用層程式,因此,將沒有程式會迴應我們傳送的IP資料包。那麼,我們將如何知道IP資料包已經到達了目標主機呢?

我們可以為資料包分配一個目標主機幾乎不可能監聽的埠,從而,當IP資料包到達目標主機後,目標主機會回覆相應的不可到達、埠不可到達ICMP錯誤資訊,從而,我們可以確認IP資料包已經到達了目標主機。

 

綜上,我們可以:源主機A傳送IP資料包,IP為目標主機B,port幾乎不可能監聽的port,TTL從一開始一直往上增加,直道收到來自主機B的ICMP 不可到達(埠不可到達)資訊。

Tracerouter 命令就是實現這樣功能的一個程式。我們可以通過tracerouter ip來呼叫此功能。

 

PS.因為每次路由時的路由路徑可能不一樣,那麼在tracerouter過程中,我們又如何解決這個問題?

而且,如果目標主機正好監聽了這一我們認為不可能監聽的埠呢?

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述