您好,登錄后才能下訂單哦!
一、IP數據報的格式
IP數據報的首部長度和數據長度都是可變長的,但總是4字節的整數倍。
(1)對于IPv4 ,4位版本字段是4。
(2)4位首部長度的數值是以4字節為單位的,最小值為5,也就是說首部長度最小是4x5=20字節, 也就是不帶任何選項的IP首部,4位能表示的最大值是15,也就是說首部長度最大是60字節。
(3)8位TOS字段有3個位用來指定IP數據報的優先級(目前已經廢棄不用),還有4個位表示可選的服務類型(最小延遲、最大呑吐量、最大可靠性、最小成本),還有一個位總是0。
(4)16位總長度是整個數據報(包括IP首部和IP層payload)的字節數。
(5)每傳一個IP數據報,16位的標識加1,可用于分片和重新組裝數據報。
(5)3位標志和13位片偏移用于分片。
(6)TTL(Time to live)是這樣用的:源主機為數據包設定一個生存時間,比如64,每過一個路由器就把該值減1,如果減到0就表示路由已經太長了仍然找不到目的主機的網絡,就丟棄該包,因此這個生存時間的單位不是秒,而是跳(hop)。
(7)協議字段指示上層協議是TCP、UDP、ICMP還是IGMP。
(8)校驗和,只校驗IP首部,數據的校驗由更高層協議負責。
(9)IPv4的IP地址長度為32位。
二、分片
當要發送的IP數據報的長度超出了最大傳輸單位MTU,且允許分片時,就會進行IP分片。
一個未分片的數據報的分片信息字段全為0,即多個分片標志位為0,并且片偏移量為0。分片一個數據報,需執行以下幾個步驟:
1.檢查DF標志位,查明是否允許分片。如果設置了該位,則數據報將被丟棄,并將一個ICMP錯誤返回給源端。
2.基于MTU值,把數據字段分成兩個部分或者多個部分。除了最后的數據部分外,所有新建數據選項的長度必須為8個字節的倍數。
3.每個數據部分被放入一個IP數據報。這些數據報的報文頭略微修改了原來的報文頭。
4.除了最后的數據報分片外,所有分片都設置了多個分片標志位。
5.每個分片中的片偏移量字段設為這個數據部分在原來數據報中所占的位置,這個位置相對于原來未分片數據報中的開頭處。
6.如果在原來的數據報中包括了選項,則選項類型字節的高位字節決定了這個信息是被復制到所有分片數據報,還是只復制到第一個數據報。
7.設置新數據報的報文頭字段及總長度字段。
8.重新計算報文頭部校驗和字段。
此時,這些分片數據報中的每個數據報如一個完整IP數據報一樣被轉發。IP獨立地處理每個數據報分片。數據報分片能夠通過不同的路由器到達目的。如果它們通過那些規定了更小的MTU網絡,則還能夠進一步對它們進行分片。
三、組裝
為了重新組合這些數據報分片,接收主機在第一個分片到達時分配一個存儲緩沖區。這個主機還將啟動一個計時器。當數據報的后續分片到達時,數據被復制到緩沖區存儲器中片偏移量字段指出的位置。當所有分片都到達時,完整的未分片的原始數據包就被恢復了。處理如同未分片數據報一樣繼續進行。
四、三位標志
第一個比特保留為以后用;第二個比特是“不分片”比特,若為1,IP將不對數據報進行分片,若無法將此數據報通過任何可用網絡轉發,則丟棄,并發送一個ICMP差錯報文給起始端,若為0, 則在需要時將數據報分片;第三個比特是“更多分片”比特,為1,表示后面還有更多的分片,為0,則表示是最后的分片。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。