Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Описание алгоритма фрагментации и сборки IP дейтаграмм.




Задание

Разработать класс Buffer, представляющий буфер памяти. Разработанный класс должен обеспечивать управление динамической памятью. При разработке использовать умный указатель std::shared_ptr и контейнер std::vector. Разработанный класс должен представлять возможность задавать смещение относительно начала данных.

Разработать класс IpDatagram, содержащий экземпляр класса Buffer. Класс должен хранить данный в формате, описанном в RFC 791. Класс должен представлять методы для получения и установки всех полей, описанных в RFC 791. Данные датаграммы должны быть представлены классом Buffer со смещением равным длине заголовка. При возврате данных не используйте копирование.

Разработайте консольное приложение. Скопируйте из Wireshark бинарное представление IP-датагарамы. В программе создайте экземпляр класса Buffer из этих данных. Созданный экземпляр передайте в конструктор класса IpDatagram. Выполните чтение каждого поля заголовка. Выведите на экран значения всех полей и сравните с теми, которые отображаются в Wireshark. По очереди меняйте каждое поле. После каждого изменения убедитесь, что значения других полей остались прежними.

 

Описание структуры IP дейтаграммы и назначения всех её полей.

Пакет IP состоит из заголовка и поля данных. Заголовок пакета имеет следующие поля:

Версия (Version) Длина заголовка (Header Length) Тип сервиса (Type of Service) Полная длина пакета (Total Length)
Общий идентификатор (Identification) Флаг (Flag) Фрагментное смещение (Fragment Offset)
Время жизни (TTL - Time To Live) Тип протокола (Protocol) Контрольная сумма заголовка (Header Checksum)
IP-адрес отправителя (Source Address)
IP-адрес получателя (Destination Address)
Вспомогательные параметры IP (опции IP) (Options) Заполнитель (Padding) (дополнение до 32 бит)
Данные (Data) ...
           

· Поле Номер версии (VERS) указывает версию протокола IP. Сейчас повсеместно используется версия 4 и готовится переход на версию 6, называемую также IPng (IP next generation).

  • Поле Длина заголовка (HLEN) пакета IP занимает 4 бита и указывает значение длины заголовка, измеренное в 32-битовых словах. Обычно заголовок имеет длину в 20 байт (пять 32-битовых слов), но при увеличении объема служебной информации эта длина может быть увеличена за счет использования дополнительных байт в поле Резерв (IP OPTIONS).
  • Поле Тип сервиса (SERVICE TYPE) занимает 1 байт и задает приоритетность пакета и вид критерия выбора маршрута. Первые три бита этого поля образуют подполе приоритета пакета (PRECEDENCE). Приоритет может иметь значения от 0 (нормальный пакет) до 7 (пакет управляющей информации). Маршрутизаторы и компьютеры могут принимать во внимание приоритет пакета и обрабатывать более важные пакеты в первую очередь. Поле Тип сервиса содержит также три бита, определяющие критерий выбора маршрута. Установленный бит D (delay) говорит о том, что маршрут должен выбираться для минимизации задержки доставки данного пакета, бит T - для максимизации пропускной способности, а бит R - для максимизации надежности доставки.
  • Поле Общая длина (TOTAL LENGTH) занимает 2 байта и указывает общую длину пакета с учетом заголовка и поля данных.
  • Поле Идентификатор пакета (IDENTIFICATION) занимает 2 байта и используется для распознавания пакетов, образовавшихся путем фрагментации исходного пакета. Все фрагменты должны иметь одинаковое значение этого поля.
  • Поле Флаги (FLAGS) занимает 3 бита, оно указывает на возможность фрагментации пакета (установленный бит Do not Fragment - DF - запрещает маршрутизатору фрагментировать данный пакет), а также на то, является ли данный пакет промежуточным или последним фрагментом исходного пакета (установленный бит More Fragments - MF - говорит о том пакет переносит промежуточный фрагмент).
  • Поле Смещение фрагмента (FRAGMENT OFFSET) занимает 13 бит, оно используется для указания в байтах смещения поля данных этого пакета от начала общего поля данных исходного пакета, подвергнутого фрагментации. Используется при сборке/разборке фрагментов пакетов при передачах их между сетями с различными величинами максимальной длины пакета.
  • Поле Время жизни (TIME TO LIVE) занимает 1 байт и указывает предельный срок, в течение которого пакет может перемещаться по сети. Время жизни данного пакета измеряется в секундах и задается источником передачи средствами протокола IP. На шлюзах и в других узлах сети по истечении каждой секунды из текущего времени жизни вычитается единица; единица вычитается также при каждой транзитной передаче (даже если не прошла секунда). При истечении времени жизни пакет аннулируется.
  • Идентификатор Протокола верхнего уровня (PROTOCOL) занимает 1 байт и указывает, какому протоколу верхнего уровня принадлежит пакет (например, это могут быть протоколы TCP, UDP или RIP).
  • Контрольная сумма (HEADER CHECKSUM) занимает 2 байта, она рассчитывается по всему заголовку.
  • Поля Адрес источника (SOURCE IP ADDRESS) и Адрес назначения (DESTINATION IP ADDRESS) имеют одинаковую длину - 32 бита, и одинаковую структуру.
  • Поле Резерв (IP OPTIONS) является необязательным и используется обычно только при отладке сети. Это поле состоит из нескольких подполей, каждое из которых может быть одного из восьми предопределенных типов. В этих подполях можно указывать точный маршрут прохождения маршрутизаторов, регистрировать проходимые пакетом маршрутизаторы, помещать данные системы безопасности, а также временные отметки. Так как число подполей может быть произвольным, то в конце поля Резерв должно быть добавлено несколько байт для выравнивания заголовка пакета по 32-битной границе.

Описание алгоритма фрагментации и сборки IP дейтаграмм.

Фрагментация и сборка производятся автоматически, не требуя от отправителя специальных действий. Каждая фрагментированная часть исходной дейтаграммы имеет тот же формат. Использование фрагментации повышает вероятность потери дейтаграммы, так как потеря даже одного фрагмента приводит к потере всей дейтаграммы. Сборка фрагментов дейтаграммы осуществляется на месте назначения. Такой метод позволяет маршрутизировать фрагменты независимо и требует промежуточной буферизации на маршрутизаторах. Поля в заголовке дейтаграммы — «Идентификатор», «Флаги» и «Смещение фрагмента» — управляют процессами фрагментации и сборки дейтаграммы.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...