Сетевые протоколы / IP

Internet Protocol — Межсетевой протокол адресации и маршрутизации, объединяет отдельные компьютерные сети в единую сеть Интернет, обеспечивая доставку пакетов данных между любыми узлами сети через произвольное число промежуточных узлов (маршрутизаторов).

Свойства:

  • Протокол не гарантирует доставки пакета до адресата (пакеты могут прийти в порядке отличном от отправки, прийти несколько раз, прийти повреждёнными или не прийти вовсе). Гарантию безошибочной доставки пакетов дают протоколы более высокого (транспортного) уровня использующие IP адресацию и маршрутизацию в качестве транспорта, например - TCP.
  • Протокол предусматривает дробление (фрагментацию) пакета данных в процессе доставки по причинам разнородных по возможностям каналов связей, такие фрагменты пакетов собираются воедино на стороне получателя. В версии 6 маршрутизаторы более не обязаны делать фрагментацию, в связи с этим в сетях IPv6 отправитель должен отправлять пакеты размером не превышающим минимального MTU назначенного пути или использовать минимальное значение MTU для сетей IPv6 равное 1280 байт.
  • В протоколе предусмотрена возможность запрета фрагментации (в версии 6 включена по умолчанию) конкретного пакета. Если такой пакет нельзя передать через сегмент связи целиком, то он уничтожается а отправителю направляется уведомление о проблеме по протоколу ICMP.

На текущий момент сеть Интернет объединена двумя версиями данного протокола адресации (IPv4, IPv6) вследствие нехватки количества адресов предоставляемого 4 версией протокола для растущего количества узлов которым необходимо единое адресное пространство.

Изменения 6 версии:

  • размер адреса увеличен с 4 байт до 16 байт;
  • размер заголовка пакета увеличился с 20 до 40 байт;
  • максимальный размер пакета увеличен с 65 Кб до 4 Гб;
  • исчезла излишняя контрольная сумма и необходимость её пересчёта на каждом узле маршрутизации;
  • появились метки потоков и классы траффика;
  • добавлена многоадресная маршрутизация;
  • включена поддержка шифрования по протоколу IPsec;

Пакет версии 4 включает:

  • 4 бита — версия протокола, содержит значение “4”
  • 4 бита — IHL, длина заголовка пакета в 32-битных словах
  • 1 байт— ToS, тип обслуживания, на практике в большинстве реализаций протокола поле почти всегда равно “0"
  • 2 байта— длина пакета от 20 до 65535 байт
  • 2 байта— идентификатор пакета, все фрагменты одного пакета имеют один идентификатор
  • 1 бит — значение “0”
  • 1 бит — флаг разрешения фрагментации
  • 1 бит — флаг указывающий последний фрагмент пакета (если значение равно “0”)
  • 13 бит — смещение текущего фрагмента в 64-битных словах
  • 1 байт — TTL, оставшееся число маршрутизаторов которое может пройти пакет, уменьшается на каждом маршрутизаторе на 1, при достижении значения “0" пакет удаляется и отправителю направляется уведомление ICMP “Time Exceeded”
  • 1 байт— идентификатор протокола транспортируемого вложенного пакета (ICMP=1, TCP=6, UDP=17, …)
  • 2 байта — контрольная сумма заголовка
  • 4 байта— адрес отправителя
  • 4 байта— адрес получателя
  • 0–40 байт — дополнительные параметры
  • 0–65515 байт — область данных

Пакет версии 6 включает:

  • 4 бита — версия протокола, содержит значение “6"
  • 1 байт — класс трафика определяющий его приоритет
  • 20 бит — метка потока идентифицирующая канал однотипных пакетов между адресатами
  • 2 байта — длина области данных в байтах
  • 1 байт — тип первого расширенного заголовка IPv6
  • 1 байт — TTL, оставшееся число маршрутизаторов которое может пройти пакет, уменьшается на каждом маршрутизаторе на 1, при достижении значения “0” пакет удаляется и отправителю направляется уведомление ICMP “Time Exceeded”
  • 16 байт — адрес отправителя
  • 16 байт — адрес получателя
  • расширенные заголовки
  • 0–64 Кбайт — область данных (с помощью опции jumbo payload в расширенном заголовке Hop-By-Hop Options возможно увеличение области данных до 4 Гбайт минус 1 байт)

Расширенные заголовки содержат дополнительную информацию и размещены между фиксированным заголовком и заголовком протокола более высокого уровня в области данных. Каждый расширенный заголовок имеет поле в котором хранится тип следующего расширенного заголовка, последний расширенный заголовок содержит в этом поле тип протокола более высокого уровня, находящегося в области данных. Каждый расширенный заголовок должен иметь размер в байтах, кратный 8. Некоторые заголовки необходимо расширить до нужного размера. Все расширенные заголовки являются необязательными.

Расширенные заголовки должны быть обработаны только конечным узлом, за исключением заголовка Hop-By-Hop Options, который должен быть обработан каждым промежуточным узлом на пути пакета, включая отправителя и получателя. Расширенные заголовки не должны повторяться в пакете более одного раза, за исключением заголовка Destination Options, который может появиться дважды.

Если расширенных заголовков в пакете несколько, то необходимо отсортировать их в порядке списка указанного ниже:

  • “0” Hop-by-Hop Options — параметры, которые должны быть обработаны каждым транзитным узлом
  • “60” Destination Options — параметры которые должны быть обработаны только получателем
  • “43” Routing — позволяет отправителю определять список узлов, которые пакет должен пройти
  • “44” Fragment — содержит информацию по фрагментации пакета
  • “51” Authentication Header — используется для аутентификации большей части пакета (IPsec)
  • “50” Encapsulating Security Payload— используется для шифрования данных (IPsec)

Если узел не может обработать какой-то расширенный заголовок или в поле типа расширенного заголовка содержится “0”, то он должен отбросить пакет и отправить сообщение ICMPv6 “Parameter Problem”.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.