База знаний по Open Source
Авторизация
Поиск по базе знаний

Протокол IP — основной протокол стека протоколов TCP/IP и основной протокол сетевого уровня. Именно он отвечает за передачу информации по сети и между отдельными сетями (подсетями). В его основе заложен дейтаграммный метод, который не гарантирует доставку пакета.

Функции протокола IP определены в стандарте RFC-791 следующим образом:

“Протокол IP обеспечивает передачу блоков данных, называемых дейтаграммами, от отправителя к получателям, где отправители и получатели являются компьютерами, идентифицируемыми адресами фиксированной длины (IP-адресами). Протокол IP обеспечивает при необходимости также фрагментацию и сборку дейтаграмм для передачи данных через сети с малым размером пакетов”.

Протокол IP является ненадежным протоколом без установления соединения. Это означает, что протокол IP не подтверждает доставку данных, не контролирует целостность полученных данных и не производит операцию квитирования (handshaking) – обмена служебными сообщениями, подтверждающими установку соединения с узлом назначения и его готовность к приему данных.

Протокол IP обрабатывает каждую дейтаграмму как независимую единицу, не имеющую связи ни с какими другими дейтаграммами в Интернет.

После того, как дейтаграмма отправляется в сеть, ее дальнейшая судьба никак не контролируется отправителем (на уровне протокола IP). Если дейтаграмма не может быть доставлена, она уничтожается. Узел, уничтоживший дейтаграмму, может оправить по обратному адресу ICMP-сообщение о причине сбоя.

Гарантию правильной передачи данных предоставляют протоколы вышестоящего уровня (например, протокол TCP или сервисы прикладного уровня), которые имеют для этого необходимые механизмы.

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

Общий сценарий работы модуля IP на каком-либо узле сети, принимающего дейтаграмму из сети, не зависимо от конкретной реализации, то-есть операционной системы, таков:

  • с одного из интерфейсов уровня доступа к среде передачи (например, с Ethernet-интерфейса) в модуль реализующий протокол IP поступает дейтаграмма;
  • модуль IP анализирует заголовок дейтаграммы;
  • если пунктом назначения дейтаграммы является данный компьютер:
    • если дейтаграмма является фрагментом большей дейтаграммы, ожидаются остальные фрагменты, после чего из них собирается исходная большая дейтаграмма;
    • из дейтаграммы извлекаются данные и направляются на обработку одному из протоколов вышележащего уровня (какому именно – указывается в заголовке дейтаграммы);
  • если дейтаграмма не направлена ни на один из IP-адресов данного узла, то дальнейшие действия зависят от того, разрешена или запрещена ретрансляция (forwarding) “чужих” дейтаграмм;
    • если ретрансляция разрешена, то-есть узел выполняет маршрутизирующие функции, то определяются следующий узел сети, на который должна быть переправлена дейтаграмма для доставки ее по назначению, и интерфейс нижнего уровня, после чего дейтаграмма передается на нижний уровень этому интерфейсу для отправки; при необходимости может быть произведена фрагментация дейтаграммы;
    • если же дейтаграмма ошибочна или по каким-либо причинам не может быть доставлена, она уничтожается; при этом, как правило, отправителю дейтаграммы отсылается ICMP-сообщение об ошибке.

При получении данных от вышестоящего уровня для отправки их по сети IP-модуль формирует дейтаграмму с этими данными, в заголовок которой заносятся адреса отправителя и получателя (также полученные от транспортного уровня) и другая информация; после чего выполняются следующие шаги:

  • если дейтаграмма предназначена этому же узлу, из нее извлекаются данные и направляются на обработку одному из протоколов транспортного уровня (какому именно – указывается в заголовке дейтаграммы);
  • если дейтаграмма не направлена ни на один из IP-адресов данного узла, то определяются следующий узел сети, на который должна быть переправлена дейтаграмма для доставки ее по назначению, и интерфейс нижнего уровня, после чего дейтаграмма передается на нижний уровень этому интерфейсу для отправки; при необходимости может быть произведена фрагментация дейтаграммы;
  • если же дейтаграмма ошибочна или по каким-либо причинам не может быть доставлена, она уничтожается.

Формат заголовка дейтаграммы IP (v4):

Октет 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 Версия IHL Тип обслуживания Длина пакета
4 Идентификатор Флаги Смещение фрагмента
8 Время жизни (TTL) Протокол Контрольная сумма заголовка
12 IP-адрес отправителя
16 IP-адрес получателя
20 Параметры (от 0 до 10-и 32-х битных слов)
  Данные
  • Версия — для IPv4 значение поля должно быть равно 4.
  • IHL — (Internet Header Length) длина заголовка IP-пакета в 32-битных словах (dword). Именно это поле указывает на начало блока данных (англ. payload — полезный груз) в пакете. Минимальное корректное значение для этого поля равно 5.
  • Тип обслу́живания (Type of Service, акроним TOS) — байт, содержащий набор критериев, определяющих тип обслуживания IP-пакетов. Поле в заголовке пакета IPv4, которое с годами приобретало различные цели, и описывалось почти в пяти RFC. В настоящее время TOS поле имеет 6 bit поля DiffServ Code Point (DSCP) и 2-bit поля Explicit Congestion Notification.Тип обслуживания позволяет приоритизировать IP-трафик на сетевых маршрутизаторах, с целью обеспечения высокого качества передачи данныхБайт побитно (0 – старший, 7 – младший):
    • 0-2 — приоритет (precedence) данного IP-сегмента
    • 3 — требование ко времени задержки (delay) передачи IP-сегмента (0 — нормальная, 1 — низкая задержка)
    • 4 — требование к пропускной способности (throughput) маршрута, по которому должен отправляться IP-сегмент (0 — низкая, 1 — высокая пропускная способность)
    • 5 — требование к надежности (reliability) передачи IP-сегмента (0 — нормальная, 1 — высокая надежность)
    • 6-7 — ECN — явное сообщение о задержке (управление IP-потоком).

    На практике в большинстве реализаций протокола IP данное поле почти всегда равно 0.

  • Длина пакета — (Total Length) длина пакета в октетах, включая заголовок и данные. поле содержит общую длину пакета, размер которого не может превышать 65535 байт. Практически пакеты такой длины никогда не используются, поскольку технологии канального уровня накладывают свои ограничения. Так, Ethernet не допускает кадров с длиной более 1500 байт, FDDI – 4096 байт и т.д. В этой связи, протокол IP выполняет фрагментацию сегментов данных, поступающих к нему от TCP и UDP протоколов. Следует отметить, что маршрутизатор не выполняет сборку пакетов, даже если следующая сеть имеет параметр MTU (Maximum Transmission Unit), допускающий более крупные пакеты. Сборка пакетов в исходный сегмент производится на месте назначения.
  • Идентификатор — (Identification) значение, назначаемое отправителем пакета и предназначенное для определения корректной последовательности фрагментов при сборке пакета. Для фрагментированного пакета все фрагменты имеют одинаковый идентификатор.
  • 3 бита флагов. Первый бит должен быть всегда равен нулю, второй бит DF (don’t fragment) определяет возможность фрагментации пакета и третий бит MF (more fragments) показывает, не является ли этот пакет последним в цепочке пакетов.
  • Смещение фрагмента — (Fragment Offset) значение, определяющее позицию фрагмента в потоке данных. Смещение задается количеством восьмибайтовых блоков, поэтому это значение требует умножения на 8 для перевода в байты.
  • Время жизни (TTL) — поле, определяющее максимальное время, которое пакет может существовать в сети. Значение этого поля (в секундах) устанавливается при отправке пакета и уменьшается на единицу по мере прохождения им маршрутизаторов. При достижении нулевого значения этого поля пакет уничтожается. Максимальное значение поля – 255 секунд. Этот механизм помогает избежать перегрузок сети при возникновении ошибок в таблицах маршруизации, приводящих к образованию петель.
  • Протокол — идентификатор интернет-протокола следующего уровня указывает, данные какого протокола содержит пакет, например, TCP, UDP, или ICMP.
  • Контрольная сумма заголовка — (Header Checksum) поле содержит значение контрольной суммы, рассчитанной только по заголовку. Поскольку значения некоторых полей заголовка изменяются по мере прохождения пакета по маршруту (поле TTL, например), то значения рассматриваемого поля проверяются и пересчитываются на каждом маршрутизаторе. Этот механизм является единственным средством обеспечения достоверности передачи, содержащимся в протоколе IP.
  • Адрес отправителя (Source IP address) и Адрес получателя (Destination IP address) – поля одинаковой длины (32 бита), содержащие соответствующие адреса. Правила адресации в IP-сетях будут рассмотрены далее.
  • Опции (Options) – необязательное поле, используемое при отладке сетей и для запроса определенных специфических процедур обработки. В настоящее время используется крайне редко. В связи с разработкой новых протоколов, обеспечивающих большую гибкость в обработке IP-трафика, возможность использования этих полей вновь стала предметом обсуждения комитетов по стандартизации.При получении пакета маршрутизатор вычисляет контрольную сумму заголовка пакета и, если она не совпадает со значением поля «Контрольная сумма», то пакет отбрасывается. При положительном результате проверки, производится изменение некоторых полей и рассчитывается новое значение поля «Контрольная сумма». Затем по таблице маршрутизации определяется адрес следующего маршрутизатора, на который должен быть направлен этот пакет, и он передается на соответствующий интерфейс.