IP

Материал из Викиконспекты
Версия от 15:15, 1 декабря 2016; Sergeybudkov (обсуждение | вклад) (Новая страница: «IP ==IPv4== '''IPv4''' (англ. ''Internet Protocol version 4'') — четвёртая версия интернет протокола (IP). Описан в...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

IP


IPv4

IPv4 (англ. Internet Protocol version 4) — четвёртая версия интернет протокола (IP). Описан в IETF в статье RFC 791 (сентябрь 1981 года). Это один из самых используемых интернет протоколов. Был введен в использование в ARPANET в 1983 году.

Функция протокола — передавать дейтаграммы по множеству соединенных сетей.

Структура пакета

Рассмотрим формат IPv4-дейтаграмм.

Дейтаграмма состоит из заголовка и основной части (данных). Биты передаются слева направо и сверху вниз (big-endian порядок). В настоящее время ясно, что лучше было бы использовать обратный (little-endian) порядок, но во время создания протокола это не было очевидно. Так на Intel x86 требуется программное преобразование, как при передаче, так и при приеме.

Рассмотрим структуру заголовка:

IPv4 Header Format
0 1 2 3
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
Версия IHL Дифференциальное обслуживание (Тип службы) Полная длина
Идентификатор Флаги Смещение фрагмента
Время жизни Протокол Контрольная сумма заголовка
IP-адрес источника
IP-адрес назначения
Опции Остаток
  • Версия: 4 бита
    • Поле Версия содержит версию протокола, к которому принадлежит пакет. В случае IPv4 это 4.
  • IHL: 4 бита
    • Поле IHL (англ. Internet Header Length) содержит длину заголовка (в нем указано число 32 -разрядных слов). Следовательно, оно указывает на начало данных. Минимальное значение длины равно 5 . Максимальное — 15, что соответствует заголовку длиной 60 байт. Так, максимальный размер необязательного поля равен 40 байтам.
  • Дифференциальное обслуживание (Тип службы): 8 битов
    • Изначально это поле называлось Тип службы. По спецификации оно предназначено для различения классов обслуживания. Но поскольку никто не знал, что с ним делать, оно много лет не использовалось. Теперь, когда появилось дифференцированное обслуживание, ему нашли другое применение. Первые 6 бит задают класс обслуживания (DSCP), а в последние 2 помещаются явные уведомления о перегруженности (ECN).
  • Полная длина: 16 бит
    • Поле Полная длина содержит длину всей дейтаграммы, включая как заголовок, так и данные. Минимальная длина равна 20 байтам. Максимальное допустимое значение равно 65535 байт. Такие длинные дейтаграммы непрактичны для большинства хостов и сетей. Так, все хосты должны уметь принимать дейтаграммы до 576 байтов. Рекоммендуется отправлять дейтаграммы большего размера, только если есть уверенность, что принимающая сторона сможет их обработать.
  • Идентификатор: 16 бит
    • Идентификатор позволяет хосту-получателю определить какому пакеты принадлежат полученные им фрагменты. Все фрагменты одного пакета содержат одно и то же значение идентификатора.
  • Флаги: 3 бита
    • Бит 0: зарезервированное значение, должны быть равно 0.
    • Бит 1 (DF): Не фрагментировать (англ. Don't Fragment). 0 — можно фрагментировать, 1 — нельзя. Также может использоваться при определении путевого значения MTU, которое равно максимальному размеру пакета, передаваемого по пути без фрагментации. Пометив этот бит, отправитель гарантирует, что либо дейтаграмма дойдет единым блоком, либо отправитель получит сообщение об ошибке.
    • Бит 2 (MF): Продолжение следует (англ. More Fragments). 0 — в последнем фрагменте, 1 — в предыдущих.
  • Смещение фрагмента: 13 битов
    • Это поле указывает положение фрагмента в исходном пакете. Длина всех фрагментов в байтах должна быть кратна 8 (кроме последнего). Позволяет (2^13−1)×8=65528 байт смещения, что превышает максимальный размер пакета.
  • Время жизни: 8 битов
    • Поле Время жизни (TTL, англ. Time To Live) представляет собой счетчик, ограничивающий время жизни пакета. По спецификации он отсчитывает время в секундах, таким образом допуская максимальное время жизни пакета в 255 с. На каждом маршрутизаторе значение должно уменьшаться как минимум на единицу плюс время стояния в очереди. Но на практике этот счетчик считает количество переходов черех маршрутизаторы. Когда значение равно 0, пакет отвергается, а отправителю отсылается сообщение ICMP Time Exceeded. Таким образом удается избежать вечного странствования пакетов.
  • Протокол: 8 битов
    • Это поле указывает, какому процес транспортного уровня передать этот пакет, например TCP, UDP, ICMP. Присвоенные номера протоколов можно найти на сайте IANA.
  • Контрольная сумма заголовка: 16 бит
    • Это поле хранит контрольную сумму только заголовка. Так как некоторые поля меняются (например, TTL), то оно пересчитывается на каждом транзитивном участке. Используется следующий алгоритм: складываются все 16-разрядные полуслова заголовка в дополнительном коде, преобразуя результат также в дополнительный код. Таким образом проверяемая получателем контрольная сумма заголовка (вместе с этим полем) должна быть равна нулю. Более подробно алгоритм описан в RFC 1071.
  • IP-адрес источника: 32 бита.
  • IP-адрес получателя: 32 бита.
  • Опции: переменная длина
    • В начале поля всегда располагается однобайтный идентификатор. Иногда за ним может располагаться также однобайтное поле длины, а затем один или несколько информационных байтов. Размер этого поля должен быть кратен 4 байтам. Поле опции имеет следующий формат:
      • 1 бит — флаг копирования. Показывает, если опция скопирована во все фрагменты.
      • 2 бита — класс опции. Могут быть следующие классы: 0 — control, 2 — debugging и измерение, 1 и 3 — зарезервированы на будущее.
      • 5 бит — номер опции.
    • Приведем примеры опций:
      • Безопастность — указывет уровень секретности дейтаграммы. Но на практике все его игнорируют.
      • Строгая маршрутизация от источника — задает полный путь следования дейтаграммы.
      • Свободная маршрутизация от источника — задает список маршрутизаторв, которыенельзя миновать.
      • Запомнить маршрут — требует от всех маршрутизаторов добавлять свой IP-адрес.
      • Временной штамп — требует от всех маршрутизаторв добавлять свой IP-адрес и текущее время.
    • Обычно маршрутизаторы либо игнорируют опции, либо обрабатывают неэффективно, отодвигая в стороны как нечто необычное.
  • Остаток (Padding): переменная длина
    • Часть из нулей, гарантирующая, что длина заголовка заканчивается на 32 бите.

IPv6

IPv6 (англ. Internet Protocol version 6) — новая версия интернет протокола (IP), являющаяся результатом развития IPv4. Протокол был создан IETF в 1996 году. Описан в спецификации RFC 2460.

Основной причиной для создания новой версии протокола послужил факт скорого исчерпания пула IPv4 адресов (по разным оценкам последние выделенные IANA адреса будут заняты в период с 2016 по 2020 года).

Основные отличия IPv6 от IPv4:

  • В IPv6 заголовок имеет фиксированную длину 40 октетов.
  • Поле общей длины заменено полем длины области данных.
  • В IPv6 предусмотрена передача пакетов, длины которых превышают 64 кбайт.
  • Заголовки надстроек.
  • Поле времени жизни заменено полем ограничения количества переходов.
  • Многие дополнения IPv4 были оформлены как отдельные протоколы.

Структура пакета

Отступ в байтах 0 1 2 3
Отступ в битах 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 0 Версия Класс трафика Метка потока
4 32 Длина полезной нагрузки Следующий заголовок Лимит кол-ва переходов
8 64 Адрес отправителя
C 96
10 128
14 160
18 192 Адрес получателя
1C 224
20 256
24 288
  • Весрия (Version)
    • 4 бита. Версия протокола. Для IPv6 - 0110 (6).
  • Класс трафика (Traffic class)
    • 8 бит. Хранит два значения: старшие 6 бит используются DSCP для классификации пакетов, младшие 2 используются ECN для контроля перезагрузки.
  • Метка потока (Flow Label)
    • 20 бит. Используется для передачи информации маршрутизаторам и коммутаторам о необходимости поддержания одного и того же пути для пути для потока пакетов, чтобы избежать переупорядочивания.
  • Длина полезной нагрузки (Payload length)
    • 16 бит. Размер всего пакета, включая заголовок и дополнительные расширения.
  • Следующий заголовок (Next header)
    • 8 бит. Тип расширенного заголовка (extension), идущего следующим. В последнем расширенном заголовке это поле хранит тип транспортного протокола.
  • Лимит кол-ва переходов (Hop limit)
    • 8 бит. Поле, уменьшаемое на единицу каждым маршрутизатором. Когда поле счетчик равным 0, пакет отбрасывается.
  • Адрес отправителя (Source address)
    • 128 бит. IPv6 адрес отправителя.
  • Адрес получателя (Destination address)
    • 128 бии. IPv6 адрес получателя.

Типы IPv6 адресов

  • Одноадресный (Unicast) - для отправки пакет на конкретный адрес устройства.
    • Global unicast - глобальные адреса. Могут находиться в любом не занятом диапазоне.
    • Link loсal - локальный адрес канала. Позволяет обменивать данными по одному и тому же каналу (подсети). Пакеты с локальным адресом канала не могут быть отправлены за пределы этого канала.
    • Unique local - уникальный локальные адреса. Используются для локальной адресации в пределах узла или между ограниченным количеством узлов.
  • Многоадресный (Multicast) - для отправки пакетов на группу адресов.
    • Assigned - назначенные адреса. Зарезервированные для определённых групп устройств Multicast адреса.
    • Solicited - запрошенные адреса. Остальные адреса, которые устройства могут использовать для прикладных задач.
  • Групповой (Anycast) - для отправки пакета на "любой" индивидуальный адрес. Такой адрес может быть назначен нескольким устройствам. Пакет будет доставлен ближайшему устройству с этим адресом.

Нотация

Адрес в IPv6 представляется как восемь групп из четырех шестнадцатеричных чисел, разделенных двоеточиями. При записи адреса используются следующие правила:

  • Если одна и более групп, идущих подряд, равны 0000, то они опускаются и заменяются на двойное двоеточие.
  • Незначащие старшие нули в группах опускаются.
  • Для записи встроенного или отображенного IPv4 адреса последние две группы цифр заменяются на IPv4 адрес.
  • При использовании IPv6 адреса в URL он помещается в квадратные скобки.
  • Порт в URL пишется после закрывающей квадратной скобки.