Как я могу сформулировать задержку связи в TCP / IP?

12

У меня возникают трудности при выводе математической модели / уравнения для оценки задержки передачи данных между двумя узлами, взаимодействующими по протоколу TCP / IP. Узлы обмениваются данными на основе протокола HTTP. В этой модели наиболее важными факторами для изучения являются физическое расстояние между двумя узлами в сети, количество промежуточных переходов, пропускная способность, задержка обработки при каждом переходе. Я искал в Интернете, но ничего не смог найти в этом смысле, скорее нашел кое-что о сетях с коммутацией каналов и протоколе UDP. Могу ли я настроить их под TCP?

Espanta
источник
Это движущаяся цель, и существует так много зависимостей, которые могут изменить константы вашей модели. Например, если вы хотите включить задержку переадресации для каждого прыжка, то в качестве базовой линии вам необходимо знать марку и модель каждого устройства в строке. Если вы не контролируете или не знаете каждое устройство в пути, например, через Интернет или другую сеть, это практически невозможно рассмотреть. Если вы предполагаете, что знаете все о каждом переходе в пути, вы можете применить базовую задержку переадресации, скажем, 1,2 микросекунды для модели коммутатора «A» и 5,0 для модели коммутатора «B» и так далее.
нетдад
1
+1 и здесь !, вы должны
пометить
Исходный код:, httpingиспользуйте комментарийhttping -Gbg www.google.com -c 5
Grijesh Chauhan
@Espanta, ваша цель - оценить только задержку или пропускную способность? Пропускная способность сильно зависит от таких функций TCP, как SACK, RWIN, болтливость протокола приложений и, конечно, задержка.
generalnetworkerror
@generalnetworkerror, мне нужна задержка в оба конца для получения http и отправки запроса и ответа.
Espanta

Ответы:

8

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

  • Смотрите мои вопросы по электронике SE; Задержка кодирования Ethernet и отношение к номинальной частоте кабеля и скорости электричества (распространение сигнала?) Через медь для задержки связи . Поскольку вы будете использовать стандартизированные скорости (100 Мбит / с, 1 Гбит / с, 10 Гбит / с и т. Д.), Не рассматривайте волокно или медь по-разному. «Задержка» в обоих направлениях почти такая же, но, очевидно, медь не может нести сигнал так далеко. У меня есть этот вопрос на сайте Physics SE, на который я знаю ответ. Мне просто нужно найти время, чтобы исправить это, так что следите за этим, если вам интересно (я буду публиковать еще несколько вопросов, связанных с использованием волоконно-оптической связи, на которые теперь я знаю ответ, когда получу шанс ).

  • Гораздо больше задержек будет добавлено устройствами в конце ссылки. Не существует стандартного способа сказать: «2 коммутатора вдоль пути - это задержка Xms, 4 коммутатора - это 2 * Xms, 2 маршрутизатора - это Yms ... и т. Д.». Предполагая, что вы используете, например, 1 Гбит / с и устройства, находящиеся на пути вперед с линейной скоростью, мы знаем, что это 1000000000 бит / с, поэтому физический интерфейс работает с фиксированной скоростью кодирования (в диапазоне от 1 наносекунды на бит до любой максимальной из Используемая схема кодирования символов, например, 10b )

  • Существует три основных типа задержки (на физическом уровне), о которых вы должны знать и учитывать; Задержка сериализации, задержка кодирования, задержка распространения (и задержка обработки, задержка в очереди, задержка кодирования и декодирования, но они выше физического уровня, но требуют упоминания!). Они достаточно хорошо документированы в сети Интернет, VoIP: In-Depth Analysis , Slide 13 здесь , нагрузки на Google Scholar , и многое другое.

  • По мере продвижения вверх по стеку протоколов я буду исходить из предположения, что MAC-адрес назначения находится в каждой таблице кулачков коммутаторов, а на уровне IP - MAC-адрес назначения в таблицах ARP. Дополнительная задержка, вызванная этими процессами обнаружения, возникает только для первого пакета в потоке, поэтому их можно обойти, увеличив тайм-ауты и отправив безвозмездные ARP и т. Д.

  • Когда вы доберетесь до уровня приложений, это будет действительно сложно, потому что это зависит от сервера (например), обрабатывающего запрос, который будет подвергаться задержке прерывания. Количество прерываний, необходимых для обработки запроса и переключения контекста из-за нагрузки, непредсказуемо.

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

В то же время большинство людей склонны работать с этой цифрой для задержки на физическом слое меди / волокна около 0,6 * c (C = скорость света). Кроме того, вам нужно подумать об обмене TCP ACK через каждые X пакетов, который отличается, например, если вы используете SACK, и если вы используете гигантские кадры и / или больший размер MSS (теперь MTU также необходимо учитывать!) , если вы отправляете больше промежуточных ACK (если интересует объем передаваемых данных). Вы также должны учитывать печально известный продукт с задержкой пропускной способности и не делать глупое неверное толкование, которое я сделал на этой странице. Я начал делать различные простые (и очень некрасивые) калькуляторы данных здесь, Снова в стадии разработки, я постараюсь обновить их в ближайшее время. Я планирую добавить калькулятор, похожий на то, что вы пытаетесь сделать. Я также сделал несколько калькуляторов на свет и волокно, если вам интересно, но опять же, нет времени !, я еще не дошел до их загрузки. Я постараюсь как можно скорее обновить этот ответ, в ближайшие дни.

PS Я забыл упомянуть QoS! Если QoS находится в игре где-нибудь на пути, будет очень сложно вычислить RTT!

jwbensley
источник
Благодарю. Это довольно мило в деталях. Я должен подчеркнуть, что количество прыжков между двумя узлами сильно влияет на физическое расстояние между двумя узлами в проводной сети. (По крайней мере, так как это показывает мой настоящий бенчмаркинг.) Итак, я соберу все вместе и скоро приду с моей моделью. Большое спасибо всем, кто прочитал, переоценил, ответил и ответит.
Эспанта
Телекоммуникации, использующие оптоволокно (при условии, что OP не имеет дело с задержкой только в центре обработки данных или какой-либо настройке, где он имеет полный контроль над физической инфраструктурой), могут стать интересными и сделать моделирование почти невозможным. Анекдот, чтобы подчеркнуть проблему. У меня когда-то были неудачи в Луисвилле, Кентукки, штат Кентукки, штат Луизиан, штат Кентукки, штат Калифорния. Позвонили в телефонную компанию, и они сообщили мне, что виноват отрезок волокна в западном Иллинойсе. Посмотрите на карту и поймите, почему это просто безумие. Однако связи с более высокой пропускной способностью с меньшей вероятностью станут жертвами такого рода безумие операторов связи.
Джефф Макадамс
5

(Я хочу отметить, что другие опубликовали отличные ответы о том, как работают задержки и др. И что их вызывает. Но ОП спросил о моделировании; Базовая модель проста, и вы просто включаете примеры чисел. Если вы хотите знать, почему задержки такие, какие они есть, тогда посмотри ответы всех остальных: ^)

Задержка сети - это просто время прохождения от одной конечной точки к другой конечной точке, охватывающее N переходов между ними .

Таким образом, у вас есть N сегментов (прыжков) с N-1 промежуточными узлами. У каждого узла есть задержка (совокупный эффект нескольких вещей на этом узле, таких как задержка очереди, задержки обработки и т. Д.), И каждый сегмент имеет транзитную задержку. Всего 2N - 1 независимых переменных. Таким образом, это seg1 + node1 + seg2 ... + node (N-1) + segN Один переход , это просто = seg1, два перехода это seg1 + node1 + seg2 и т. Д.

Затем вы должны определить, что все эти части. Таким образом, вы можете построить модельную сеть с сетью CATV, спутниковой линией связи, оптоволоконным каналом, сетью Ethernet и т. Д. Для каждой из этих технологий вам нужно найти пример информации.

Задержки транзита будут примерно равны размеру данных, деленному на скорость передачи сегмента. Если вам нужна более точная модель, вы должны добавить задержку во времени полета - примерно длину сегмента, деленную на скорость потока данных (приблизительную скорость света). Это имеет значение, если у вас есть спутниковая связь; Геосинхронный спутник очень важен.

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

Если вы хотите задержку приложения (например, задержку до начала потока данных FTP-передачи), то вы строите счет, подсчитывая, сколько раз ваша сетевая задержка вступает в игру. Например, 3-х стороннее TCP-квитирование добавляет тройную задержку в сети и т. Д. В соответствии с тем, что видит приложение.

Крейг Константин
источник
3

Вы можете оценить задержку прохождения сигнала в обоих направлениях, взяв пакет с обеих сторон, а затем измерить задержку между запросами, исходящими с контролируемой машины, и ответами, возвращающимися. Например, если вы отметите время, когда SYN вышел на удаленный компьютер, а затем отметите время, когда пришел ответ SYN + ACK, разница даст вам довольно хороший пример задержки передачи данных в оба конца.

Имейте в виду, что это будет больше, чем истинная задержка в сети, и насколько больше зависит от того, насколько сильно загружена какая-либо из машин.

netdad
источник
спасибо за ваш ответ, но я не хочу измерять его с помощью какого-либо кодирования или интерпретации машины, мне нужно сформулировать его с помощью математической модели. Например, что-то вроде: общая задержка = общее распространение + общая передача + общее сохранение и пересылка + общая обработка. И для каждого из этих сроков у меня может быть другая формула. Так что это можно измерить математически.
Espanta
3

Задержка между двумя хостами будет зависеть от нескольких факторов:

  • Задержка распространения
  • Задержка сериализации
  • Задержка в очереди / буферизации

Задержка распространения - это сколько времени физически требуется пакетам для перемещения между двумя точками. Скорость света в волокне составляет около 200000 км / с. В Швеции, где я живу, около 1570 км, так что это будет 7,85 мс, но на самом деле это больше, потому что это расстояние с точки зрения птиц.

Задержка сериализации - это то, сколько времени требуется для разделения пакета через физическую среду, то есть интерфейсы сетевого устройства. Если у вас соединение 2 Мбит и вы отправляете 1500-байтовый пакет, то для сериализации пакета потребуется 6 мс (12000/2000000).

Задержка в очереди / буферизации - это сколько времени пакет должен находиться в очереди / буфере перед отправкой на интерфейс. В зависимости от скорости интерфейса и размера используемых буферов, это может быть ничем или значительной задержкой.

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

Даниэль Диб
источник
как насчет количества прыжков? и задержки на каждом прыжке?
Espanta
Сложно составить общую формулу, потому что некоторые факторы различаются, например, сериализация и организация очередей. Вот кто-то, кто написал об этом. ccieflyer.com/pdf/2009-Mar-Oleg-Berzin.pdf - Математика выходит за рамки моих математических навыков :)
Даниэль Диб