1. 程式人生 > >IP網際協議分析

IP網際協議分析

簡介

       IP協議(Internet Protocol)即網際協議,是用於報文交換網路的一種面向資料的協議。不提供可靠的傳輸服務(也叫盡最大努力傳輸),它不提供端到端的或(路由)結點到(路由)結點的確認,對資料沒有差錯控制,它只使用報頭的校驗碼,它不提供重發和流量控制。如果出錯可以通過ICMP報告。

封包格式及各欄位分析

封包格式

各欄位分析

(1)版本: 佔4位,指IP協議的版本。通訊雙方使用的IP協議的版本必須一致。目前廣泛使用的IP協議版本號為4(即IPV4)。關於以後要使用的IPv6(即版本6的IP協議)。
(2)首部長度:

佔4位,可表示的最大十進位制數值是15。請注意,首部長度欄位所表示數的單位是32位字(1個32位字長是4位元組)。因為IP首部的固定長度是20位元組,因此首部長度欄位的最小值是5(即二進位制表示的首部長度是0101)。而當首部長度為最大值111時(即十進位制數的15),就表明首部長度達到最大值15個32位字長,即60位元組。當IP分組的首部長度不是4位元組的整數倍時,必須利用最後的填充欄位加以填充。因此IP資料報的資料部分永遠在4位元組的整數倍時開始,這樣在實現IP協議時較為方便。首部長度限制為60位元組的缺點是有時可能不夠用。但這樣做是希望使用者儘量減少開銷。最常用的首部長度是20位元組(即首部長度為0101),這時不使用任何選項。
(3)區分服務:
佔8位,用來獲得更好的服務。這個欄位在舊標準中叫做服務型別,但實際上一直沒有被使用過。1998年IETF把這個欄位改名為區分服務Ds(Differentiated Services) 。只有在使用區分服務時,這個欄位才起作用。在一般的情況下都不使用這個欄位。
(4)總長度: 佔16位,總長度指首部和資料之和的長度,單位為位元組。因此資料報的最大長度為2^16-1=65535位元組。然而實際上傳送這樣長的資料報在現實中是極少遇到的。 我們知道,在IP層下面的每一種資料鏈路層協議都規定了一個數據幀中的資料欄位的最大長度,這稱為最大傳送單元MTU( Maximum Transfer Unit )。當一個IP資料報封裝成鏈路層的幀時,此資料報的總長度(即首部加上資料部分)一定不能超過下面的資料鏈路層所規定的MTU值。例如,最常用的乙太網就規定其MTU值是1500位元組。若所傳送的資料報長度超過資料鏈路層的MTU值,就必須把過長的資料報進行分片處理雖然使用盡可能長的IP資料報會使傳輸效率得到提高(因為每一個IP資料報中首部長度佔資料報總長度的比例就會小些),但資料報短些也有好處。每一個IP資料報越短,路由器轉發的速度就越快。為此,IP協議規定,在網際網路中所有的主機和路由器,必須能夠接受長度不超過576位元組的資料報。這是假定上層交下來的資料長度有512位元組(合理的長度),加上最長的首部60位元組,再加上4位元組的富餘量,就得到576位元組。當主機需要傳送長度超過576位元組的資料報時,應當先了解一下,目的主機能否接受所要傳送的資料報長度。否則,就要進行分片。在進行分片時(見後面的“片偏移”欄位),資料報首部中的“總長度”欄位是指分片後的每一個分片的首部長度與該分片的資料長度的總和。
(5)標識:
佔16位,IP軟體在儲存器中維持一個計數器,每產生一個數據報,計數器就加1,並將此值賦給標識欄位。但這個"標識"並不是序號,因為IP是無連線服務,資料報不存在按序接收的問題。當資料報由於長度超過網路的MTU而必須分片時,這個標識欄位的值就被複制到所有的資料報片的標識欄位中。相同的標識欄位的值使分片後的各資料報片最後能正確地重灌成為原來的資料報。
(6)標誌: 佔3位,但目前只有兩位有意義。1.標誌欄位中的最低位記為MF( More Fragmento MF =1即表示後面“還有分片”的資料報。MF=0表示這已是若干資料報片中的最後一個。2.標誌欄位中間的一位記為DF( Dont Fragment ),意思是“不能分片”。只有當DF=0時才允許分片。
(7)片偏移: 佔13位。片偏移指出:較長的分組在分片後,某片在原分組中的相對位置。也就是說,相對於使用者資料欄位的起點,該片從何處開始。片偏移以8個位元組為偏移單位。這就是說,每個分片的長度一定是8位元組(64位)的整數倍。
(8)生存時間: 佔8位,生存時間欄位常用的英文縮寫是TTL( Time To Live ),表明這是資料報在網路中的壽命。由發出資料報的源點設定這個欄位。其目的是防止無法交付的資料報無限制地在網際網路中兜圈子(例如從路由器R1轉發到R2,再轉發到R3,然後又轉發到R1),因而白白消耗網路資源。最初的設計是以秒作為TTL值的單位。每經過一個路由器時,就把TL減去資料報在路由器所消耗掉的一段時間。若資料報在路由器消耗的時間小於1秒,就把TTL值減1。當TTL值減為零時,就丟棄這個資料報然而隨著技術的進步,路由器處理資料報所需的時間不斷在縮短,一般都遠遠小於1秒,後來就把TTL欄位的功能改為“跳數限制”(但名稱不變)。路由器在每次轉發資料報之前就把TL值減1。若TTL值減小到零,就丟棄這個資料報,不再轉發。因此,現在TTL的單位不再是秒,而是跳數。TTL的意義是指明資料報在網際網路中至多可經過多少個路由器。顯然,資料報能在網際網路中經過的路由器的最大數值是255。若把TTL的初始值設定為1,就表示這個資料報只能在本區域網中傳送。因為這個資料報一傳送到區域網上的某個路由器,在被轉發之前TTL值就減小到零,因而就會被這個路由器丟棄。
(9)協議: 佔8位,協議欄位指出此資料報攜帶的資料是使用何種協議,以便使目的主機的IP層知道應將資料部分上交給哪個協議進行處理。(常見協議名與協議欄位值對應:ICMP-1、IGMP-2、IP-4、TCP-6、EGP-8、IGP-9、UDP-17、IPv6-41、ESP-50、OSPF-89)。
(10)首部檢驗和: 佔16位,這個欄位只檢驗資料報的首部,不包括資料部分。這是因為資料報每經過一個路由器,路由器都要重新計算一下首部檢驗和(一些欄位,如生存時間、標誌、片偏移等都可能發生變化)。不檢驗資料部分可減少計算的工作量。為了進一步減小計算檢驗和的工作量,IP首部的檢驗和不採用複雜的CRC檢驗碼而採用下面的簡單計算方法:在傳送方,先把IP資料報首部劃分為許多16位字的序列,並把檢驗和欄位置零。用反碼算術運算把所有16位字相加後,將得到的和的反碼寫入檢驗和欄位。接收方收到資料報後,將首部的所有16位字再使用反碼算術運算相加一次。將得到的和取反碼,即得出接收方檢驗和的計算結果。若首部未發生任何變化,則此結果必為0,於是就保留這個資料報。否則即認為出差錯,並將此資料報丟棄。
(11)源地址: 佔32位,目前使用的IPv4地址。
(12)目的地址: 佔32位,目前使用的IPv4地址。

資料包分析

使用科來網路分析系統抓取的三個連續的資料包:

就第三個報文進行各欄位分析:

版本: 使用IPv4。
首部長度: 20位元組
區分服務: 未啟用
總長度: 1500位元組
標識: 標識號為27564,第二個報文標識號為27563,第一個報文標識號是27562。
標誌: MF=0,DF=1。代表不能分片。
片偏移: 0,因為報文並沒有分片。
生存時間: 還剩45跳,也就是經過45次路由轉發,該報文就會被丟棄掉。
協議: 6,代表運輸層為TCP協議。
首部檢驗和: 0xE5FF,用於校驗報文首部的欄位。
源地址: 139.196.31.14。
目的地址: 10.6.65.120。

其他

首部校驗和計算過程
對照上文各欄位分析看圖

例:

當資料報分片

 例:當一資料報的總長度為3820位元組,其資料部分為3800位元組長(使用固定首部),需要分片為長度不超過1420位元組的資料報片。因固定首部長度為20位元組,因此每個資料報片的資料部分長度不能超過1400位元組。於是分為3個數據報片,其資料部分的長度分別為1400,1400和1000位元組。原始資料報首部被複製為各資料報片的首部,但必須修改有關欄位的值。
分片後得出的結果

       上表描述了資料報首部與分片有關的欄位中的數值,其中標識欄位的值是任意給定的(12345)。具有相同標識的資料報片在目的站就可無誤地重灌成原來的資料報。 現在假定資料報片2經過某個網路時還需要再進行分片,即劃分為資料報片2-1(攜帶資料800位元組)和資料報片2-2(攜帶資料600位元組)。那麼這兩個資料報片的總長度、標識、MF、DF和片偏移分別為:820,12345,1,0,175;620,12345,1,0,275。

 IP資料報首部的可變部分
       IP資料報首部的可變部分就是一個選項欄位。選項欄位用來支援排錯、測量以及安全等措施,內容很豐富。此欄位的長度可變,從1個位元組到40個位元組不等,取決於所選擇的專案。某些選項專案只需要1個位元組,它只包括1個位元組的選項程式碼。而有些選項需要多個位元組,這些選項一個個拼接起來,中間不需要有分隔符,最後用全0的填充欄位補齊成為4位元組的整數倍。
       增加首部的可變部分是為了增加IP資料報的功能,但這同時也使得IP資料報的首部長度成為可變的。這就增加了每一個路由器處理資料報的開銷。實際上這些選項很少被使用很多路由器都不考慮IP首部的選項欄位,因此新的IP版本IPv6就把I資料報的首部長度做成固定的。

IPv6

      IP協議是網際網路的核心協議。現在使用的IP(即IPv4)是在20世紀70年代末期設計的。網際網路經過幾十年的飛速發展,到2011年2月,IPV4的地址已經耗盡,ISP已經不能再中請到新的PP地址塊了。我國在2014年至2015年也逐步停止了向新使用者和應用分配IPv4地址,同時全面開始商用部署IPv6。

IPv6與IPv4對比:

  • 取消了首部長度欄位,因為它的首部長度是固定的(40位元組)
  • 取消了服務型別欄位,因為優先順序和流標號欄位實現了服務型別欄位的功能。
  • 取消了總長度欄位,改用有效載荷長度欄位取消了標識、標誌和片偏移欄位,因為這些功能已包含在分片擴充套件首部中。
  • 把TTL欄位改稱為跳數限制欄位,但作用是一樣的(名稱與作用更加一致)取消了協議欄位,改用下一個首部欄位。
  • 取消了檢驗和欄位,這樣就加快了路由器處理資料報的速度。我們知道,在資料鏈路層對檢測出有差錯的幀就丟棄。在運輸層,當使用UDP時,若檢測出有差錯的使用者資料報就丟棄。當使用TCP時,對檢測出有差錯的報文段就重傳,直到正確傳送到目的程序為止。因此在網路層的差錯檢測可以精簡掉。
  • 取消了選項欄位,而用擴充套件首部來實現選項功能由於把首部中不必要的功能取消了,使得IPv6首部的欄位數減少到只有8個。

(1)版本:佔4位,指明協議版本,對IPv6版本,該欄位為6.
(2)通訊量類:佔8位,為了區分不同的IPv6資料報的類別或優先順序。
(3)流標號:佔20位。IPv6的一個新的機制是支援資源預分配,並且允許路由器把每一個數據報與一個給定的資源分配相聯絡。PV6提出流(fow)的抽象概念。所謂“流”就是網際網路絡上從特定源點到特定終點(單播或多播)的一系列資料報(如實時音訊或視訊傳輸),而在這個“流”所經過的路徑上的路由器都保證指明的服務質量。所有屬於同一個流的資料報都具有同樣的流標號。因此,流標號對實時音訊視訊資料的傳送特別有用。對於傳統的電子郵件或非實時資料,流標號則沒有用處,把它置為0即可。
(4)有效載荷長度:佔16位。它指明IPv6資料報除基本首部以外的位元組數(所有擴充套件首部都算在有效載荷之內)。這個欄位的最大值是64KB(65535位元組)。
(5)下一個首部:佔8位。它相當於IPv4的協議欄位或可選欄位。
當IPv6資料報沒有擴充套件首部時,下一個首部欄位的作用和IPv4的協議欄位一樣,它的值指出了基本首部後面的資料應交付IP層上面的哪一個高層協議。
當出現擴充套件首部時,下一個首部欄位的值就標識後面第一個擴充套件首部的型別。
(6)跳數限制:佔8位。(類比IPv4的生存時間欄位)用來防止資料報在網路中無限期地存在。源點在每個資料報發出時即設定某個跳數限制(最大為255跳)。每個路由器在轉發資料報時,要先把跳數限制欄位中的值減1。當跳數限制的值為零時,就要把這個資料報丟棄。
(7)源地址:佔128位。是資料報的傳送端的IP地址。
(8)目的地址:佔128位。是資料報的接收端的IP地址。

附:IPv6報文

中國IPv6部署不力的原因五個方面

1.落入了私有地址的陷阱難以自撥,地址轉換(NAT)可暫時應對IPv4公網地址的不足,但跨過多個公網地址對私有地址的管理相當複雜,NAT破壞了端到端的透明性,無法對使用者溯源。
2.政府缺乏明確的市場導向和應用先行意識,發達國家一般是軍方和政府先轉換到IPv6,而我國家政府網站沒有起到應有的帶頭作用。
3.對內容服務的瓶頸重視不夠且缺乏有利的政策,“我國整個IPv6的埠遲遲沒有開放,國際的頻寬也不夠,國外IPv6服務也沒有在中國落地,應用和網站上IPv6的遷移嚴重滯後,這些嚴重拖了我國IPv6發展的後腿。”
4.一些誤解和干擾影響了國家發展IPv6戰略的執行。鄔賀銓稱,一些把中國公眾網際網路與國際網際網路隔離的方案聲稱的“自主創新安全可靠”迷惑了一些單位,違反了中國堅持的全球一個網際網路的主張。另外,以為顛覆IP的未來網路很快就實現,而處於等待觀望的狀態,對IPv6部署按兵不動。
5.將IPv6與網路對立,認為IPv6會影響網路安全。“實際上美國擁有很多IPv4地址,現在美國大力發展IPv6,原因是IPv6可以對使用者溯源,有利於反恐。”