IP首部拆解

2021-08-22 09:26:41 字數 3616 閱讀 3850

ip資料報的格式如圖3-1所示。普通的ip首部長為20個位元組,除非含有選項字段。

圖3-1 ip資料報格式及首部中的各欄位

分析圖3-1中的首部。最高位在左邊,記為0bit;最低位在右邊,記為31bit。

4個位元組的32bit值以下面的次序傳輸:首先是0~7bit,其次8~15bit,然後16~23bit,最後是24~31bit。這種傳輸次序稱作bigendian位元組序。由於tcp/ip首部中所有的二進位制整數在網路中傳輸時都要求以這種次序,因此它又稱作網路位元組序。以其他形式儲存二進位制整數的機器,如littleendian格式,則必須在傳輸資料之前把首部轉換成網路位元組序。

目前的協議版本號是4,因此ip有時也稱作ipv4。3.10節將對一種新版的ip協議進行討論。

首部長度指的是首部佔32bit字的數目,包括任何選項。由於它是乙個4位元字段,因此首部最長為60個位元組。在第8章中,我們將看到這種限制使某些選項如路由記錄選項在當今已沒有什麼用處。普通ip資料報(沒有任何選擇項)欄位的值是5。

服務型別(tos)字段包括乙個3bit的優先權子欄位(現在已被忽略),4bit的tos子字段和1bit未用位但必須置0。4bit的tos分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4bit中只能置其中1bit。如果所有4bit均為0,那麼就意味著是一般服務。rfc1340[reynoldsandpostel1992]描述了所有的標準應用如何設定這些服務型別。rfc1349[almquist1992]對該rfc進行了修正,更為詳細地描述了tos的特性。

圖3-2列出了對不同應用建議的tos值。在最後一列中給出的是十六進製制值,因為這就是在後面將要看到的tcpdump命令輸出。

圖3-2 服務型別字段推薦值

te l n e t 和r l o g i n這兩個互動應用要求最小的傳輸時延,因為人們主要用它們來傳輸少量的互動資料。另一方面,f t p檔案傳輸則要求有最大的吞吐量。最高可靠性被指明給網路管理(sn m p)和路由選擇協議。使用者網路新聞(usenet news, nntp)是唯一要求最小費用的應用。

現在大多數的t c p / i p實現都不支援to s 特性,但是自4.3bsd reno以後的新版系統都對它進行了設定。另外,新的路由協議如o s p f和i s - i s都能根據這些欄位的值進行路由決策。

在2 . 1 0節中,我們提到s l i p一般提供基於服務型別的排隊方法,允許對互動通訊資料在處理大塊資料之前進行處理。由於大多數的實現都不使用to s 字段,因此這種排隊機制由s l i p自己來判斷和處理,驅動程式先檢視協議字段(確定是否是乙個t c p 段),然後檢查t c p信源和信宿的埠號,以判斷是否是乙個互動服務。乙個驅動程式的注釋這樣認為,這種「令人厭惡的處理方法」是必需的,因為大多數實現都不允許應用程式設定tos欄位。

總長度欄位是指整個i p資料報的長度,以位元組為單位。利用首部長度欄位和總長度字段,就可以知道i p資料報中資料內容的起始位置和長度。由於該字段長1 6位元,所以i p資料報最長可達6 5 5 3 5位元組(回憶圖2 - 5,超級通道的m t u為6 5 5 3 5 。它的意思其實不是乙個真正的m t u—它使用了最長的i p資料報)。當資料報被分片時,該字段的值也隨著變化。

儘管可以傳送乙個長達6 5 5 3 5位元組的i p資料報,但是大多數的鏈路層都會對它進行分片。而且,主機也要求不能接收超過5 7 6位元組的資料報。由於t c p把使用者資料分成若干片,因此一般來說這個限制不會影響t c p。在後面的章節中將遇到大量使用u d p的應用(r i p,t f t p, b o o t p,d n s,以及s n m p),它們都限制使用者資料報長度為5 1 2位元組,小於5 7 6位元組。但是,事實上現在大多數的實現(特別是那些支援網路檔案系統n f s的實現)允許超過8 1 9 2位元組的i p資料報。

總長度欄位是i p首部中必要的內容,因為一些資料鏈路(如乙太網)需要填充一些資料以達到最小長度。儘管乙太網的最小幀長為4 6位元組,但是i p資料可能會更短。如果沒有總長度字段,那麼i p層就不知道4 6位元組中有多少是i p資料報的內容。

標識字段唯一地標識主機傳送的每乙份資料報。通常每傳送乙份報文它的值就會加1

rfc791 [postel 1981a]認為標識字段應該由讓ip傳送資料報的上層來選擇。假設有兩個連續的i p資料報,其中乙個是由t c p生成的,而另乙個是由u d p生成的,那麼它們可能具有相同的標識字段。儘管這也可以照常工作(由重組演算法來處理),但是在大多數從伯克利派生出來的系統中,每傳送乙個i p資料報,i p層都要把乙個核心變數的值加1,不管交給ip的資料來自哪一層。核心變數的初始值根據系統引導時的時間來設定。

t t l(t i m e - t o - l i v e)生存時間字段設定了資料報可以經過的最多路由器數。它指定了資料報的生存時間。t t l的初始值由源主機設定(通常為3 2或6 4),一旦經過乙個處理它的路由器,它的值就減去1。當該字段的值為0時,資料報就被丟棄,並傳送i c m p報文通知源主機。第8 章我們討論tr a c e r o u t e 程式時將再回來討論該欄位。

首部檢驗和字段是根據i p首部計算的檢驗和碼。它不對首部後面的資料進行計算。i c m p、i g m p、u d p和t c p在它們各自的首部中均含有同時覆蓋首部和資料檢驗和碼。

為了計算乙份資料報的i p檢驗和,首先把檢驗和字段置為0。然後,對首部中每個16 bit 進行二進位制反碼求和(整個首部看成是由一串16 bit的字組成),結果存在檢驗和字段中。當收到乙份i p資料報後,同樣對首部中每個16 bit 進行二進位制反碼的求和。由於接收方在計算過程中包含了傳送方存在首部中的檢驗和,因此,如果首部在傳輸過程中沒有發生任何差錯,那麼接收方計算的結果應該為全1。如果結果不是全1(即檢驗和錯誤),那麼i p就丟棄收到的資料報。但是不生成差錯報文,由上層去發現丟失的資料報並進行重傳。

i c m p、i g m p、u d p和t c p都採用相同的檢驗和演算法,儘管t c p和u d p除了本身的首部和資料外,在i p首部中還包含不同的字段。在rfc1071[braden, borman and patridge 1988]中有關於如何計算i n t e r n e t檢驗和的實現技術。由於路由器經常只修改t tl欄位(減1),因此當路由器**乙份報文時可以增加它的檢驗和,而不需要對i p 整個首部進行重新計算。r f c 1141mallory and kullberg 1990]為此給出了乙個很有效的方法。

但是,標準的bsd實現在**資料報時並不是採用這種增加的辦法。每乙份i p資料報都包含源i p位址和目的i p位址。我們在1 . 4節中說過,它們都是32 bit 的值。最後乙個欄位是任選項,是資料報中的乙個可變長的可選資訊。目前,這些任選項定義如下:

安全和處理限制(用於軍事領域)

記錄路徑(讓每個路由器都記下它的i p位址,)

時間戳(讓每個路由器都記下它的i p位址和時間,)

寬鬆的源站選路(為資料報指定一系列必須經過的i p位址,)

嚴格的源站選路(與寬鬆的源站選路類似,但是要求只能經過指定的這些位址,不能經過其他的位址)。這些選項很少被使用,並非所有的主機和路由器都支援這些選項。選項字段一直都是以32 bit作為界限,在必要的時候插入值為0的填充位元組。這樣就保證i p首部始終是32 bit 的整數倍(這是首部長度欄位所要求的)。

ip首部TCP首部

ip資料報的首部 version 版本號 如ipv4,ipv6 ihl inernet header length,ip包頭的長度 4位元組為1個單位來記錄 type of service 服務型別 d 若為0表示一般延遲,若為1表示為低延遲,t 若為0表示一般傳輸量,若為1表示高傳輸量 r 若為0...

IP首部詳解

4位版本 4 位首部長度 8 位服務型別 tos 16 位總長度 16 位識別符號 3 位標誌 13位片偏移 8 位生存時間 8 位協議 16位首部檢驗和 32 位源ip位址 32位目的 ip位址 32 位選項 若有 資料 首都長度 ip首部的長度,一般為 20b.版本 ip位址的版本,目前我們使用...

IP位址首部詳解

ip位址首部圖示 版本號 version 長度4位元。標識目前採用的ip協議的版本號。一般的值為0100 ipv4 0110 ipv6 ip包頭長度 header length 長度4位元。這個欄位的作用是為了描述ip包頭的長度,因為在ip包頭中有變長的可選部分。該部分佔4個bit位,單位為32bi...