Операционная система UNIX
Шрифт:
В процессе обработки датаграммы протокол IP иногда вынужден выполнять ее фрагментацию. Фрагментация бывает необходима, поскольку путь датаграммы от источника к получателю может пролегать через локальные и территориально-распределенные физические сети различной топологии и архитектуры, использующие различные размеры кадра. Например, кадр FDDI позволяет передавать датаграммы размером до 4470 октетов, в то время как сети Ethernet накладывают ограничение в 1500 октетов.
Заголовок IP-датаграммы, позволяющий модулю протокола выполнить необходимую обработку данных, приведен на рис. 6.6.
Рис. 6.6. Заголовок IP-датаграммы
Заголовок
Биты 0–2 | Precedence . Относительная значимость датаграммы. Это поле может использоваться рядом сетей, при этом большее значение поля Precedence соответствует более приоритетному трафику (например, при перегрузке сети модуль передает только трафик со значением Precedence выше определенного порогового значения). |
Бит 3 | Delay . Задержка. Значение 0 соответствует нормальной задержке при обработке, значение 1 — низкому значению задержки. |
Бит 4 | Throughput . Скорость передачи. Значение 0 соответствует нормальной скорости передачи, значение 1 — высокой скорости. |
Бит 5 | Reliability . Надежность. Значение 0 соответствует нормальной надежности, значение 1 — высокой надежности. |
Биты 6–7 | Зарезервированы для последующего использования. |
Поле
Поле
Следующее 32-битное слово используется при фрагментации и последующем реассемблировании датаграммы. Фрагментация необходима, например, когда датаграмма отправляется из сети, позволяющей передачу пакетов, размер которых превышает максимальный размер пакета какой-либо из сетей по пути следования датаграммы к получателю. В этом случае IP-модуль, вынужденный передать "большую" датаграмму в сеть с малым размером кадра, должен разбить ее на несколько датаграмм меньшего размера. Вообще говоря, модуль протокола должен обеспечивать возможность фрагментации исходной датаграммы на произвольное число частей (фрагментов), которые впоследствии могут быть реассемблированы получателем. Получатель фрагментов отличает фрагменты одной датаграммы от другой по полю
Поле
Бит 0 | Зарезервирован |
Бит 1 | DF. Значение 0 позволяет фрагментировать датаграмму. Значение 1 запрещает фрагментацию. Если в последнем случае передача исходной датаграммы невозможна, модуль протокола просто уничтожает исходную датаграмму без уведомления |
Бит 2 | MF. Значение 0 указывает, что данный фрагмент является последним в исходной датаграмме (в исходной датаграмме значение равно 0). Значение 1 сообщает реассемблирующему модулю о том, что данный фрагмент исходной датаграммы не последний |
Для фрагментации датаграммы большого размера модуль протокола формирует две или более новых датаграмм и копирует содержимое заголовка исходной датаграммы в заголовки вновь созданных. Флаг MF устанавливается равным 1 для всех датаграмм, кроме последней, для которой значение этого флага копируется из исходной датаграммы. Данные разбиваются на необходимое число частей с сохранением 64-битной границы. Соответствующим образом устанавливаются значения полей
Получатель фрагментов, например хост, производит реассемблирование, объединяя датаграммы с равными значениями четырех полей:
Следующее поле заголовка называется
Поле
Таблица 6.2. Некоторые номера протоколов
Номер | Протокол |
---|---|
1 | Internet Control Message Protocol, ICMP |
2 | Internet Group Management Protocol, IGMP |
4 | Инкапсуляция IP в IP |
6 | Transmission Control Protocol, TCP |
17 | User Datagram Protocol, UDP |
46 | Resource Reservation Protocol, RSVP |
75 | Packet Video Protocol, PVP |
Завершает третье 32-битное слово заголовка его 16-битная контрольная сумма/поле
Поля
Поле