天天看點

計算機網絡之我見-通俗了解計算機網絡(五)

上幾篇講解了以IP位址為基礎的資料包路由過程,本篇隻講解IP層協定格式和ICMP協定的常用用途(隻留要點),以及網絡層常用的PING程式、路由跟蹤程式(traceroute等)的工作原理

一、IP協定格式

# IP資料包分為IP頭和體

# IP頭部的關鍵字段有:

1 源IP位址、目的IP位址,這是用來在網絡中路由資料包必須的字段(參考前幾篇路由過程的講解)

2 包體類型标志,訓示IP資料體攜帶的資料包協定格式,如ICMP、IGMP、IP等

3 資料包TTL,即資料包生存跳數:指定一個資料包TTL,資料包每經過一個路由器轉發,TTL就減1,TTL為0的資料包會被路由器丢棄。這個特性目前用來跟蹤資料包到目的位址所經過的所有路由器資訊~

4 路由記錄資訊,能在IP頭部記錄資料包經過的每個路由器IP,但是由于頭部有限,隻能記錄8個IP位址,不能用這個域來做路由跟蹤,一般都是采用上面的TTL方式進行路由跟蹤~

5 資料包的總長度,兩個位元組,最大能表示65535個位元組

6 分片資訊,根據5所說,最大的IP資料包可以達到65535位元組,但是IP經過下層鍊路層發送時,會有硬體和鍊路方面的限制--MTU,它是鍊路層每個資料幀的最大長度,一般是小于1500位元組的,是以一個大于MTU的IP包在每一跳間傳遞的時候都要經過分片、組裝的過程,分片資訊頭域記錄了目前片是哪一片等資訊,根據這些資訊,路由器或主機能夠把多個IP分片組合成一個完整IP資料包~

7 校驗和,校驗資料包是不是被篡改~

# 關于IP層分片的重組和丢棄政策 -- 丢失分片不重發

當IP層開啟資料包分片後,路由器收到一個完整資料包的某個分片後就開啟定時器,當在定時器逾時後仍未收到所有的分片,那麼路由器就會丢棄整個已收到的IP分片,需要注意:路由器隻是丢棄,不會給IP對應的源主機發送任何ICMP錯誤通報通知其重發(原因如下:核心IP層實作并不會重發,重發一般是上層協定如TCP等負責,如果通報錯誤給源主機,必須通報給指定的端口,但是端口資訊通常在第一片分片的IP包中,路由器可能剛好沒有收到第一片分片,是以無法發出錯誤通報);從上可以看出IP層分片的不可靠性,上層協定盡量要避免IP分片

二、ICMP協定常用用途

# ICMP協定是IP層之上的協定,主要有頭域和體域組成,頭域有類型字段,不同的類型對應不同的體域

# ICMP主要用作IP層的互通測試和為上層協定提供錯誤資訊通報等功能,常用功能有:

1 資訊回顯:給指定目的IP位址發送一個ICMP包,包體發送一個字元串,目的IP機器收到請求後傳回一個響應包,包體仍是發送的字元串

2 PING程式:向指定的IP發送回應要求、得到響應并統計資料包的往返時間

3 目的主機不可達錯誤報告:當一個上傳IP資料包經過核心路由器時發現找不到對應IP所屬的網絡,無法完成路由,就會向發送方發送ICMP“主機不可達”錯誤~

4 端口不可達錯誤:IP資料包上承載的是UDP或者TCP資料包的時候,資料包指定的目的IP機器上沒有資料包指定的端口對應的Socket接收的時候,需要向源主機發送ICMP端口不可達錯誤通報~

5 路由重定向:由路由器發出,用來優化路由過程,減少路由跳數,當路由器查路由表發現資料包的下一跳路由和發出主機在同一網絡下(資料包同一接口進來下一跳從同一接口出的情況)時,向源主機發送帶有重定向的路由器IP的ICMP包來讓源主機修改路由表~

三、PING程式簡單了解

1 PING程式可以向指定的IP位址主機發送ICMP回顯資料包,并等待接收響應資料包

2 如果目的IP不可達,PING會接收某一路由器發來的ICMP路由不可達錯誤通告并顯示給使用者

3 PING程式會多次發送和接收ICMP請求和響應,然後統計出到目的網絡的TTL(資料包往返時間)

4 PING程式可以利用IP頭域中的和路由記錄相關的字段來記錄有限個資料包經過的路由器,PING程式構造IP資料包,頭部開啟路由記錄選項,資料包每進過一個路由器,就會填入對應接口的IP,到達目的IP的PING程式時,PING程式把IP資料標頭部的路由記錄資訊轉存到ICMP體中,然後響應給源主機同樣開啟IP路由記錄的ICMP資料報,源主機收到響應後就能夠得到資料包發送路由跟蹤和響應路由跟蹤資訊(發送路由跟蹤資訊從響應的ICMP體中獲得)

四、路由跟蹤程式(traceroute等)簡單了解

1  路由跟蹤程式使用的是IP包的TTL字段,而不是使用IP路由跟蹤選項,因為路由跟蹤選項有大小限制,隻能記錄有限個路由

2  使用TTL的原理:

# 源主機給IP資料包的TTL設定一個指定的整數值(通常小于255),根據協定,沒經過一個路由器,TTL值就會減1,直到TTL值為0,路由器就會丢棄該包,同時給源主機發送資料包失效相關的ICMP錯誤通報

# 路由跟蹤程式構造一個UDP資料包,同時指定一個不存在的UDP端口号,給這個包的IP層TTL值從1開始設定-->發送-->等待ICMP響應,依次增加TTL值遞歸操作,每次響應都記下路由器的IP位址,直到收到一個特殊的ICMP端口不可達錯誤通告(這個通告肯定是目的IP的主機回應的,因為我們指定了一個不存在的端口的UDP資料包),通過TTL的遞增,依次接收ICMP錯誤資訊,通過這樣的方式間接完成了路由跟蹤過程~

繼續閱讀