Фрагментация дейтаграммы IР необходима, когда она создается в локальной сети, которая допускает большой размер пакета, и, чтобы достичь места назначения, должна пересекать локальную сеть, ограничивающую пакеты до меньшего размера.
Дейтаграмма IР может быть помечена как "не фрагментировать". Любая помеченная таким образом дейтаграмма IР не будет фрагментироваться ни при каких обстоятельствах. Если дейтаграмма IР, помеченная "не фрагментировать", не может быть доставлена к своему месту назначения без фрагментации, она будет отбрасываться. Фрагментация, передача и сборка в локальной сети, которые не видны для модуля протокола IР, называются фрагментацией интрасети.
Фрагментация IР и процедура сборки должны иметь возможность разбить дейтаграмму на произвольное число фрагментов, которые можно в дальнейшем собрать снова. Получатель фрагментов использует поле идентификации для обеспечения того, что фрагменты различных дейтаграмм не смешиваются. Поле сдвига фрагмента и длина определяют часть исходной дейтаграммы, содержащейся в этом фрагменте. Флаг "дополнительные фрагменты" указывает (будучи сброшенным) последний фрагмент. Эти поля предоставляют достаточно информации для сборки дейтаграмм.
Поле идентификации используется для различения фрагментов одной дейтаграммы от фрагментов другой. Модуль исходного протокола дейтаграммы IР задает в поле идентификации значение, которое должно быть уникальным для этой пары источник-место назначения и протокола, пока дейтаграмма будет активной в системе Интернет. Модуль исходного протокола всей дейтаграммы задает флаг "дополнительные фрагменты" равным нулю и сдвиг фрагмента как ноль.
Чтобы фрагментировать длинную дейтаграмму IР, модуль протокола IР (например, в шлюзе) создает две новые дейтаграммы IР и копирует содержимое полей заголовка IР из длинной дейтаграммы в оба новых заголовка IР. Данные длинной дейтаграммы делятся на две части по границе восьми октетов (64 бита) (вторая часть, в отличие от первой, может не быть целым, кратным восьми октетам). Вызовите число восьмиоктетных блоков в первой части NFB (для числа блоков фрагментов). Первая часть данных размещается в первой новой дейтаграмме IР, и поле общей длины задается равным длине первой дейтаграммы. Флаг "дополнительные фрагменты" задается равным единице. Вторая часть данных помещается во второй новой дейтаграмме IР, и поле общей длины задается равным длине второй дейтаграммы. Флаг "дополнительные фрагменты" имеет то же самое значение, что и длинная дейтаграмма. Поле сдвига фрагмента второй новой дейтаграммы IР задается равным значению этого поля в длинной дейтаграмме плюс NFB.
Эта процедура может быть обобщена для разбиения на п частей. Чтобы собрать фрагменты дейтаграммы IР, модуль протокола IР (например, на хосте назначения) объединяет дейтаграммы IР, которые имеют одно и то же значение для четырех полей: идентификации, источника, места назначения и протокола. Сборка осуществляется помещением порции данных каждого фрагмента в относительную позицию, указанную сдвигом фрагмента в заголовке IР этого фрагмента. Сдвиг фрагмента равен нулю, а флаг "дополнительные фрагменты" последнего фрагмента будет сброшен в ноль.
Использование параметров задержки, пропускной способности и надежности может увеличить стоимость службы. Во многих сетях наилучшие показатели для одного из этих параметров сочетаются с наихудшими для другого. Почти во всех случаях по крайней мере два из этих трех указателей должны быть заданы. Тип службы используется для определения обработки дейтаграммы во время ее передачи через систему Интернет. Рассмотрим каждый из этих вариантов подробнее.
Задержка Если задать поле задержки как 1, то маршрутизатор IP будет выбирать тот маршрут к месту назначения, который имеет наименьшую задержку. Например, маршрутизатор IP выберет низкоскоростную наземную линию, а не спутниковую линию с более высокой задержкой, даже если последняя имеет большую полосу пропускания. Интерактивные сеансы, такие как telnet, могут требовать этот тип обслуживания.
Пропускная способность Когда бит пропускной способности задан как 1, маршрутизатор IP будет выбирать маршрут с наибольшей пропускной способностью. В этом случае будет выбрана спутниковая, а не наземная линия с более низкой скоростью из предыдущего примера, так как она ее пропускная способность выше. Если для загрузки большого файла используется такое приложение, как FTP, оно много выиграет от такой службы.
Надежность Здесь также имеются две возможности, нормальная и высокая. Если задать это поле как 1, то маршрутизатор IP будет принимать решение первыми во время периодов перегрузки отбрасывать дейтаграммы с нормальной надежностью.
Поле полной длины Следующее поле (длиной 16 битов) используется для указания общей длины дейтаграммы. Она измеряется в октетах и включает заголовок IP и данные. Размер поля позволяет длине дейтаграммы доходить до 65635 октетов. Такие длинные дейтаграммы являются непрактичными для большинства хостов и сетей. Все хосты должны быть готовы принять дейтаграммы до 576 байтов (целые или фрагментирован-ные). Рекомендуется, чтобы хосты посылали дейтаграммы больше 576 байтов, только если есть уверенность, что место назначения готово принять дейтаграммы большего размера.
Число 576 выбрано для того, чтобы предоставить возможность передать блок данных разумного размера в дополнение к требуемой информации заголовка. Например, этот размер позволяет поместить в дейтаграмме блок данных в 512 октетов плюс 64 октета заголовка. Максимальный заголовок IP имеет 60 байтов, а типичный заголовок IP — 20 байтов, не учитывая вариантов, предоставляющих резерв для заголовков протоколов более высокого уровня.
Сетевые протоколы предоставляют так называемые службы канала данных и составляют нижние три уровня модели OSI. Эти протоколы обрабатывают информацию адресации и маршрутизации, контроль ошибок и запросы повторной пересылки. Сетевые протоколы определяют также правила для коммуникации в сетевом окружении, таком как Ethernet или Token Ring. Наиболее популярные сетевые протоколы перечислены ниже:
1. IP (Internet Protocol), протокол TCP/IP для маршрутизации и пересылки пакетов.
2. IPX (Internetwork Packet Exchange), протокол NetWare для пересылки пакетов и маршрутизации.
3. NWLink, реализация Microsoft протокола IPX/SPX.
4. NetBEUI, транспортный протокол, который предоставляет службы транспорта данных для сеансов NetBIOS и приложений.
5. DDP (Datagram Delivery Protocol), протокол транспорта данных AppleTalk.
Мы увидели, как эти протоколы укладываются в модель OSI, и получили представление о функциях каждого из них. Теперь следует рассмотреть, как все это отображается в совокупности, после чего можно исследовать различия в поведении этих протоколов, как используется каждый из них, а также различные уровни функциональности.
Второй бит является флагом дополнительных фрагментов, сообщающим, остались ли дополнительные фрагменты для передачи. Если он сброшен в О, то это означает, что это последний фрагмент; если он установлен в 1, то существуют дополнительные фрагменты для передачи. Флаг дополнительных фрагментов всегда установлен в 1 в первом фрагменте и во всех срединных фрагментах. Он сброшен в 0 в последнем фрагменте.
Поле сдвига фрагмента имеет в длину 13 битов и указывает, где в дейтаграмме расположен этот фрагмент. Сдвиг фрагмента измеряется в единицах по восемь байтов (64 бита). Первый фрагмент имеет сдвиг ноль. Это используется для правильной сборки первоначальной полезной нагрузки 1Р. Полезная нагрузка фрагментируется по восьмибайтовым границам, называемым блоками фрагмента, и значение сдвига фрагмента является блоком фрагмента, где фрагмент начинается. 13 битов в поле сдвига фрагмента и каждое число в счетчике, представляющее восемь октетов, допускают общую нагрузку 65536 октетов, фрагментированных на 8192 фрагментов. На практике полезная нагрузка 1Р может иметь максимальный размер только 65515 (1Р МТ1Л, равное 65535 байтов, минус минимальный размер заголовка 1Р, равного 20 байтам.)
1. Предположим, что имеется пакет ГР в 1500 байтов с 20-байтовым заголовком 1Р и 1480-байтовой полезной нагрузкой. При фрагментиро-вании для переноса по 576-байтовой сети каждый фрагмент будет иметь свой собственный 20-байтовый заголовок 1Р и максимальную нагрузку 1Р в 522 байта (что соответствует 69 блокам фрагментов). При создании фрагментов первоначальный заголовок 1Р копируется (хотя не все параметры обязательно будут скопированы), и затем изменяются следующие поля: длина заголовка, ТТЬ, общая длина, МЕ, сдвиг фрагмента и контрольная сумма заголовка.
2. В приведенном выше примере нагрузка в 1480 байтов делится на три фрагмента. Первый фрагмент состоит из 69 блоков фрагментов, второй — из 69 блоков фрагментов, а последний имеет 47 блоков фрагментов.
3. Заголовки 1Р для трех фрагментов будут содержать следующую информацию: фрагмент 1 будет иметь общую длину 572, флаг МР будет установлен в 1 и сдвиг фрагмента будет установлен в 0. Фрагмент 2 будет иметь общую длину 572, флаг МР будет установлен в 1 и сдвиг фрагмента будет равен 69. Фрагмент 3 будет иметь общую длину 396, флаг МР будет сброшен в 0 и сдвиг фрагмента будет задан как 138.
Повторная сборка Фрагменты передаются промежуточным маршрутизатором 1Р по 1Р-адресу места назначения. Фрагменты могут следовать различными маршрутами к месту назначения и прибывать в порядке, отличном от того, в котором они были посланы. Сами фрагменты могут быть фрагментированы во время их перемещения к конечному пункту назначения. Для повторной сборки фрагментов в исходный вид 1Р использует поля идентификации и адрес 1Р источника.
Когда узел места назначения получает фрагменты, он выделяет ресурсы для повторной сборки. Ресурсы повторной сборки состоят из буфера данных, буфера заголовка, таблицы битов блоков фрагментов, поля общей длины данных и таймера. Если это первый фрагмент (со сдвигом фрагмента, равным 0), то его заголовок помещается в буфер заголовка. Если это последний фрагмент (с флагом МР, равным 0), то вычисляется общая длина данных.
Стандарты IP задают по умолчанию таймер повторной сборки на 15 секунд. Если все фрагменты не будут получены в течение этого времени, они будут отброшены и источнику может быть послано сообщение ICMP о превышении времени ожидания. При получении фрагментов таймер задается как максимум текущего значения времени таймера и значения поля времени жизни из полученного фрагмента.
Прибывающие дополнительные фрагменты помещаются в буфер данных в порядке, согласно сдвигу фрагмента и длине, и соответствующие биты задаются в таблице битов блоков фрагментов. Когда приходит последний фрагмент (если все фрагменты в таблице битов блоков заданы как 1 для общей длины первоначальной нагрузки), повторная сборка завершена и полученная реконструированная полезная нагрузка доставляется соответствующему протоколу верхнего уровня.
Трансляционный перенос (translational bridging) используется для соединения сетей со смешанной средой передачи, таких как сеть Token Ring и Ethernet. При этом может возникнуть проблема, связанная с тем, что MTU двух сетей существенно различаются. В сегменте Token Ring допустимо MTU от 4464 до 17914, в то время как в сегменте Ethernet MTU ограничено 1500. Если два сегмента соединены мостом, то может возникнуть ситуация, когда пакеты отбрасываются, потому что мост не может фрагментировать данные, как это делает маршрутизатор. Одно из решений — задать MTU на серверах NT, соединенных с сетью Token Ring, равным 1500, для гарантии, что пакеты не будут отброшены в связи с чрезмерным размером. Конечно, прежде чем это сделать, необходимо выполнить мониторинг сети, чтобы увидеть, были ли отброшены пакеты. Если это так, то может помочь следующая запись в реестре.
Поле времени жизни (TTL — time-to-live) имеет восемь битов в длину и следует за полем сдвига фрагмента. Это поле указывает максимальное время, в течение которого дейтаграмма может оставаться в Интернете. Если это поле содержит значение ноль, то дейтаграмма должна быть разрушена. Это поле изменяется при обработке заголовка IР. Время измеряется в единицах секунд, но так как каждый модуль, обрабатывающий дейтаграмму, должен уменьшить ТТL по крайней мере на единицу, даже если он занят этим менее секунды, TTL должно рассматриваться только как верхняя граница времени, в течение которого сможет существовать дейтаграмма. Цель состоит в том, чтобы отбрасывать дейтаграммы, которые невозможно доставить, связав это с максимальным временем жизни дейтаграммы. По умолчанию TTL в Windows NT версии 3.5Х равно 32 секундам; в Windows NT 4.0 оно было поднято до 128 секунд. Это значение по сути является пределом того, сколько маршрутизаторов может пройти дейтаграмма IP, прежде чем будет отброшена. Это значение можно изменить в реестре, как показано дальше:
Далее следует поле протокола, указывающее на протокол следующего уровня, используемый данными дейтаграммы IP. Для переноса этой информации используется восемь битов. Значения для различных протоколов определены в "Assigned Numbers" (Присвоенных номерах).
Потом идет поле контрольной суммы заголовка с 16 битами, выделенными для контрольной суммы только заголовка. Так как некоторые поля заголовка изменяются (например, время жизни), то она вычисляется повторно и проверяется в каждой точке, в которой обрабатывается заголовок IP. Для вычисления контрольной суммы суммируются дополнения до единиц всех 16-битных слов в заголовке, и к полученной сумме применяется операция 16-битного дополнения до единиц. Значение поля контрольной суммы задается равным нулю.
Следующие два поля являются адресом IP источника и адресом IP места назначения. Каждое из них имеет четыре октета. Именно здесь адреса IP включаются в обмен данными. Хотя это и важное поле, мы не собираемся тратить на него много времени, так как это может легко привести к обсуждению маршрутизации, широковещания и т.п. Эти вопросы будут рассмотрены позже, при обсуждении сетевого трафика.
Затем следует поле параметров, которое может появиться или не появиться в дейтаграммах. Они должны быть реализованы всеми модулями IP (хостом и шлюзами). Необязательным моментом является их передача в каждой конкретной дейтаграмме, а не их реализация. В некоторых средах параметр безопасности может потребоваться во всех дейтаграммах. Поле параметров имеет переменную длину. Параметры IP будут иметь размер от одного до 40 октетов. Это будет давать максимальный размер заголовка IP в 60 байтов. Может быть ноль или большее количество параметров. Каждый параметр начинается с кода типа параметра. Этот код делится на три поля, первое из которых является полем копирования. Если это поле задано как 1, то параметр должен быть скопирован во все фрагменты. Если оно задано как 0, то он используется только в первом фрагменте. Следующие два бита в октете кода параметра используются для указания класса используемого параметра. Если он задан как 0, то это управление дейтаграммой или сетью, если как 2, то он используется для отладки или измерения. Другие являются зарезервированными. Следующие пять битов используются для указания номера параметра в классе параметров.
Второй октет является длиной параметра, которая включает код типа параметра и октет длины, октет указателя и длину трех байтов данных о маршруте. Третий октет является указателем на данные о маршруте, указывающим октет, где начинается адрес следующего источника, который будет обрабатываться. Указатель связан с этим параметром, наименьшее законное значение для него равно 4. Некоторые из этих параметров перечислены в таблице 2.2.
