Фрагментация и сборка были описаны исключительно в RFC 791. Пройдите через Internet Protocol Specification RFC. RFC имеет различные разделы, объясняющие фрагментацию и повторную сборку. Все ваши сомнения и вопросы хорошо удовлетворяются в нем.
Ans 1: Что касается длин пакета: Исходный пакет содержит 4000 байт. Этот пакет является полностью IP-пакетом и, следовательно, также содержит заголовок IP. Таким образом, длина полезной нагрузки на самом деле равна 4000 - (длина заголовка IP i. E. 20).
Фактическая полезная нагрузка Длина = 4000 - 20 = 3980
Теперь пакет фрагментирован из-за того, что длина больше, чем MTU (1500 байт).
Таким образом, первый пакет содержит 1500 байтов, который включает в себя заголовок IP + полезную нагрузку.
1500 = 20 (IP-заголовка) + 1480 (полезная нагрузка данных)
Аналогично для другого пакета.
Третий пакет должен содержать оставшиеся данные, оставшиеся (3980 - 1480 -1480) = 1020
Таким образом, длина пакета составляет 20 (IP-заголовок) + 1020 (полезная нагрузка) = 1040
Ans 2 : Смещение - это адрес или локатор, откуда данные начинаются со ссылкой на исходную полезную нагрузку данных. Для IP полезная нагрузка данных включает в себя все данные, которые после заголовка IP и заголовок Options. Таким образом, система/маршрутизатор принимает полезную нагрузку и делит ее на более мелкие части и сохраняет следы смещения со ссылкой на исходный пакет, чтобы можно было выполнить сборку.
, как указано на странице 12. RFC
"Поля смещения фрагмента сообщает приемник позиции фрагмента в исходной дейтаграмме. Фрагмент смещения и длины определяют часть исходной дейтаграммы охватываемой этот фрагмент. Флаг более-фрагментов указывает (путем сброса) последний фрагмент. Эти поля предоставляют достаточную информацию для повторной сборки дейтаграмм. «
Смещение фрагмента измеряется в единицах по 8 байт каждый. Он имеет 13-битное поле в заголовке IP. Как было сказано на странице 17 RFC
«Это поле указывает, где в дейтаграмму этот фрагмент belongs.The смещение фрагмента измеряется в единицах 8 октетов (64 бит). Первый фрагмент имеет нулевое смещение.»
Таким образом, как вы задавали вопрос о том, откуда это произошло, его стандарт был определен для спецификации протокола IP, где 8 октетов считаются одним значением. Это также помогает нам передавать большие пакеты через это.
Страница 28 из RFC пишет: * Фрагменты учитываются в единицах 8 октетов. Стратегия фрагментации сконструирована так, что нефрагментированная датаграмма имеет всю нулевую информацию фрагментации (MF = 0, смещение фрагмента = 0). Если интернет-датаграмма фрагментирована, ее часть данных должна быть , разбитой на восьми октетных границах. Этот формат позволяет 2 ** 13 = 8192 фрагментов по 8 октетов для всего 65536 октетов. Обратите внимание, что это согласуется с полем общей длиной дейтаграммы (конечно, заголовок учитывается в общей длине , а не во фрагментах). *
Спасибо! Это четко ответило на первую часть моего вопроса, но что касается второй части, почему мы делим 1480 на 8, чтобы получить смещение? – JimmyK
Я обновлю ответ. –
Большое спасибо, что отвечает всем! Мне просто интересно, разве мы ВСЕГДА разделим на 8? Существуют ли какие-либо обстоятельства, которые могут повлечь за собой разделение на другой номер? – JimmyK