Ip
Содержание:
Исчерпание адресного пространства
С 1980-х годов, было очевидно, что пул свободных адресов IPv4 был истощается со скоростью, которая не предполагалась изначально в первоначальном проектировании системы сетевого адреса. Угроза истощения была мотивацией для восстановительных технологий, таких как: сети классовой адресации, методы бесклассовой адресации (CIDR), и преобразование сетевых адресов (NAT). В конечном счете, был создан IPv6, который имеет гораздо больше доступных адресов.
Некоторые рыночные силы ускорили истощение IPv4 адресов:
- быстро растущее число Интернет-пользователей
- ADSL модемы, кабельные модемы
- мобильные устройства — ноутбуки, мобильные телефоны
Некоторые технологии смягчили истощение адресов IPv4:
- Трансляция сетевых адресов (NAT — Network address translation) — это технология, которая позволяет частной сети использовать один публичный IP-адрес. Она разрешает частные адреса для частной сети.
- Использование частных сетей
- Dynamic Host Configuration Protocol (DHCP)
- Виртуальный хостинг веб-сайтов на основе имени
- Более строгий контроль со стороны региональных интернет-реестров по распределению адресов по местным Интернет регистрам
- Перенумерация сети для возвращения крупных блоков адресного пространства, выделенного в первые дни Интернета
Основной пул адресов Интернета, утвержденный IANA, был исчерпан 3 февраля 2011 года, когда последние 5 блоков были выделены 5 региональным интернет-реестрам. Asia-Pacific Network Information Centre (APNIC) был первым региональным интернет-реестром, исчерпавшим свой региональный пул 15 апреля 2011, кроме небольшого количества адресного пространства, зарезервированного для перехода к IPv6, которые будут выделены в рамках гораздо более жесткой политики.
Принятое и стандартное долгосрочное решение заключается в использовании Internet Protocol Version 6. Размер адреса был увеличен в IPv6 до 128 бит, что обеспечивает существенное увеличение объема адресного пространства, что также позволяет улучшить агрегацию маршрута через Интернет и предлагает большие распределения подсетей с минимум 264 хост-адресов для конечных пользователей. Однако хосты IPv4-only не могут напрямую общаться с хостами IPv6-only, поэтому IPv6 в одиночку не обеспечивает немедленное решение проблемы исчерпания IPv4. Переход на IPv6 в стадии разработки, но завершение, как ожидается, займет значительное время.
Формат заголовок IP-пакета
В протоколе IP для реализации фрагментации используются три поля заголовка. Идентификатор пакета, флаги и смещение фрагмента.
Пакет
Идентификатор пакета задает номер пакета, который разбит на фрагменты, это поле должно быть одинаковое во всех фрагментах пакета.
Флаги
Размер поля 3 бита, но на практике используется только два. Флаг DF (Don’t Fragment) означает запрет фрагментирования. Флаг MF или (More Fragments), говорит о том что полученный фрагмент пакета не последний, будут еще пакеты.
Смещение фрагмента
Из статьи про протокол IP, мы помним, что сети IP не обеспечивают гарантию доставки и сохранения порядка следования сообщений, поэтому фрагменты пакета могут прийти в разном порядке. Например, сначала может прийти фрагмент, который вы отправили первым, затем третий фрагмент, и после этого второй.
В протоколе IP, для того чтобы определить в каком порядке собирать фрагменты в один большой пакет, используется поле смещение фрагмента. Причем в протоколе IP смещение измеряется не в байтах, а в 8-ми байтовых блоках.
Давайте рассмотрим пример, чтобы лучше понять.
- У нас есть большой пакет размером 4 тысячи байт, в этом пакете 20 байт, это заголовок IP, а полезных данных 3980 байт.
- Мы хотим передать полученные пакет по сети Ethernet, у который максимальный размер передаваемых данных 1 500 байт. Опять же с 1500 байт, 20 байт отдается под заголовок IP, и 1480 байт под полезные данные.
- Таким образом, исходные данные размером 3 980 байт, будут разделены на три фрагмента, от 0 до 4179 байт, от 1480 до 2959, от 2960 до 3890.
- Для того чтобы получить смещение каждого фрагмента, мы должны взять значение первого байта (это 0, 1480 и 2960), и разделить на 8, таким образом смещение получается 0 для первого фрагмента, 185 для второго фрагмента, и 370 для третьего фрагмента.
Пакет
IP-пакет — форматированный блок информации, передаваемый по компьютерной сети, структура которого определена протоколом IP. Соединения компьютерных сетей, не поддерживающие IP-пакеты, такие как традиционные соединения типа «точка-точка» в телекоммуникациях, просто передают данные в виде последовательности байтов, символов или битов. При использовании пакетного форматирования сеть может передавать длинные сообщения более надежно и эффективно.
Версия 4 (IPv4)
Основная статья: IPv4
Октет | 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 | Differentiated Services Code Point | ECN | Длина пакета | |||||||||||||||||||||||||||
4 | Идентификатор | Флаги | Смещение фрагмента | ||||||||||||||||||||||||||||
8 | Время жизни (TTL) | Протокол | Контрольная сумма заголовка | ||||||||||||||||||||||||||||
12 | IP-адрес отправителя | ||||||||||||||||||||||||||||||
16 | IP-адрес получателя | ||||||||||||||||||||||||||||||
20 | Параметры (от 0 до 10 32-битных слов) | ||||||||||||||||||||||||||||||
Данные |
- Версия — для IPv4 значение поля должно быть равно 4.
- IHL — (Internet Header Length) длина заголовка IP-пакета в 32-битных словах (dword). Именно это поле указывает на начало блока данных (англ. payload — полезный груз) в пакете. Минимальное корректное значение для этого поля равно 5.
- Длина пакета — (Total Length) длина пакета в октетах, включая заголовок и данные. Минимальное корректное значение для этого поля равно 20, максимальное — 65 535.
- Идентификатор — (Identification) значение, назначаемое отправителем пакета и предназначенное для определения корректной последовательности фрагментов при сборке пакета. Для фрагментированного пакета все фрагменты имеют одинаковый идентификатор.
- 3 бита флагов. Первый бит должен быть всегда равен нулю, второй бит DF (don’t fragment) определяет возможность фрагментации пакета и третий бит MF (more fragments) показывает, не является ли этот пакет последним в цепочке пакетов.
- Смещение фрагмента — (Fragment Offset) значение, определяющее позицию фрагмента в потоке данных. Смещение задается количеством восьмибайтовых блоков, поэтому это значение требует умножения на 8 для перевода в байты.
- Время жизни (TTL) — число маршрутизаторов, которые может пройти этот пакет. При прохождении маршрутизатора это число уменьшается на единицу. Если значение этого поля равно нулю, то пакет должен быть отброшен, и отправителю пакета может быть послано сообщение Time Exceeded (ICMP тип 11 код 0).
Версия 6 (IPv6)
Основная статья: IPv6
Позиция в октетах | 1 | 2 | 3 | |||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Позиция в битах | 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 | |
Версия | Класс трафика | |||||||||||||||||||||||||||||||
4 | 32 | Длина полезной нагрузки | След. заголовок | Число переходов | ||||||||||||||||||||||||||||
8 | 64 | IP-адрес отправителя | ||||||||||||||||||||||||||||||
12 | 96 | |||||||||||||||||||||||||||||||
16 | 128 | |||||||||||||||||||||||||||||||
20 | 160 | |||||||||||||||||||||||||||||||
24 | 192 | IP-адрес получателя | ||||||||||||||||||||||||||||||
28 | 224 | |||||||||||||||||||||||||||||||
32 | 256 | |||||||||||||||||||||||||||||||
36 | 288 |
- Версия — для IPv6 значение поля должно быть равно 6.
- Класс трафика — определяет приоритет трафика (QoS, класс обслуживания).
- Метка потока — уникальное число, одинаковое для однородного потока пакетов.
- Длина полезной нагрузки — длина данных в октетах (заголовок IP-пакета не учитывается).
- Следующий заголовок — задаёт тип расширенного заголовка (англ. IPv6 extension), который идёт следующим. В последнем расширенном заголовке поле Next header задаёт тип транспортного протокола (TCP, UDP и т. д.) и определяет следующий инкапсулированный уровень.
- Число переходов — максимальное число маршрутизаторов, которые может пройти пакет. При прохождении маршрутизатора это значение уменьшается на единицу и по достижении нуля пакет отбрасывается.
Свойства протокола
Путь IP пакета от отправителя к адресату может быть извилистым и проходить через множество различных серверов. Каждый бывает настроен по-своему или же перегружен. Поэтому могут возникать ситуации, когда узел физически не может пропустить пакет из-за его размера. Тогда протокол разбивает пакет на составные, более мелкие части и спокойно их переправляет через проблемный сервер. «Куски» пакета доставляются адресату и протокол IP объединяет их в единое целое. Свойство IP, которое может дробить данные, а затем соединять их, называется фрагментацией.
Стоит сказать, что IP также может и запретить разбивать пакеты на составляющие. Если такие данные не могут пройти через узел полностью, то они будут уничтожены, а отправителю направлено сообщение о проблеме.
Заключение
Фрагментация — это разбиение IP пакет на несколько частей, фрагментов для передачи по сети с маленьким MTU. Фрагментации используются для объединения сетей построенных на основе разных технологий, у которых отличается MTU.
В заголовке Ip пакета для фрагментации используются три поля: идентификатор пакета, флаги и смещение фрагмента. Следует отметить, что в следующей версии протокола ipv6 отказались от фрагментации на маршрутизаторах, в IPv6 узлы отправителей должны сами подобрать максимальный размер пакета с помощью технологии Path MTU Discovery.
Рекомендую прочесть статьи про протокол IP и IP маршрутизацию в компьютерных сетях.