Протокол IP: подробное описание

Internet Protocol (IP, досл. «межсетевой протокол») – маршрутизируемый протокол сетевого уровня стека TCP/IP. Именно IP стал тем протоколом, который объединил отдельные компьютерные сети во всемирную сеть Интернет. Неотъемлемой частью протокола является адресация сети.

IP объединяет сегменты сети в единую сеть, обеспечивая доставку пакетов данных между любыми узлами сети через произвольное число промежуточных узлов (маршрутизаторов). Он классифицируется как протокол сетевого уровня по сетевой модели OSI. IP не гарантирует надежной доставки пакета до адресата – в частности, пакеты могут прийти не в том порядке, в котором были отправлены, продублироваться (приходят две копии одного пакета), оказаться поврежденными (обычно поврежденные пакеты уничтожаются) или не прийти вовсе. Гарантию безошибочной доставки пакетов дают некоторые протоколы более высокого уровня – транспортного уровня сетевой модели OSI – например, TCP, которые используют IP в качестве транспорта.

Существует две версии протокола: IPv4 и IPv6:

IP-адрес

Уникальный сетевой адрес узла в компьютерной сети, построенной на основе стека протоколов TCP/IP. IP-адрес может быть назначен статически или динамически.

TTL

Time to live (TTL) в вычислительной технике и компьютерных сетях – предельный период времени или повторений в течение которых набор данных (пакет) может существовать до своего исчезновения.

В IPv4 TTL представляет собой восьмиразрядное поле IP-заголовка. Определяет максимальное количество хопов (hop, то есть прыжок, участок между маршрутизаторами), которые пакет может пройти. Наличие этого параметра не позволяет пакету бесконечно ходить по сети. Каждый маршрутизатор при маршрутизации должен уменьшать значение TTL на единицу, но некоторые шлюзы можно настроить, чтобы игнорировать это. Пакеты, не достигшие адресата, но время жизни которых стало равно нулю, уничтожаются, а отправителю посылается сообщение ICMP Time Exceeded.

Если требуется, чтобы пакет не был маршрутизирован (то есть был принят только в своем сегменте), то выставляется TTL=1. На отправке пакетов с разным временем жизни основана трассировка их пути прохождения (traceroute). Максимальное значение TTL=255. Обычное начальное значение TTL=64 (Linux, Mac, Android, iOS), TTL=128 (Windows).

Изначально, по стандарту RFC 791, время жизни (TTL) в протоколе IPv4 должно было измеряться в секундах (отсюда и название). Каждая секунда ожидания в очереди узла (например, маршрутизатора), а также каждый переход на новый узел, через который проходит датаграмма, должен был уменьшить значение TTL на одну единицу. На практике это не прижилось, и поле TTL просто уменьшается на единицу на каждом транзитном узле (хопе), через который проходит датаграмма. Для того чтобы отразить это, в протоколе IPv6 поле TTL переименовано в «хоп лимит» (Hop Limit).

Коммутаторы традиционно работают на канальном уровне и не уменьшают TTL. Контроль TTL часто используется провайдерами для обнаружения трафика несанкционированного подключенного устройства. К примеру, если на смартфоне включить режим «Мобильная точка доступа» (тетеринг), TTL от подключенных устройств будет на 1 меньше ожидаемого. Тем самым блокируется доступ для этих устройств.

Фрагментация

При доставке IP-пакета он проходит через разные каналы доставки. Возможно возникновение ситуации, когда размер пакета превысит возможности узла системы связи. В этом случае протокол предусматривает возможность дробления пакета на уровне IP в процессе доставки. Соответственно, к конечному получателю пакет придет в виде нескольких пакетов, которые
необходимо собрать в один перед дальнейшим анализом. Возможность дробления пакета с
последующей сборкой называется IP-фрагментацией.

В протоколе предусмотрена возможность запрещения фрагментации конкретного пакета. Если такой пакет нельзя передать через сегмент связи целиком, то он уничтожается, а отправителю направляется ICMP-сообщение о проблеме.

MTU

В компьютерных сетях термин «maximum transmission unit» (MTU) означает максимальный размер полезного блока данных одного пакета (англ. payload), который может быть передан протоколом без фрагментации. Обычно заголовки протокола не входят в MTU, но в некоторых протоколах заголовки могут учитываться. Когда говорят об MTU, обычно имеют в виду протокол канального уровня сетевой модели OSI. Однако этот термин может применяться и для других уровней:

  • L1 – media mtu (полный L2-кадр);
  • L2 – mtu, hw mtu, system mtu;
  • L3 – ip mtu (ip-заголовок учитывается), mtu routing;
  • L4 – tcp mss.

Ограничение на максимальный размер кадра накладывается по нескольким причинам:

  • Для уменьшения времени на повторную передачу в случае потери или неисправимого искажения пакета. Вероятность потерь растет с увеличением длины пакета.
  • Чтобы при полудуплексном режиме работы хост не занимал долгое время канал (также для этой цели используется межкадровый интервал (англ. Interframe gap)).
  • Чем больше отправляемый пакет, тем дольше ждут отправления другие пакеты, особенно в последовательных интерфейсах. Поэтому маленький MTU был актуален во времена медленных коммутируемых соединений.
  • Малый размер и быстродействие сетевых буферов входящих и исходящих пакетов. Однако слишком большие буферы тоже ухудшают производительность.

Значение MTU определяется стандартом соответствующего протокола, но может быть задано автоматически для нужного потока (протоколом PMTUD) или вручную для нужного интерфейса. На некоторых интерфейсах MTU по умолчанию может быть установлено ниже максимально возможного. Значение MTU ограничено снизу, как правило, минимально допустимой длиной кадра.

Для высокопроизводительной сети причины, вызвавшие начальные ограничения MTU, устарели. В связи с этим для Ethernet был разработан стандарт Jumbo-кадров с увеличенным MTU.

Некоторые протоколы, например из группы протоколов ATM, оперируют ячейками фиксированной длины. Для них нет возможности изменить MTU. В некоторых случаях этот подход приводит к лучшему управлению сетевыми потоками.

Номинальная скорость – битовая скорость передачи данных, поддерживаемая на интервале передачи одного пакета без различия служебных и пользовательских заголовков. Очевидно, что чем меньше пакет, тем быстрее он передастся.

Эффективная скорость – это средняя скорость передачи пользовательских данных (нагрузки) в потоке. Этот параметр зависит от соотношения длин служебных заголовков к нагрузке. Во многих случаях некоторый объем информации эффективнее передавать большими пакетами из-за меньших накладных расходов. Корректно сравнивать скорости потоков можно только для одного и того же объема данных, которые требуется передать единовременно.

Чем больше полезная нагрузка пакета по отношению к его заголовкам, тем выше скорость передачи полезной информации и процент использования канала (channel utilization).

Поскольку MTU – это верхняя граница длины полезной нагрузки, то максимальная скорость
достигается, когда нагрузки всех пакетов в потоке имеют длину, равную MTU.

Существует несколько способов увеличения пропускной способности в контексте длин пакетов:

  1. Уменьшение межкадрового интервала. Для Fast Ethernet он по умолчанию равен 0,96 мкс, т.е. времени, за которое могло бы быть передано 12 байт. Некоторые сетевые адаптеры в полнодуплексном режиме могут передавать и получать кадры с уменьшенным межкадровым интервалом;
  2. Сжатие заголовков. Пример реализации – метод сжатия заголовков TCP/IP Якобсона.
  3. Сжатие нагрузки низкого уровня. Пример реализации – IP Payload Compression Protocol.
  4. Решение проблемы передачи небольших данных (tinygram problem) за счет придерживания в буфере малых данных, чтобы отправить один большой пакет. Пример реализации – алгоритм Нейгла. Частный случай этой проблемы – «болтливые» протоколы, посылающие множество запросов там, где можно обойтись одним. Существуют программные и аппаратные решения, осуществляющие оптимизацию таких соединений, – например, у компании Riverbed Technology.

Известные проблемы

Хост знает значение MTU для собственного (возможно, и своих соседей) интерфейса, но минимальное значение MTU для всех узлов сети обычно неизвестно. Другая потенциальная проблема заключается в том, что протоколы более высокого уровня могут создавать пакеты большего размера, не поддерживаемые другими узлами сети.

Прохождение больших пакетов по сети с фрагментацией

Для устранения этих проблем IP поддерживает фрагментацию, что позволяет разбивать дейтаграмму на меньшие кусочки, каждый из которых будет достаточно мал, чтобы беспрепятственно пройти через узел, из-за которого происходит фрагментация. Фрагменты пакетов маркируются таким образом, чтобы IP целевого хоста мог произвести сборку фрагментов в оригинальную дейтаграмму. Фрагментация пакетов имеет свои недостатки:

  • целевой хост должен получить все фрагменты для того, чтобы собрать пакет. Если хотя бы один фрагмент утерян – весь пакет должен быть отправлен заново;
  • как правило, фрагментацию выполняют более медленные процессоры, нежели те, что обрабатывают транзитный трафик. В некоторых случаях задержки, которые вызовет фрагментация всех пакетов, могут быть сочтены неприемлемыми;
  • увеличивается нагрузка на процессоры промежуточных маршрутизаторов и машины адресата;
  • увеличиваются требования к памяти маршрутизатора, т.к. необходимо хранить в буфере все фрагменты IP-пакета;
  • некоторые межсетевые экраны могут блокировать фрагменты;
  • из-за копии IP-заголовка для каждого фрагмента неэффективно используется полоса пропускания;
  • протоколам маршрутизации, например OSPF, требуется согласованный MTU для корректной работы.

Для обозначения кадров, которые имеют ненормативный размер, в сетях Ethernet применяются следующие термины:

  • RUNT (коротышка) – кадр, размер которого менее 64 байт (512 бит);
  • LONG (длинный) – кадр, размер которого лежит в пределах от 1518 до 6000 байт;
  • GIANT (гигант) – кадр, размер которого превышает 6000 байт.

Path MTU discovery

Термин Path MTU означает наименьший MTU на пути следования пакета в сети.

Хотя фрагментация решает проблему несоответствия размеров пакетов и значения MTU, она ощутимо снижает производительность сетевых устройств. В связи с этим в 1988 году была предложена альтернативная технология, названная Path MTU discovery (RFC 1191). Суть технологии заключается в том, что при соединении двух хостов устанавливается параметр DF (англ. don’t fragment «не фрагментировать»), который запрещает фрагментацию пакетов. Это приводит к тому, что узел, значение MTU которого меньше размера пакета, отклоняет передачу пакета и отправляет сообщение ICMP: «Необходима фрагментация, но установлен флаг ее запрета (DF)». Хост-отправитель уменьшает размер пакета и отсылает его заново. Такая операция происходит до тех пор, пока пакет не будет достаточно мал, чтобы дойти до хоста-получателя без фрагментации.

Однако и у этой технологии существуют потенциальные проблемы. Некоторые маршрутизаторы настраиваются администраторами на полное блокирование ICMP-пакетов (это не очень грамотно, но может быть самым простым решением нескольких проблем безопасности). В результате, если размер пакета не соответствует значению MTU на определенном участке, пакет отбрасывается, а хост-отправитель не может получить информацию о значении MTU и не отправляет пакет заново. Поэтому соединение между хостами не устанавливается. Проблема получила название «MTU Discovery Black Hole» (RFC 2923), и протокол был модифицирован для детектирования таких маршрутизаторов. Одной из распространенных проблем при работе в сети, блокирующей ICMP-пакеты, является работа в IRC, когда пользователь успешно проходит авторизацию, но не может получить так называемое MOTD (message of the day), в результате чего использование сети не представляется возможным.

Проблема представляет потенциальную опасность для любого PPPoE-соединения,
использующего MTU меньше типового (1500 байт).

Существует несколько вариантов решения этой проблемы. Самым простым, безусловно, является отмена фильтрации пакетов ICMP. Однако зачастую подобная операция находится вне компетенции пользователя. Поэтому проблему решают путем ручной настройки размера передаваемого пакета на шлюзе пользователя. Для этого меняют значение MSS (максимальный размер сегмента, то есть величина у которой MTU меньше на 40 байт в случае протокола IPv4). При установке соединения хосты обмениваются информацией о максимальном размере сегмента, который каждый из них сможет принять. Поэтому, меняя значение MSS, заставляют оба хоста обмениваться пакетами, которые шлюз пользователя сможет заведомо принять без фрагментации.

Кроме того, существуют методы отмены бита DF с целью разрешения фрагментации. Однако метод корректировки MSS является предпочтительным.

В маршрутизаторах Cisco реализация PMTUD для туннеля поддерживает только TCP-пакеты.

Оцените статью
Smartadm.ru
Добавить комментарий