1. 程式人生 > 實用技巧 >IP協議

IP協議

socket和TCP/IP協議族的關係

socket提供如下兩點功能:

  1. 將應用程式資料從使用者緩衝區中複製到TCP/UDP核心傳送緩衝區,以交付核心來發送資料,或者是從核心TCP/UDP接收緩衝區中複製資料到使用者緩衝區,以讀取資料。
  2. 應用程式可以通過他們來修改核心中各層協議的某些頭部資訊或其他資料結構,從而精細地控制底層通訊行為。比如可以通過setsockopt函式來設定IP資料報在網路上的存活時間。

IP

不可靠是指IP協議不能保證IP資料報準確地到達接收端,他只是承諾盡最大努力。很多情況下都能導致IP資料報傳送失敗。比如TTL,接收端發現收到的IP資料報不正確。無論哪種情況,傳送端的IP模組一旦檢測到IP資料報傳送失敗,就通知上層協議傳送失敗,而且不會試圖重傳

。因此,使用IP服務的上層協議(比如TCP協議)需要自己實現資料確認超時重傳等機制達到可靠傳輸的目的。

IPv4頭部結構

長度通常為20位元組,除非含有可變長的選項部分(最多40位元組)

4位版本號(version):是指IP協議的版本。對IPv4來說是4。

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

8位服務型別(Type of Service, TOS):包含一個3位的優先權欄位(已被忽略),4位的TOS欄位和1位保留欄位(必須置0)。4位TOS欄位跟別標識:最小延時,最大吞吐量,最高可靠性和最小費用

。其中最多一個能置位1,應用程式應該根據實際需要來設定他。比如ssh和telnet這樣的登入程式需要的是最小延時的服務,而檔案傳輸程式ftp則需要最大吞吐量的服務。

16位總長度(total length):是指整個IP資料報的長度,以位元組為單位。因此IP資料包的最大長度為2^16-1(65535)位元組。但由於MTU的限制,長度超過MTU的資料報都將被分片傳輸,所以實際傳輸的IP資料報(或分片)的長度都遠遠沒有達到最大值。記下來的3個欄位則描述瞭如何實現分片。

16位標識(identification):唯一地標識主機發送的每一個數據報。其初始值由系統隨機生成;每傳送一個數據報,其值就加1,。該值在資料報分片時被複制到每個分片中

,因此同一個資料報的所有分片都具有相同的標識值

3位標誌:第一位保留。第二位標識禁止分片,如果設定了這個位,IP模組將不對資料進行分片。在這種情況下,如果IP資料報長度超過MTU的話,IP模組將丟棄該資料並返回一個ICMP差錯報文。第三位標識更多分片,除了資料報的最後一個分片外,其他分片都要將他置1

13位分片偏移(fragmentation offset):是分片相對原始IP資料報開始出(僅值資料部分)的偏移。實際的偏移值應該是該值左移3位(乘8)後得到的。由於這個原因,除了最後一個IP分片外,每個IP分片的資料部分的長度必須是8的整數倍(這樣才能保證後面的IP分片擁有一個合適的偏移值)。

8位生存時間(time to live, TTL):是資料到達目的地之前允許經過的路由器跳數。TTL值被髮送端設定(常見的值是64)。資料報在轉發過程中沒經過一個路由,該值就被路由器減一。當TTL值為0時,路由器將丟棄該資料報,並向源端傳送一個TCMP差錯報文。TTL值可以防止資料報陷入路由迴圈。

8位協議(protocol):用來區分上層協議。其中ICMP是1,TCP是6,UDP是17.

16位頭部校驗和(header checksum):由傳送端填充,接收端對其使用CRC演算法以檢驗IP資料報頭部(注意,僅檢驗頭部)在傳輸過程中是否損壞。

32位的源IP地址和目的端IP地址用來標識資料報的傳送端和接收端,一般情況下,這兩個地址在整個資料報的傳輸過程中保持變,不論他中間經過了多少箇中轉路由器。

可變長的可選資訊(option):這部分最多包含40位元組,因為IP頭部最長是60位元組固定位元組20)。可用的IP選項包括:

1. **記錄路由**:告訴資料包途徑的所有路由器都將自己的IP地址填入IP頭部的選項部分,這樣我們可以**跟蹤資料報的傳輸路徑。**
2. **時間戳**(timestamp):告訴每個路由器都將資料包被轉發的時間填入IP頭部的選項部分,這樣就可以測量**途徑路由之間資料報的傳輸時間。**
3. **鬆散源路由選擇**:指定一個路由器IP地址列表,報文傳送過程中必須經過其中所有的路由器。
4. **嚴格源路由選擇**:和鬆散路由類似,不過資料報只能經過被指定的路由器。

IP分片

​ 分片可能發生在傳送端,也可能發生在中轉路由器上,而且可能在傳輸過程中多次分片,但只有在最終的目標機器上,這些分片才會被核心中的IP模組重新組裝。

​ IP頭部的資料報標識,標誌和片偏移給IP的分片和重組提供了足夠的資訊,一個IP資料報的每個分片都具有自己的IP頭部,他們具有相同的標識值,但具有不同的片偏移。並且除了最後一個分片外,其他分片都將設定為MF標誌。此外,每個分片的IP頭部的總長度欄位都將設定為該分片的長度。

​ 乙太網幀的MTU是1500位元組,因此他攜帶的IP資料報的資料部分最多是1480位元組。

概念

  1. 無連線:是指IP通訊雙方都不長久地維持對方的任何資訊。這樣,上層協議每次傳送資料的時候,都必須指定對方的IP地址。這樣的好處是:簡單、高效。我們無需為保持通訊的狀態而分配一些核心資源,也無需每次傳輸時都攜帶狀態資訊。