Изменения

Перейти к: навигация, поиск

IP

19 460 байт добавлено, 15:15, 1 декабря 2016
Новая страница: «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 требуется программное преобразование, как при передаче, так и при приеме.

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

{| class="wikitable" style="margin: 0 auto; text-align: center;"
|+IPv4 Header Format
|-

! colspan="8" | 0
! colspan="8" | 1
! colspan="8" | 2
! colspan="8" | 3
|-
! style="width:2.6%;"|0
! style="width:2.6%;"|1
! style="width:2.6%;"|2
! style="width:2.6%;"|3
! style="width:2.6%;"|4
! style="width:2.6%;"|5
! style="width:2.6%;"|6
! style="width:2.6%;"|7
! style="width:2.6%;"|8
! style="width:2.6%;"|9
! style="width:2.6%;"|10
! style="width:2.6%;"|11
! style="width:2.6%;"|12
! style="width:2.6%;"|13
! style="width:2.6%;"|14
! style="width:2.6%;"|15
! style="width:2.6%;"|16
! style="width:2.6%;"|17
! style="width:2.6%;"|18
! style="width:2.6%;"|19
! style="width:2.6%;"|20
! style="width:2.6%;"|21
! style="width:2.6%;"|22
! style="width:2.6%;"|23
! style="width:2.6%;"|24
! style="width:2.6%;"|25
! style="width:2.6%;"|26
! style="width:2.6%;"|27
! style="width:2.6%;"|28
! style="width:2.6%;"|29
! style="width:2.6%;"|30
! style="width:2.6%;"|31
|-
| colspan="4"| Версия
| colspan="4"| IHL
| colspan="8"| Дифференциальное обслуживание (Тип службы)
| colspan="16"| Полная длина
|-
| colspan="16"| Идентификатор
| colspan="3"| Флаги
| colspan="13"| Смещение фрагмента
|-
| colspan="8"| Время жизни
| colspan="8"| Протокол
| colspan="16"| Контрольная сумма заголовка
|-
| colspan="32"| IP-адрес источника
|-
| colspan="32"| IP-адрес назначения
|-
| colspan="26"|Опции
| colspan="6"|Остаток
|-
|}

* Версия: 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 были оформлены как отдельные протоколы.

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

{| class="wikitable" style="text-align: center"
|-
! style="width:8.4%; border-bottom:none; border-right:none;"| Отступ в байтах
! style="width:8.4%; border-left:none;"|
! colspan="8" | 0
! colspan="8" | 1
! colspan="8" | 2
! colspan="8" | 3
|-
! style="border-top: none" |
! Отступ в битах
! style="width:2.6%;"| 0
! style="width:2.6%;"| 1
! style="width:2.6%;"| 2
! style="width:2.6%;"| 3
! style="width:2.6%;"| 4
! style="width:2.6%;"| 5
! style="width:2.6%;"| 6
! style="width:2.6%;"| 7
! style="width:2.6%;"| 8
! style="width:2.6%;"| 9
! style="width:2.6%;"| 10
! style="width:2.6%;"| 11
! style="width:2.6%;"| 12
! style="width:2.6%;"| 13
! style="width:2.6%;"| 14
! style="width:2.6%;"| 15
! style="width:2.6%;"| 16
! style="width:2.6%;"| 17
! style="width:2.6%;"| 18
! style="width:2.6%;"| 19
! style="width:2.6%;"| 20
! style="width:2.6%;"| 21
! style="width:2.6%;"| 22
! style="width:2.6%;"| 23
! style="width:2.6%;"| 24
! style="width:2.6%;"| 25
! style="width:2.6%;"| 26
! style="width:2.6%;"| 27
! style="width:2.6%;"| 28
! style="width:2.6%;"| 29
! style="width:2.6%;"| 30
! style="width:2.6%;"| 31
|-
! 0
! 0
| colspan="4"| Версия
| colspan="8"| Класс трафика
| colspan="20"| Метка потока
|-
! 4
! 32
| colspan="16"| Длина полезной нагрузки
| colspan="8"| Следующий заголовок
| colspan="8"| Лимит кол-ва переходов
|-
! 8
! 64
| colspan="32" rowspan="4"| Адрес отправителя
|-
! C
! 96
|-
! 10
! 128
|-
! 14
! 160
|-
! 18
! 192
| colspan="32" rowspan="4"| Адрес получателя
|-
! 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]] пишется после закрывающей квадратной скобки.
16
правок

Навигация