在互聯網中,兩個互聯網模塊(即主機、路由器、網關等)之間的通信,是執行互聯網協議(IP,Internet Protocol)。互聯網協議(IP)規定了通信信息的數據傳輸格式,這稱為互聯網報文(internet datagram),或稱數據報。所謂互聯網報文,是指在一對互聯網模塊之間交換的數據單位(包括互聯網報頭)。在RFC 791《Internet Protocol》中規定了互聯網報文的格式,它是由報頭和報文數據信息構成。RFC 791規定的互聯網協議屬于IPv4版本。IPv4的報文格式如下圖0所示。
圖0:IPv4報文(Datagram)格式
欲詳細了解互聯網協議介紹的請進入。
一、報頭
由圖0可知,IPv4的報文格式是用二進制比特表示,4個字節(32比特)構成一個單元。互聯網報頭(Internet Header)是指“消息、段、數據報、數據的分組或塊的開頭的控制信息”。它分為固定長度部分和可變長度部分。報頭中每單元由一個或多個字段構成。每字段的長度(比特位)不同,但各字段的長度是固定的,這就是固定長度部分的報頭,由前12個字段構成,共占用20個字節。報頭可變長度部分只有最后一個字段,即“可選項(Optional)”字段。下述對各字段分別做一介紹。
1、版本(Version)字段:
版本(Version)字段表示互聯網報頭的格式。其字段長度為4比特。IPv4的該字段之值為“4”(二進制表示為0100)。該值是由RFC 1700《Assigned Numbers》規定的,RFC 1700對于互聯網協議體系(也稱套件)版本號碼(0~15)分配詳見下表1-1。
表 1-1:互聯網協議體系版本號的規定
2、報頭長度(IHL,即Internet Header Length)字段:
該字段長度為4比特。由于報頭中有可選字段,因而報頭長度不固定,此字段之值指明報頭為4字節的倍數。此字段的最小值為5,表示只有固定長度部分而無選項,即報頭長度為20字節;該4比特字段的最大值為15,故報頭最長為60字節;
3、服務類型(TOS,Type Of Service)字段:
服務類型字段的長度為8比特(1個字節)。該字段用于指明用戶期望的非量化的服務質量,IPv4對TOS字節中各比特的用途規定如下圖1-3所示,
圖 1-3:IPv4對服務類型比特的規定
其中:PPP(Precedence)表示優先權,3比特(第0~2比特),用于指明報文的重要性或優先級別,以及后續參數(D、T、R)映射為實際網絡的服務質量的方式;D(Delay attribute)表示延遲屬性,1比特(第3比特);T(Throughput attribute)表示吞吐率屬性,1比特(第4比特);R(Reliability attribute)表示可靠性屬性,1比特(第5比特);第6~7比特留作備用,其值恒為0。對于TOS前6比特的取值及含義具體詳見下表1-3-1。另外,RFC 795對在ARPANET、PRNET和SATNET內服務質量的映射作了具體的規定。
表 1-3-1:IPv4服務類型值
在實踐中,IPv4文本中對TOS字節中D、T、R比特的定義并未獲得實際應用,也未強制用戶使用上述比特。1981年的RFC 1700、1992年的RFC 1349和1993年的RFC 1455進一步規范了“優先級(Precedence)”之后5比特域的使用規則,將前4比特稱為TOS域,最后1比特稱為“必為零比特”(MBZ,即Must Be Zero)。此后,所有主機發送IP報文時都必須使用這5比特。下表1-3-2列出了RFC 1700和RFC 1349中總結的TOS域代碼和意義。這一規定的意圖在于利用TOS域作為路由器選擇路徑的基礎。
表 1-3-2:IPv4的TOS域之規定
從上面的討論我們可以看出:IPv4追求的服務質量是一種盡其所能的質量,在費用、可靠性、吞吐率、延時和安全性等5個方面選擇一個最重要的指標,請求網絡傳輸系統就其所能盡量滿足。這與X.25網絡和ATM網絡對服務質量的要求不同。
4、報文總長度(Internet Datagram Total Length)字段:
報文總長度字段長度為 16比特(兩個字節),用于指示報文(Datagram)總的長度,以8字節為單位,包括報頭和報文數據信息。允許IP報文的最大長度為65536字節。但由于實際網絡支持的長度可能不同,IPv4要求支持的最大報文長度至少為576字節,即至少允許存放512字節的用戶數據(64+512);
5、報文標志符(Identification)字段:
也為16比特長度的字段,發送方指定的一種標識值,用于幫助組合數據報的“片(Fragment)”。在該報文存活期內,在同一對通信目標間的報文中,此標志符之值必須惟一。因此,在報文“片”重新合成報文時,可用它作為“片”與原報文之間的關聯標志符。
注意:互聯網片(Internet Fragment)是指帶有互聯網報頭的互聯網數據信息的一部分數據。“片”由1個或多個8字節數據塊(“片塊”,Fragment Block)組成。
6、標志字段(Flags):
標志字段(Flags)用作各種控制標志。其字段長度為3比特,各比特的用意詳見下表1-6(注意:除最后一“片”外,前面的“片”必須為8字節(64比特)的整數倍)。
表 1-6:標志字段(Flags)各比特用用意
7、片位移(Fragment Offset)字段:
片位移字段的長度為13比特(因為前面標志字段占用3比特)。該字段表示該“片”在數據報中的位置,片偏移量以8個字節(64位)為單位測量,第一個片的偏移量為0。片由1個或多個8字節組成的數據塊(“片塊”,Fragment Block)。每個數據片中的片塊數(NFB,即Number of Fragment Block)將用作片位移的計數增量。例如:報文的第一“片”的該字段為“0”,若該“片”為512字節(NFB=64),分片后第2個報文的片位移字段內應為“64”,余類推。由于IP報文的最大長度為65536字節,故最大片位移量為8191。
8、存活期(TTL,Time To Live)字段:
TTL字段長度為8比特,用于指明報文在互聯網內還能夠生存的時間(單位:秒)。經過一個路由器,處理報頭的模塊至少對該值減1(即使處理時間不到1秒),當該值減為0時,該報文被丟棄,以防止報文在互聯網內長時間循環。目前推薦使用的存活期(TTL)的缺省初始值為64。
存活期以時間秒為單位進行計算和處理在實踐中很難進行,標準文本中也沒說怎么實現。如果以絕對時間為基礎進行計算,就要求全網時鐘同步或具有某種“時戳”(Time Stamping)系統,而該功能屬于選項,并非所有網絡都支持。在實踐中,最簡單的方法是計算跨過的中間節點數(Hop),許多IPv4協議實現就是這樣做的,IPv6已將該字段改為“Hop Limit”。
9、協議(Protocol)字段:
該字段長度為8比特。用于標志在IP報文用戶數據字段內部裝載的下層協議數據使用的協議(如:TCP),RFC 1700對此字段數字作了明確的規定。下面將IP層之上的典型協議十進制代碼列舉如下,詳見表1-9。
表 1-9:相關標準對典型IP上層協議的編號列表及協議的中英文對照
10、報頭校驗和(Header Checksum)字段:
該字段長度為16比特,只對報頭進行校驗和。由于一些報頭字段發生了變化(例如,生存時間),因此在處理互聯網報頭的每個點上都要重新計算和驗證。IPv4的16位校驗碼采用簡單的16位求反碼的方式獲得,而沒有采用循環冗余校驗方式.。
11、源地址/目的地址(Source/Destination Address)字段:
源地址和目的地址的字段長度均為32比特(4個字節),并有其專門的格式。
欲詳細了解IPv4的地址(源地址和目的地址)技術要求的請進入。
12、可選項(Optional)字段:
該字段是報文頭中的可選擇部分。其字段長度可變,最大總長度為44字節。為了與報文長度為4字節的整倍數相適應,選項部分總長度也必須為4字節的整倍數,否則應通過填充字段(Padding)補齊。應當指出:盡管單個報文中可能有一個或一個以上的選項,也可能無選項,但實現IPv4協議的軟、硬件則必須支持所有種類的選項。
選項具有下圖1-12所示的通用格式,但某些選項可能只有第1字節(選項類型Option Type)。選擇類型又由3個字段(Copied Flag,Option Class和Option Number)組成,這3個字段的取值要求詳見下表1-12-1。
圖 1-12:IP報文選項通用格式示意圖
表 1-12-1:選擇類型中各字段的取值
下表1-12-2為典型IPv4選項的內部字段及選項用途說明。目前相關標準文本(RFC 1700)中定義了19種選項(注意:表1-3-1中只列出了其中的8種典型選項),它們分別與安全、源選徑、路徑記錄、連續報文流和報文在網內傳輸過程中加蓋時戳等有關。
表 1-12-2:典型IPv4選項的內部字段及選項用途說明
二、報文的數據信息
報頭后緊跟報文的數據信息。報文的數據信息即兩個互聯網模塊間應傳送的用戶數據。包括報頭(含固定長度部分和可變長度部分)最大長度為65536字節(4字節的整倍數)。
三、報文的示例
下圖3是一個IPv4的攜帶最小數據的互聯網報文的例子(注意,每個刻度表示一個比特的位置)。其報頭由5個32比特(4字節)組成,數據報的總長度為21個八位字節。這個數據報是一個完整的數據報(無“片”段)。
圖 3:IPv4的攜帶最小數據的互聯網報文示例
四、報文中比特的傳輸順序
報文中報頭和數據的傳輸順序被解析為八位字節級別。當圖表顯示一組八位元時,這些八位位元的傳輸順序是它們在英語中閱讀的正常順序。例如,在下圖4中(每個刻度表示一個比特的位置),八位位元是按照十進制的編號順序傳輸的。當八位字節表示一個數字量時,圖中最左邊的位是高階或最高有效位。也就是說,十進制標記為0的位是最高有效位。
圖 4:比特的傳輸順序
欲詳細了解互聯網IPv6報文格式的請進入。