C++/Go/Python
Game Developer

Причины сетевых задержек

Выдержка из книги “Многопользовательские игры. Разработка сетевых приложений” от авторов Глейзер Джошуа и Мадхав Санджай.

Существуют четыре основных вида задержек, испытываемых пакетом в своем жизненном цикле:

  • Задержка на обработку.
    Любой маршрутизатор читает пакеты из сетевого интерфейса, проверяет IP-адрес назначения, определяет следующую машину, куда передать пакет, и выводит пакет в соответствующий интерфейс. Время, затраченное на исследование адреса получателя и определение дальнейшего маршрута, называют задержкой на обработку. В задержку на обработку может также включаться время выполнения дополнительных операций на маршрутизаторе, таких как NAT или шифрование.
  • Задержка на передачу.
    Чтобы передать пакет дальше, маршрутизатор должен иметь интерфейс канального уровня, позволяющий пересылать пакеты через некоторый физический носитель. Протокол канального уровня управляет средней скоростью записи битов в носитель. Например, 1-мегабитное Ethernet соединение позволяет передать в кабель Ethernet примерно 1 миллион битов в секунду. То есть запись одного бита в 1-мегабитный кабель Ethernet занимает примерно одну миллионную долю секунды (1 мкс), соответственно, запись полного 1500-байтного пакета занимает 12,5 мс. Это время, затраченное на запись битов в физический носитель, называют задержкой на передачу.
  • Задержка в очереди.
    Маршрутизатор может обрабатывать не более определенного числа пакетов в единицу времени. Если пакеты поступают быстрее, чем маршрутизатор их успевает обработать, они помещаются в приемную очередь, где ожидают обработки. Аналогично сетевой интерфейс может отправлять исходящие пакеты только по одному, поэтому после обработки, если соответствующий сетевой интерфейс занят, пакет помещается в исходящую очередь. Время, потраченное в этих очередях, называют задержкой в очереди.
  • Задержка распространения.
    Независимо от типа физического носителя, информация не может распространяться быстрее света. Соответственно, к общей задержке добавляется примерно 3,3 нс на каждый метр пути, который должен преодолеть пакет. Это означает, что даже в идеальных условиях пакету потребуется не менее 12 мс, чтобы пересечь территорию США. Время, проведенное в физическом носителе, называют задержкой распространения.

Некоторые из этих задержек можно оптимизировать, некоторые — нет. Задержка на обработку обычно оказывается самым малозначимым фактором, так как большинство современных маршрутизаторов имеют очень быстрые процессоры.

Задержка на передачу обычно зависит от типа соединения канального уровня у конечного пользователя. Пропускная способность обычно увеличивается с приближением к магистральным линиям Интернета, соответственно, на периферии задержка на передачу оказывается самой большой. Передача пакетов максимально большого размера также помогает уменьшить задержку за счет уменьшения числа байтов, расходуемых на заголовки. Чем большую долю пакетов будут занимать заголовки, тем больший вклад они будут вносить в задержку на передачу.

Задержка в очереди является результатом сохранения пакета на время ожидания перед передачей или обработкой. Минимизация затрат на обработку и передачу поможет уменьшить задержку в очереди. Стоит заметить, что для маршрутизации обычно требуется исследовать только заголовок пакета, поэтому уменьшить задержку в очереди можно, посылая несколько больших пакетов вместо множества маленьких.

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