Изменения

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

IPv4

6495 байт добавлено, 19:19, 4 сентября 2022
м
rollbackEdits.php mass rollback
Функция протокола — передавать дейтаграммы по множеству соединенных сетей.
 
== Структура пакета ==
Рассмотрим формат IPv4-дейтаграмм.
** Поле ''Версия'' содержит версию протокола, к которому принадлежит пакет. В случае 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 бите.
1632
правки

Навигация