ip資料報格式;ip資料報分片
IPv4資料報格式:
上圖表示的資料,最高位在左邊,記為0位;最低位在右邊,記為31位。在網路中傳輸資料時,先傳輸0~7位,其次是8~15位,然後傳輸16~23位,最後傳輸24~31位。由於TCP/IP協議頭部中所有的二進位制數在網路中傳輸時都要求以這種順序進行,因此把它稱為網路位元組順序。在實際程式設計中,以其他形式儲存的二進位制數必須在傳輸資料前使用網路程式設計API相應的函式把頭部轉換成網路位元組順序。
1)版本號:佔用4位二進位制數,表示該IP資料報使用的IP協議版本。目前Internet中使用的主要是TCP/IP協議族中版本號為4的IP協議。
2)頭長度:佔用4位二進位制位,此域指出整個報頭的長度(包括選項),該長度是以32位二進位制數為一個計數單位的,接收端通過此域可以計算出報頭在何處結束及從何處開始讀資料。普通IP資料報(沒有任何選項)該欄位的值是5(即20個位元組的長度)。
3)服務型別(TOS、type of service):佔用8位二進位制位,用於規定本資料報的處理方式。服務型別欄位的8位分成了5個子域:
(1)—優先權(0-7)數越大,表示該資料報優先權越高。網路中路由器可以使用優先權進行擁塞控制,如當網路發生擁塞時可以根據資料報的優先權來決定資料報的取捨。
(2)—短延遲位D(Delay):該位置1時,資料報請求以短延遲通道傳輸,0表示正常延時。
(3)—高吞吐量位T(Throughput):該位置1時,資料報請求以高吞吐量通道傳輸,0表示普通。
(4)—高可靠位R(Reliability):該位置1時,資料報請求以高可靠性通道傳輸,0表示普通。
(5)—保留位。
目前在Internet中使用的TCP/IP協議大多數情況下網路並未對TOS進行處理,但在實際程式設計時,有專門的函式來設定該欄位的各域。一些重要的網際應用協議中都設定了建議使用的TOS值:
從上表可以看出,對於與使用者直接互動的應用,一般使用短延時;對於有大量資料需要進行傳輸的應用,一般選用高吞吐量;對於資料報要傳輸控制資訊的應用,一般選用高可靠性。在資料報的生存期內不支援TOS的,TOS欄位就設定為0x00。
4)總長度:佔用16位二進位制位,總長度欄位是指整個IP資料報的長度(報頭區+資料區),以位元組為單位。利用頭部長度欄位和總長度欄位就可以計算出IP資料報中資料內容的起始位置和長度。由於該欄位長度為16位二進位制數,因此理論上IP資料報最長可達65536個位元組(事實上受物理網路的限制,要比這個數值小很多)。
5)生存時間(TTL,time to live):佔用8位二進位制位,它指定了資料報可以在網路中傳輸的最長時間。實際應用中把生存時間欄位設定成了資料報可以經過的最大路由器數。TTL的初始值由源主機設定(通常為32、64、128或256),一旦經過一個處理它的路由器,它的值就減1。當該欄位為0時,資料報就丟棄,併發送ICMP報文通知源主機,因此可以防止進入一個迴圈迴路時,資料報無休止地傳輸下去。
6)上層協議:佔用8位二進位制位,IP協議可以承載各種上層協議,目標端根據協議標識就可以把收到的IP資料報送到TCP或UDP等處理此報文的上層協議了。
常用網際協議編號:
7)校驗和:佔用16位二進位制數,用於協議頭資料有效性的校驗,可以保證IP報頭區在傳輸時的正確性和完整性。頭部檢驗和欄位是根據IP協議頭計算出的檢驗和,它不對頭部後面的資料進行計算。
IP校驗和主要是用來保證資料(IP報頭)的完整性的。它用的演算法非常簡單, 就是反碼求和校驗。需要注意的是反碼求和又叫1的補碼(one'scomplement), 而2的補碼就是我們通常說的補碼求和了。校驗演算法具體如下。
①傳送方
1)將校驗和欄位置為0,然後將IP包頭按16位元分成多個單元,如包頭長度 不是16位元的倍數,則用0位元填充到16位元的倍數;
2)對各個單元採用反碼加法運算(即高位溢位位會加到低位,通常的補碼運算 是直接丟掉溢位的高位),將得到的和的反碼填入校驗和欄位;
3)傳送資料包。
②接收方
1)將IP包頭按16位元分成多個單元,如包頭長度不是16位元的倍數,則用 0位元填充到16位元的倍數;
2)對各個單元採用反碼加法運算,檢查得到的和是否符合是全1(有的實現可 能對得到的和會取反碼,然後判斷最終值是不是全0);
對IP首部檢驗和的演算法如下:
1)把IP資料包的校驗和欄位置為0;
2)把首部看成以16位為單位的數字組成,依次進行二進位制求和(注意:求和 時應將最高位的進位儲存,所以加法應採用32位加法);
3)將上述加法過程中產生的進位(最高位的進位)加到低16位(採用32位加 法時,即為將高16位與低16位相加,之後還要把該次加法最高位產生的 進位加到低16位)
4)將上述的和取反,即得到校驗和。
為什麼TCP/IP的在運輸層和網路層都進行差錯檢測:IP層只對IP首部計算了檢驗和,而TCP/UDP檢驗和是對整個報文段進行的;TCP/UDP與IP不一定都必須屬於同一個協議棧
8)源地址:佔用32位二進位制數,表示傳送端IP地址。
9)目的地址:佔用32位二進位制數,表述目的端IP地址。
======================IP資料報分片和重組======================
最大傳輸單元:(鏈路層能承載的最大資料量)
IP資料報在網際網路上傳輸時,可能要經過多個物理網路才能從源端傳輸到目的端。不同的網路由於鏈路層和介質的物理特性不同,因此在進行資料傳輸時,對資料幀的最大長度都有一個限制,這個限制值即最大傳輸單元MTU(Maximum Transmission Unit).
同一個網路上的兩臺主機之間通訊時,該網路的MTU值是確定的,不存在分片問題。分片問題一般只存在於具有不同MTU值的網際網路中。由於現在網際網路主要使用路由器進行網路連線,因此分片工作通常由路由器負責。
當兩臺主機之間的通訊要通過多個具有不同MTU值的網路時,MTU的瓶頸是通訊路徑上最小的MTU值,它被稱為路徑MTU。由於路由選擇不一定是對稱的(從A到B的路由可能與從B到A的路由不同),因此,路徑MTU在兩個方向上不一定是一致的,下表是幾種常用網路的MTU值:
分片:
把一個數據報為了適合網路傳輸而分成多個數據報的過程稱為分片,被分片後的各個IP資料報可能經過不同的路徑到達目標主機。
一個IP資料報在傳輸過程中可能被分片,也可能不被分片。如果被分片,分片後的IP資料報和原來沒有分片的IP資料報結構是相同的,即也是由IP頭部和IP資料區兩個部分組成:
分片後的IP資料報,資料區是原IP資料報資料區的一個連續部分,頭部是原IP資料報頭部的複製,但與原來未分片的IP資料報頭部有兩點主要不同:標誌和片偏移:
(1)標誌:在IP資料報頭部有一個叫“標誌”的欄位,用3位二進位制數表示:
不分片DF(Do not Fragment)標誌如果被置1,則資料報在傳輸過程中不能被分片,如網路連通性測試命令ping就可以用-F引數設定為在資料傳輸時不分片,但這樣當資料不能通過MTU較小的網路時,將產生資料不可達的錯誤。
片未完MF(More Fragment)標誌如果被置1,說明該資料報不是分片後的最後一個數據報,最後一個數據報的該位被置0。
(2)片偏移:IP資料報被分片後,各片資料區在原來IP資料區中的位置用13位片偏移來表示。上圖中分片1的偏移為0;分片2的偏移為600;分片3的偏移為1200。實際在IP地址中,由於偏移是以8個位元組為單位進行計算的,因而在IP資料報中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。
重組:
當分了片的IP資料報到達最終目標主機時,目標主機對各分片進行組裝,恢復成源主機發送時的IP資料報,這個過程叫做IP資料報的重組。
在IP資料報頭部中,標識用16位二進位制數表示,它唯一地標識主機發送的每一份資料報。在一個數據報被分片時,每個分片僅把資料報“標識”欄位的值原樣複製一份,所以一個數據報的所有分片具有相同的標識。
目標端主機重組資料報的原理是:
(1)根據“標識”欄位可以確定收到的分片屬於原來哪個IP資料報;
(2)根據“標誌”欄位的“片未完MF”子欄位可以確定分片是不是最後一個分片;
(3)根據“偏移量”欄位可以確定分片在原資料報中的位置。
========================IP資料報選項========================
IP資料報“選項”主要有兩大功能:
1)用來實現對資料報傳輸過程中的控制,如規定資料報要經過的路由;
2)進行網路測試,如一個數據報傳輸過程中經過了哪些路由器。
IP“選項“域共分為四大類,每類分為若干個選項,每個選項有確定的編號:
IP資料報“選項”由三個部分組成:選項碼、選項長度和選項資料。選項碼和選項長度各佔一個位元組,中,選項長度用於確定整個選項部分的長度;選項碼又分為複製、選項類和選項號:
複製:佔一位,用來控制一個帶有選項的IP資料報被分片後對選項的處理方式。該位置1時將選項複製到所有分片中;置0時將選項僅複製到第一個分片中。
選項類和選項號用於確定該選項是哪類選項中的哪個選項,其實就是確定該選項的功能。
1)源路由選擇:是指IP資料報在網際網路中傳輸時,所經過的路由是由發出IP資料報的源主機指定的,以區別於資料報在網際網路中傳輸時由路由器的IP層自動尋徑所得到的路由。
通過設定源路由選擇選項,可以測試網路中指定路由的連通性,以使資料報繞開出錯的網路,也可用於測試特定網路的吞吐量。源路由選擇可分為兩類:嚴格源路由選擇和寬鬆源路由選擇。
(1)—嚴格源路由選擇有傳送端規定IP資料報必須經過的路徑上的每一個路由器,相鄰路由器之間不得有中間路由器,並且所經過的路由器的順序不可更改。如果一個路由器傳送源路由所指定的下一個路由器不在其直接連線的網路上,那麼它就返回一個“源路由失敗”的ICMP差錯報文。嚴格源路由選擇選項格式如下:
選項碼欄位為100 01001(0x89),即為0類9號選項。選項長度最大為39,可存放9個IP地址。因為IP頭部長度欄位只有4位二進位制數,所以整個IP頭部最長只能包括15(<24)個32位長的字(即60個位元組)。由於IP頭部固定長度為20位元組,選項碼、選項長度和指標共用去3個位元組,因此剩下60-20-3=37個位元組來存放IP地址清單,因而只能存放9個IP地址。
(2)—寬鬆源路由選擇:由傳送方指明一個數據報經過的IP地址清單,但是在資料報傳輸的路徑上,在選項中指定的兩個IP地址之間可以有其他IP地址的路由器。格式與嚴格的相同,只是選項碼欄位值為0x83。
2)記錄路由:通過設定記錄路由選項,IP資料報就可以記錄資料報從源主機傳輸到目標主機時,所經過路徑上的各個路由器的IP地址。記錄路由選項的資料格式和嚴格源路由選擇格式相同,但選項碼欄位值為0x87,指標初值為4,指向存放第一個IP地址的位置。每個路由器的IP地址存入選項的資料區中,指標欄位的值也隨著增加(從4開始到8,12,16,最大到36),它始終指向下一個存放IP地址的位置。當記錄了9個IP地址後,指標欄位的值為40,表示資料區已滿。
3)記錄時間戳:就是IP資料報每經過一個路由器都記下它的IP地址和時間。時間戳中的時間以ms為單位,時間戳取值一般為格林威治時間(UT,Universal Time)自午夜開始計時的毫秒數時間戳選項格式如下:
時間戳選項的選項碼是0x44。選項長度表示選項的總長度(一般為36或40),指標指向下一個可用空間的指標(值為5、9、13等)。
“溢位OF”欄位表示因時間戳選項資料區空間不夠而未能記錄下來的時間戳個數;
“標誌FL”欄位用於控制時間戳選項的格式,取值如下: