Книга: Операционная система UNIX
Протокол IP
Межсетевой протокол (Internet Protocol, IP) обеспечивает доставку фрагмента данных (датаграммы) от источника к получателю через систему связанных между собой сетей. В протоколе IP отсутствуют функции подтверждения, контроля передачи, сохранения последовательности передаваемых датаграмм и т.д. В этом смысле протокол IP обеспечивает потенциально ненадежную передачу. Надежность и прочие функции, отсутствующие у IP, при необходимости реализуются протоколами верхнего уровня. Например, протокол TCP дополняет IP функциями подтверждения и управления передачей, позволяя приложениям (или протоколам более высокого уровня) рассчитывать на получение упорядоченного потока данных, свободных от ошибок. Эта функциональность может быть реализована и протоколами более высокого уровня, как например это сделано в реализации распределенной файловой системы NFS, традиционно работающей на базе "ненадежного" транспортного протокола UDP. При этом работа NFS в целом является надежной.
В рамках модели OSI протокол IP занимает 3-й уровень и, таким образом, взаимодействует с протоколами управления передачей снизу и транспортными протоколами сверху. В рамках этой модели IP выполняет три основные функции: адресацию, фрагментацию и маршрутизацию данных.
Данные, формат которых понятен протоколу IP, носят название датаграммы (datagram), вид которой приведен на рис. 6.5. Датаграмма состоит из заголовка, содержащего необходимую управляющую информацию для модуля IP, и данных, которые передаются от протоколов верхних уровней и формат которых неизвестен IP. Вообще говоря, термин "датаграмма" обычно используется для описания пакета данных, передаваемого по сети без установления предварительной связи (connectionless).
Рис. 6.5. IP-датаграмма
Протокол IP обрабатывает каждую датаграмму как самостоятельный объект, не зависящий от других передаваемых датаграмм. Для датаграмм неприменимы виртуальные каналы или другие логические тракты передачи.
Модули IP производят передачу датаграммы по направлению к получателю на основании адреса, расположенного в заголовке IP-датаграммы. Выбор пути передачи датаграммы называется маршрутизацией.
В процессе обработки датаграммы протокол IP иногда вынужден выполнять ее фрагментацию. Фрагментация бывает необходима, поскольку путь датаграммы от источника к получателю может пролегать через локальные и территориально-распределенные физические сети различной топологии и архитектуры, использующие различные размеры кадра. Например, кадр FDDI позволяет передавать датаграммы размером до 4470 октетов, в то время как сети Ethernet накладывают ограничение в 1500 октетов.
Заголовок IP-датаграммы, позволяющий модулю протокола выполнить необходимую обработку данных, приведен на рис. 6.6.
Рис. 6.6. Заголовок IP-датаграммы
Заголовок занимает как минимум 20 октетов управляющих данных. Поле Version
определяет версию протокола и ее значение равно 4 (для IPv4). Поле IHL
(Internet Header Length) указывает длину заголовка в 32-битных словах. При минимальной длине заголовка в 20 октетов значение IHL
будет равно 5. Это поле также используется для определения смещения, начиная с которого размещаются управляющие данные протоколов верхнего уровня (например, заголовок TCP). Поле Type of Service
определяет требуемые характеристики обработки датаграммы и может принимать следующие значения:
Биты 0–2 | Precedence . Относительная значимость датаграммы. Это поле может использоваться рядом сетей, при этом большее значение поля Precedence соответствует более приоритетному трафику (например, при перегрузке сети модуль передает только трафик со значением Precedence выше определенного порогового значения). |
Бит 3 | Delay . Задержка. Значение 0 соответствует нормальной задержке при обработке, значение 1 — низкому значению задержки. |
Бит 4 | Throughput . Скорость передачи. Значение 0 соответствует нормальной скорости передачи, значение 1 — высокой скорости. |
Бит 5 | Reliability . Надежность. Значение 0 соответствует нормальной надежности, значение 1 — высокой надежности. |
Биты 6–7 | Зарезервированы для последующего использования. |
Поле Type of Service
определяет обработку датаграммы при передаче через различные сети от источника к получателю. В большинстве случаев может оказаться невозможным удовлетворение сразу всех требований по обработке, предусмотренных полем Type of Service
. Например, удовлетворение требования низкого значения задержки, может сделать невозможным повышение надежности передачи. Фактическое отображение параметров Type of Service
на процедуры обработки конкретной сети зависит от архитектуры этой сети. Примеры возможных отображений можно найти в RFC 795 "Service mappings".
Поле Total Length
содержит общий размер датаграммы в октетах. Размер поля (16 бит) ограничивает максимальный размер IP-датаграммы 65535 октетами.
Следующее 32-битное слово используется при фрагментации и последующем реассемблировании датаграммы. Фрагментация необходима, например, когда датаграмма отправляется из сети, позволяющей передачу пакетов, размер которых превышает максимальный размер пакета какой-либо из сетей по пути следования датаграммы к получателю. В этом случае IP-модуль, вынужденный передать "большую" датаграмму в сеть с малым размером кадра, должен разбить ее на несколько датаграмм меньшего размера. Вообще говоря, модуль протокола должен обеспечивать возможность фрагментации исходной датаграммы на произвольное число частей (фрагментов), которые впоследствии могут быть реассемблированы получателем. Получатель фрагментов отличает фрагменты одной датаграммы от другой по полю Identification
. Это поле устанавливается при формировании исходной датаграммы и должно быть уникальным для каждой пары источник-получатель на протяжении жизни датаграммы в сети. Поле Fragment Offset
указывает получателю на положение данного фрагмента в исходной датаграмме.
Поле Flags
содержит следующие флаги:
Бит 0 | Зарезервирован |
Бит 1 | DF. Значение 0 позволяет фрагментировать датаграмму. Значение 1 запрещает фрагментацию. Если в последнем случае передача исходной датаграммы невозможна, модуль протокола просто уничтожает исходную датаграмму без уведомления |
Бит 2 | MF. Значение 0 указывает, что данный фрагмент является последним в исходной датаграмме (в исходной датаграмме значение равно 0). Значение 1 сообщает реассемблирующему модулю о том, что данный фрагмент исходной датаграммы не последний |
Для фрагментации датаграммы большого размера модуль протокола формирует две или более новых датаграмм и копирует содержимое заголовка исходной датаграммы в заголовки вновь созданных. Флаг MF устанавливается равным 1 для всех датаграмм, кроме последней, для которой значение этого флага копируется из исходной датаграммы. Данные разбиваются на необходимое число частей с сохранением 64-битной границы. Соответствующим образом устанавливаются значения полей Total Length
и Fragment Offset
.
Получатель фрагментов, например хост, производит реассемблирование, объединяя датаграммы с равными значениями четырех полей: Identification
, адрес источника (Source Address
), адрес получателя (Destination Address
) и Protocol
. При этом положение фрагмента в объединенной датаграмме определяется полем Fragment Offset
.
Следующее поле заголовка называется TTL
(Time-to-Live) и определяет "время жизни" датаграммы в сети. Если значение этого поля становится равным 0, датаграмма уничтожается. Каждый модуль протокола, обрабатывающий датаграмму, уменьшает значение этого поля на число секунд, затраченных на обработку. Однако поскольку обработка датаграммы в большинстве случаев занимает гораздо меньшее время, a TTL
все равно уменьшается на 1, то фактически это поле определяет максимальное количество хопов (число промежуточных передач через шлюзы), которое датаграмма может совершить. Смысл этой функции — исключить возможность засорения сети "заблудившимися"
Поле Protocol
определяет номер протокола верхнего уровня, которому предназначена датаграмма. Значения этого поля для различных протоколов приведены в RFC 1700 "Assigned numbers", некоторые из них показаны в табл. 6.2.
Таблица 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-битная контрольная сумма/поле Header Checksum
.
Поля Source Address
и Destination Address
содержат соответственно адреса источника датаграммы и ее получателя. Это адреса сетевого уровня, или IP-адреса, размер которых составляет 32 бита каждый.
Поле Options
содержит различные опции протокола, а поле Padding
служит для выравнивания заголовка до границы 32-битного слова.
- Улучшенный протокол локальных соединений (XNET)
- 6.5 Хост в таблице маршрутизации IP
- 5.21 IP-адреса, интерфейсы и множественное пребывание
- 3.5 Проблемы доступа при использовании нескольких протоколов
- 4.6 Протокол Fibre Channel
- 5.8 Протокол NDMP
- Протоколы модемной связи
- 5 Текстовое представление данных: ясные протоколы лежат в основе хорошей практики
- Приложение 1 Команды FTP-протокола
- Протоколы
- 5.3. Протокол SSH
- 10.1. Работа FTP-протокола