最大傳輸單元:
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”字段用於控制時間戳選項的格式,取值如下: