回答
除最後一個片段之外的每個片段都必須包含8個字節數據的倍數。
片段偏移量可以容納8192(2^13)個單元,但數據報不能有8192 * 8 = 65536個字節的數據,因爲IP頭的「總長度」字段記錄包括頭和數據的總大小。
一個IP報頭至少是20個字節長,所以爲最大值「碎片偏移」被限制爲8189,其餘地中最後一個片段的3個字節。
希望這會有所幫助。
注意,分段偏移字段中的8字節單位表示,而不是在字節。 這就是爲什麼除了最後一個片段之外,每個片段內的有效載荷大小必須是8個字節的倍數的原因。
作爲偏移是編碼13位上的片段,它導致它的範圍是單位8個字節8191之間0和。但是,由於總長也考慮了IP報頭,所以片段偏移最大限制實際上是8189個單元,而不是8191個單元,參見下面:
總長度被編碼在16個位上,這意味着它被限制爲65535字節。 然後,由於IP報頭至少有20個字節,因此Payload限制爲最大65535字節 - 20字節= 65515字節。 將這些65515字節以8字節爲單位進行劃分,結果可能會出現最大8189個單位,因此碎片偏移限制爲最大8189個單位。
一個IP片段具有設置爲8189該最大值的片段偏移值,可以具有的最大3個字節的有效載荷:
最大65535個字節 - 最小20個字節 - (8189個單位每單位* 8個字節) =最大3個字節
Rurre
韋恩說加上偏移實際上是在終端主機使用,使得它們能夠有效地高效率地將片段存儲在存儲器中,即,在一排的事實什麼。偏移顯示片段相對於整個數據報的相對位置。這就是爲什麼偏移量必須是IP片段必須是8個字節的倍數,因爲你實際上做的是右移3位(因此是13位)。
這裏(https://cs.nyu.edu/courses/fall98/G22.2262-001/class11.txt)它被賦予的是:分段偏移以8個字節(64位)爲單位進行測量。這是因爲片段偏移字段比總長度字段即16比特(並且2^3是8)短3比特。
- 1. 爲什麼字段分隔符必須只有一個字節?
- 2. 爲什麼我們必須在hadoop中使用多個節點?
- 3. 爲什麼sizeof(13.33)是8個字節?
- 4. 爲什麼JUnit中的@Rule註釋字段必須公開?
- 5. 爲什麼你必須將一個字節的按位操作轉換爲Java中的一個字節?
- 6. 爲什麼必須在運行時構建一個字符串?
- 7. 爲什麼setOnClickListener()必須在onCreate()中?
- 8. 爲什麼模板必須在類
- 9. 爲什麼相機必須在OpenGL
- 10. 爲什麼必須N-1在C
- 11. 爲什麼我必須在通用類
- 12. 爲什麼1字節等於8位?
- 13. 爲什麼Java對象必須是8的倍數?
- 14. 爲什麼垂直LED的數量必須是8的倍數?
- 15. 字段必須是數字
- 16. 爲什麼一個type = html gadget必須包含CDATA部分?
- 17. 什麼包必須在AS2
- 18. 爲什麼我必須在這段代碼中使用(flush)?
- 19. 爲什麼我必須給它一個名字?
- 20. 爲什麼必須在編譯時確定字段成員的初始化值?
- 21. 爲什麼我必須將此節點分配給樣式表中的變量?
- 22. 爲什麼不字節[] B =新的字節[8]();工作?
- 23. pyDes解密「數據必須是8字節的倍數」
- 24. 如何解決錯誤鹽必須是8字節長
- 25. 爲什麼在python中迭代字典時必須調用.iteritems()?
- 26. 爲什麼字體必須在RTF後設置?
- 27. 爲什麼在引用文字時必須使用const引用
- 28. pcap爲什麼總是8個字節的數據包...爲什麼?
- 29. 爲什麼我必須點擊兩次?
- 30. 爲什麼必須使用「throws IOException」
謝謝回答@Wayne剪板機,正如你所說的:片偏移量可容納8192(2^13)爲單位,但該數據報不能擁有8192 * 8 **什麼是平均單位沒有ü意味着字節**?] = 65536字節的數據[**爲什麼?**],因爲IP報頭的「總長度」字段記錄包括報頭和數據的總大小[**我所知道的是totallength =報頭大小+有效載荷。總和爲16,所以這個值會上升到2^16,這就是65536,我認爲是錯誤的嗎?**]。 – user991482