Функция или цель протокола Internet состоит в передаче датаграммы
через набор объединенных компьютерных сетей. Это осуществляется
посредством передачи датаграмм от одного модуля Internet к другому до
тех пор, пока не будет достигнут получатель. Модули Internet находятся
на хостах и шлюзах системы Internet. Датаграммы направляются с одного
модуля Internet на другой через конкретные компьютерные сети, основанные
на интерпретации Internet адресов. Таким образом, одним из важных
механизмов протокола Internet является Internet адрес.
При передаче сообщений с одного Internet модуля на другой датаграммы
могут нуждаться в прохождении через сети, для которых максимальный
размер пакета меньше, чем размер датаграммы. Чтобы преодолеть эту
сложность, в протокол Internet включен механизм фрагментации.
Адресация. В протоколе сделано разграничение между именами, адресами
и маршрутами [4]. Имя показывает искомый нами объект. Адрес показывает
его местонахождение. Internet имеет дело с адресами. Перевод имен в
адреса является задачей протоколов более высокого уровня (прикладных
программ или протоколов передачи синхронизации с хоста на хост).
Собственно модуль Internet осуществляет отображение адресов Internet на
адреса локальной сети. Создание карты адресов локальной сети для
получения маршрутов - задача процедур более низкого уровня (процедур
локальной сети или шлюзов).
Адреса имеют фиксированную длину четыре октета (32 бита). Адрес
начинается с сетевого номера, за которым следует локальный адрес
(называемый полем остатка "rest"). Существуют три формата или класса
адресов Internet. В классе a самый старший бит нулевой. Следующие 7 бит
определяют сеть. а последние 24 бита - локальный адрес. В классе b самые
старшие два бита равны соответственно 1 и 0, следующие 14 бит определяют
сеть, а последние 16 бит - локальный адрес. В классе c три самых старших
бита равны соответственно 1,1 и 0, следующие 21 бит определяют сеть, а
последние 8 бит - локальный адрес.
При отображении карты Internet адресов на адреса локальной сети
следует соблюдать осторожность. Единичный хост-компьютер должен уметь
работать так, как если бы на его месте существовало несколько отдельных
хост-компьютеров для использования нескольких адресов Internet.
Некоторые хост-компьютеры будут также иметь несколько физических
интерфейсов (multi-homing).
Таким образом, следует обеспечить каждый хост-компьютер несколькими
физическими сетевыми интерфейсами, имеющими по несколько логических
адресов Internet.
Примеры построения карты адресов можно найти в документе "Address
Mapping" [5].
Фрагментация. Фрагментация Internet датаграммы необходима, когда эта
датаграмма возникает в локальной сети, позволяющей работать с пакетами
большого размера, и затем должна пройти к получателю через другую
локальную сеть, которая ограничивает пакеты меньшим размером.
Internet датаграмма может быть помечена как нефрагментируемая. Любая
Internet датаграмма, помеченная таким образом, не может быть
фрагментирована модулем Internet ни при каких условиях. Если же Internet
датаграмма, помеченная как нефрагментируемая, тем не менее не может
достигнуть получателя без фрагментации, то вместо этого она будет разрушена.
Фрагментация, перенос и сборка в локальной сети, невидимые для модуля
Internet протокола, называются внутрисетевой фрагментацией и могут быть
всегда использованы [6].
Необходимо, чтобы Internet процедуры фрагментации и сборки могли
разбивать датаграмму на почти любое количество частей, которые
впоследствии могли бы быть вновь собраны. Получатель фрагмента
использует поле идентификации для того, чтобы быть убежденным в том, что
фрагменты различных датаграмм не будут перепутаны. Поле смещения
фрагмента сообщает получателю положение фрагмента в исходной датаграмме.
Смещение фрагмента и длина определяют кусок исходной датаграммы,
принесенный этим фрагментом. Флаг "more fragments" показывает
(посредством перезагрузки) появление последнего фрагмента. Эти поля дают
достаточное количество информации для сборки датаграмм.
Поле идентификации позволяет отличить фрагменты одной датаграммы от
фрагментов другой. Модуль Internet, отправляющий Internet датаграмму,
устанавливает в поле идентификации значение, которое должно быть
уникальным для данной пары отправитель - получатель, а также время, в
течении которого датаграмма будет активна в системе Internet. Модуль
протокола, отправляющий нерасчлененную датаграмму, устанавливает в нуль
флаг "more fragments" и смещение во фрагменте.
Чтобы расчленить большую Internet датаграмму, модуль протокола
Internet (например, шлюз), создает две новые Intenet датаграммы и
копирует содержимое полей Internet заголовка из большой датаграммы в оба
новых Internet заголовка. Данные из старой датаграммы делятся на две
части по границе на очередном восьмом октете (64 бита). Полученная таким
образом вторая часть может быть кратна 8 октетам, а может и не быть, но
первая часть кратна всегда. Заказывается количество блоков первой части
NFB (количество блоков фрагмента). Первая часть данных помещается в
первую новую Internet датаграмму, в поле общей длины помещается длина
первой датаграммы. Флаг "more fragments" устанавливается в единицу.
Вторая часть данных помещается во вторую новообразованную Internet
датаграмму, в поле общей длины заносится длина второй датаграммы. В поле
смещения фрагмента во второй Internet датаграмме устанавливается
значение такого же поля в исходной большой датаграмме, увеличенное на NFB.
Эта процедура может быть обобщена на случай многократного расщепления
исходной датаграммы.
Чтобы собрать фрагменты Internet датаграммы, модуль протокола
Internet (например, модуль на хост-компьютере) объединяет Internet
датаграммы, имеющие одинаковые значения в полях идентификатора,
отправителя, получателя и протокола. Собственно объединение заключается
в помещении данных из каждого фрагмента в позицию, указанную в заголовке
Internet пакета в поле "fragment offset". Первый фрагмент будет иметь в
поле "fragment offset" нулевое значение, а последний фрагмент будет
иметь флаг "more fragments", вновь установленный в нуль.
|