Сетевые протоколы / 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”.