1. 程式人生 > >第二章、IP協議詳解

第二章、IP協議詳解

32位 匹配 重新 連續 檢測 tcp crc校驗 變化 同步傳輸

一、IP服務的的特點

IP協議是TCP/IP協議族的動力,他為上層協議提供的無狀態無連接,不可靠的服務。

  無狀態是指IP通信雙方不同步傳輸數據的狀態信息,因此所有的ip數據報的發送,傳出和接受都是相互獨立的,沒有上下文的聯系。這種服務最大的缺點就是無法處理亂序和重復的IP數據報。比如,發送端發送出的第N個數據包可能逼第N+1個報文段後到達接收端,而同一個IP數據報也可能經過不同的路徑多次到達接收端。IP數據報頭部提供了一個標識字段用以唯一的標識一個 IP數據報,但它是被用來處理IP分片和重組的,而不是用來指示接受順序的。

  無狀態的優點也有,簡單高效,我們無須為保持通信的狀態而分配一些內核資源,也無需每次傳輸數據是都攜帶上狀態信息。網絡協議中,無狀態是很常見的,比如UDP協議和HTTP協議就是無狀態連接。以HTTP協議為例,一個瀏覽器連續倆次網頁請求之間沒有任何關系,他將被web服務器獨立的處理。

  無連接是指IP通信雙方都不長久的維持對方的任何信息,這樣,上層協議每次發送數據報的時候,都必須明確指定對方的ip地址。

  不可靠是指IP協議不能保證數據報準確的到達接收端,他只是承諾盡最大努力。導致IP數據報發送失敗。

二、IPV4頭部結構。

  iPV4頭部結構如下圖,其長度通常為20字節,除非含有可變長的選項部分。

4位版本號 4位頭部長度 8位服務類型 16位總長度(字節數)
8位生存時間TTL 8位協議 16位頭部校驗和
32位源端IP地址
32位目的端IP地址
選項,最多40個字節

4位版本號:制定IP協議的版本。

4位頭部長度:標識該IP頭部有多少個32bit字,因為4位是最大能表示15,所以IP頭部最長是60字節。

8位服務類型:

16位總長度是指整個UP數據包的長度。

16位標識唯一標識主機發送的每一個報文段。

三、IP分片。

   前面提到,當IP數據報長度超過幀MTU時候,他將被分片傳輸。分片可能發送在發送端,也可能發生在中轉的路由器上,而且可能在傳輸過程中被多次分片,但是只有在最終的目標機器上,這些分片才會被內核中的IP這些分片才會被內核中的IP模塊重新組裝。

  IP數據包頭部:數據報標識,標誌和片偏移。一個IP數據報的每個IP數據分片都有自己的IP頭部,他們具有相同的標識值,但是具有不同的片偏移。並且除了最後一個分片外,其它分片都將設置MF標誌。此外,每個分片的IP頭部的總長度將被設置為該分片的長度。

  以太網,幀的長度為MTU1500字節,因此他攜帶的IP數據報的數據部分最多是1480字節,(IP頭部需要占20字節)。考慮,用IP數據報文封裝一個長度為1481字節的ICMP報文(包括ICMP頭部8字節,所以長度是1473字節),則該數據報在使用以太網幀傳輸的時候必須被分片。

四、IP路由。

  IP協議的一個核心任務就是數據包的路由,即確定發送數據報到目標機器的路徑。為了理解IP路由過程,我們先簡要分析IP模塊的基本工作流程。

1、IP模塊工作流程:當IP模塊接受來自數據鏈路層的IP數據報的時候,他首先對該數據報進行CRC校驗,確認無誤之後就分析其頭部的具體信息。如果該數據包頭部設置了源站選路選項,則,IP模塊調用數據包轉發子模塊來處理該數據報。如果該IP數據報的頭部中目標IP地址是本機的某個IP地址,或者廣播地址,就是該數據報是發送給本機的,則IP模塊就根據數據包頭部中的協議字段來決定發給那個上層應用。如果IP模塊發現這個數據包不是發送給本機的,則也調用數據包轉發子模塊來處理該數據報。

  數據包轉發子模塊將首先檢測系統是夠允許轉發,如果不允許,IP模塊就將數據包丟棄。如果允許,數據包轉發子模塊將對該數據包執行一些操作,然後將它交給IP數據報輸出子模塊。

  IP數據報應該發送給哪個下一跳路由(或者目標機器),以及經過那個網卡來發送,就是IP數據報路由過程。IP模塊實現數據包路由的核心數據結構是路由表。這個表按照數據報的目標IP地址分類,同一類型的IP數據報將被發送往相同的下一跳路由(或是目標機器)。

  IP輸出隊列中存放的是所有等待發送的IP數據報,其中除了需要轉發的IP數據報之外,還包括封裝了本機上層數據(ICMP報文,TCP報文段和UDP數據報)的IP數據報。

2、路由機制:;路由表是如何按照IP地址分類的?

(1)查找路由表中和數據包的目標IP地址,完全匹配的主機ip地址。如果找到,就使用該路由項,沒找到則轉步驟2。

(2)查找路由表中和數據包的目標IP地址具有相同的網路ID的網絡IP地址。如果找到,就使用該路由項;沒找到則跳轉步驟3.

(3)選擇默認路由項,這通常意味著數據包的下一跳路由是網關。

3、路由表更新。

  路由表必須能夠更新,以反映網絡連接的變化,這樣的IP模塊才能更準確,高效的穿法數據報。route命令可以修改路由表。

五、IP轉發。

不是發送給本機的IP數據報轉發子模塊來處理。路由器都能執行數據包的轉發操作,而主機一般只發送和接受數據報,這是因為主機上的訥河參數默認被設置為0,。我們可以通過修改他來使能主機的數據報轉發功能。

六、重定向。

1、ICMP重定向報文。

8位類型 8位代碼 16位校驗和
應該使用的路由器的IP地址
原始IP數據報的頭部信息(包括可選字段)+數據部分的前8個字節

ICMP報文頭部的三個固定字段,8位類型,8位代碼,16位校驗和。ICMP重定向報文的類型是5,代碼段由4個可選值,用來區分不同的重定向類型。

第二章、IP協議詳解