當目的主機從相同的來源端到一連串資料封包時,必須判斷者皆資料封包中是否有任何屬於某個原始的,較大的資料封包分段。如果某些資料封包是資料分段,則他必須進一步判斷何時收到了最後一份分段,以及應該如何將所收到的分段重組回原本的資料封包。為了讓目的主機能夠進行這些重組工作,IPV4在IP資料封包的標頭加入了識別碼、旗標、以及分段偏移量欄位。在建立資料封包時,傳送端主機會在資料封包上標記一個識別碼,以及來源端與目的端位址。通常,傳送端主機每送出一個封包,就會將識別碼遞增。當路由器需要分段資料封包時,所有產生的資料封包(即分段)都會被標記以來源端、目的端的位址,和原始資料封包的識別碼。當目的端受到來自相同傳送端主機的一連串資料封包時,他可以檢查這些資料封包的識別碼,以判斷那些資料封包實際上是屬於同一個較大資料封包的分段。因為IP是不可靠的服務,所以可能會有一或多個分段永遠無法地達目的地。因此為了讓目的端主機可以完全確定已經收到原始資料封包的最後一個分段,最後一個分段的旗標位元會被設定為0,而其他分段的旗標位元則會被標示為1,為了讓目的地可以判斷是否有分段遺失了(也為了讓他能依照原來的順序重組這些分段),偏移量欄位會被用來標記該分段位於原始IP資料封包中的位置。
版本 | 標頭長度 | 服務類型 | 資料封包長度(位元組) | ||
16位元識別碼 | 旗標 | 13位元分段偏移量 | |||
生存期 | 上層協定 | 標頭檢查和 | |||
32位元來源端IP位址 | |||||
32位元目的端IP位址 | |||||
選項(可無) | |||||
資料 |
表1.1資料封包格式
IP傳輸實例討論:
設一4000位元組資料封包(20位元組為IP表頭加上3,980位元組資料內容)抵達路由器,並須轉送往一條MTU為1,500位元組的連結。原始資料封包的3,980資料位元組,必須被分隔成三個個別的分段(每個分段也都是IP資料封包),假設原始資料封包所標記的識別碼為777。
分段 | 位元組 | ID | 偏移量 | 旗標 |
第一個分段 | IP資料封包的欄位有1,480位元組 | 識別碼777 | 偏移量0(0表示資料應放入位元組0開始的位置) | 旗標=1(表示還有別的資料) |
第二個分段 | IP資料封包的欄位有1,480位元組 | 識別碼777 | 偏移量185(表示資料應放入位元組1,480開始的位置,註185*8=1,480) | 旗標=1(表示還有別的資料) |
第三個分段 | IP資料封包的欄位有(3,980-1,480-1,480)位元組 | 識別碼777 | 偏移量370(表示資料應該要放入位元組2,960開始的位置,註:370*8=2,960) | 旗標=0(表示這是最後一份資料) |
表1.2實例討論
No comments:
Post a Comment