Хоп (компьютерные сети)

Хоп (англ. hop) — действие, которое происходит при передаче пакета данных от одного сегмента сети к другому в проводных компьютерных сетях. По мере продвижения от источника к получателю, пакеты данных проходят через маршрутизаторы. Счётчик хопов отражает количество сетевых устройств, через которые проходят данные от источника к получателю, в зависимости от протокола маршрутизации, это число может включать источник/получатель; при этом первый хоп может считаться либо как 0, либо как 1[1]. Поскольку на каждом хопе возникают задержки, например из-за технологии store and forward и других видов задержек, большое количество хопов между источником и получателем означает снижение реактивности работы сети.

Счётчик хопов

В проводных сетях счётчик хопов отражает количество сетей или сетевых устройств, через которые проходят данные между источником и получателем (в зависимости от протокола маршрутизации, это число может включать источник/получатель; при этом первый хоп может считаться либо 0, либо 1[1]). Таким образом, счётчик хопов является приблизительной мерой расстояния между двумя хостами. Для протоколов маршрутизации, использующих отсчёт с 1[1] (например, RIP), хопов n означает, что n сетей разделяют отправителя и получателя[1][2]. В других протоколах, например DHCP, термин «хоп» используется для обозначения количества раз, когда сообщение было переслано[3].

В сетях третьего уровня (например, IP) каждый маршрутизатор на пути данных считается отдельным хопом. Однако сам по себе этот показатель не подходит для оценки оптимального маршрута, поскольку не учитывает скорость, загрузку, надёжность или задержку в каждом хопе — только их общее число. Тем не менее, некоторые протоколы маршрутизации, например RIP, используют только счётчик хопов как основную метрику[4].

Каждый раз, когда маршрутизатор принимает пакеты, он изменяет их, уменьшая значение параметра time to live, или TTL. Если пакет поступил с нулевым значением TTL, маршрутизатор его удаляет. Это предотвращает бесконечное перемещение пакетов по сети в случае ошибок маршрутизации. Маршрутизаторы могут отслеживать счётчик хопов, но другие сетевые устройства (такие как хабы Ethernet или мосты) обычно этого не делают.

Предел по хопам

В IPv4 данный предел называется время жизни, а в IPv6ограничение хопов. Это поле указывает максимальное количество хопов, которое разрешено пакету до его удаления. Маршрутизаторы при пересылке пакетов соответствующим образом уменьшают значения TTL или ограничения хопов. Они не пересылают пакет, если результат оказывается равным нулю или меньше. Это предотвращает попадание пакетов в бесконечный цикл.

Следующий хоп

В конфигурации сетевых устройств под хопом часто понимают следующий хоп[5]. При пересылке трафика сетевой хоп направляет его следующему элементу цепочки на пути к получателю. Маршрутизирующая таблица обычно содержит список известных подсетей или IP-адресов, для которых определён следующий хоп. Благодаря хранению только информации о следующем хопе, next-hop routing позволяет уменьшать размер таблицы маршрутизации. Используемый шлюз знает только один дальнейший шаг маршрута, а не полный путь до получателя. Если не найден следующий хоп, устройство может либо без сообщения удалить пакет, либо вернуть ошибку — в зависимости от типа сети. В домашних сетях устройство обычно получает только маршруты для локальной сети, а также шлюз по умолчанию, так как трафик или направляется к локальной сети, или передаётся интернет-провайдеру[6]. Для маршрутизации между разными сетями маршрутизаторы должны располагать несколькими маршрутами[7]. Обычно маршруты настраиваются либо неявно при назначении адреса с помощью маски сети, либо вручную (например, через команду route), либо динамически с помощью протоколов конфигурирования, таких как DHCP или различные протоколы маршрутизации.

В сетях TCP/IP, использующих Ethernet как уровень связи, в качестве получателя всегда указывается IP-адрес, однако следующий хоп технически не обязан относиться к той же семье адресов. Поскольку пакет должен быть передан на канальном уровне, следующий хоп должен разрешаться только до канального адреса, например, MAC-адреса. В Linux, например, следующий хоп должен быть либо IP-адресом, либо интерфейсом. Семейства адресов для крайней и промежуточной точек не обязаны совпадать, благодаря чему возможно, например, передавать IPv4-трафик по IPv6-сети и наоборот. При отсутствии явного адреса считается, что получатель находится на локальной линии, иначе используется следующий хоп. Любой из этих адресов затем передаётся соответствующему протоколу разрешения адресов: NDP для IPv6 или ARP для IPv4 — для разрешения до необходимого канального адреса. В других сценариях, например, через VPN, для определения конечного адресата могут использоваться иные методы. Во всех случаях пересылки принципиально важно, чтобы следующий хоп был логически связан с текущим, формируя непрерывную цепочку от источника до получателя. Логическая связь не обязательно означает физическое подключение, так как пакет может быть передан через виртуальный туннель.

Source routing описывает ситуацию, когда данные, вложенные в пакет, позволяют хопу, например, источнику, влиять на решения о маршрутизации на промежуточных хопах[8]. Это позволяет проводить инженерно-гибкое планирование сетевого трафика, оптимизировать задержки в сети, снизить нагрузку на сеть или соответствовать дополнительным требованиям.

Диагностика

Команда traceroute используется для измерения количества маршрутизаторов между двумя хостами. Счётчики хопов могут использоваться для поиска неисправностей в сети или проверки корректности маршрутизации.

Беспроводные ad hoc сети

В беспроводных ad hoc сетях зачастую каждый узел действует и как маршрутизатор. Поэтому термины «хоп» и «счётчик хопов» могут трактоваться по-разному. Часто отправляющий узел считается за первый хоп, что приравнивает понятие числа «хопов» с подсчётом по числу промежуточных маршрутизаторов или по переходам от узла к узлу. Например, RFC 6130 определяет «соседей в 1 хопе» как любые другие узлы, до которых можно добраться напрямую по беспроводному интерфейсу.

Примечания

  1. 1 2 3 4 5 Comer, Douglas. Internetworking with TCP/IP. Volume one : [англ.]. — Sixth. — Harlow, 2014. — P. 294 (примечания). — ISBN 978-1-292-05623-4.
  2. Comer, Douglas. Internetworking with TCP/IP : [англ.]. — Sixth. — Upper Saddle River, New Jersey, 2014. — P. 293, 655. — ISBN 978-0-13-608530-0.
  3. Comer, Douglas. Internetworking with TCP/IP. Volume one : [англ.]. — Sixth. — Harlow, 2014. — P. 466. — ISBN 978-1-292-05623-4.
  4. Routing Information Protocol (RFC 1058) (англ.). IETF (июнь 1988). Дата обращения: 18 июня 2024.
  5. CCNP Practical Studies: Layer 3 Switching — Introduction to Layer 3 Switching (англ.). Cisco Press. Дата обращения: 18 июня 2024.
  6. Salter, Jim The Ars guide to building a Linux router from scratch (англ.). Ars Technica (17 апреля 2016). Дата обращения: 18 июня 2024.
  7. Beijnum, Iljitsch van Internet routing shows growing pains?again (англ.). Ars Technica (17 января 2008). Дата обращения: 18 июня 2024.
  8. 2.2.10. Отключение Source Routing (англ.). docs.redhat.com. Дата обращения: 18 июня 2024.

Категории