Общие накладные расходы на создание TCP-соединения - PullRequest
13 голосов
/ 30 января 2011

Мне бы хотелось узнать общую стоимость создания нового соединения по сравнению с UDP. Я знаю, что TCP требует первоначального обмена пакетами (трехстороннее рукопожатие). Какие будут другие расходы? Например, есть ли какая-то магия в ядре, необходимая для настройки буферов и т. Д.?

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

Ответы [ 3 ]

11 голосов
/ 30 января 2011

Как только пакет UDP был сброшен на провод, стек протокола UDP может полностью забыть об этом.С TCP, как минимум, есть сведения о соединении (порт источника / адресата и IP-адрес источника / адресата), порядковый номер, размер окна для соединения и т. Д. Это небольшой объем данных, но он быстро складывается взанятый сервер со многими подключениями.

И еще есть 3-х стороннее рукопожатие.Некоторые мозговые мертвецы (и / или злонамеренные системы) могут злоупотреблять процессом (ищите «синхронный поток») или просто сбрасывать соединение с их конца, оставляя вашу систему в ожидании ответа или близкого уведомления, которое никогда не придет.Плюсом является то, что с TCP система сделает все возможное, чтобы убедиться, что пакет получает то, что должен.С UDP нет никаких гарантий.

8 голосов
/ 30 января 2011

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

5 голосов
/ 16 мая 2012

ВАРИАНТ 1: Общая стоимость создания TCP-соединения:

  1. Создание сокетного соединения
  2. Отправка данных
  3. Разрывное соединение

Шаг 1. Требуется обмен пакетами, поэтому он задерживается на задержку сети и обратно плюс время обслуживания сервера назначения. Нет значительного использования ЦП ни на одном из блоков.

Шаг 2. Зависит от размера сообщения.

Шаг 3: IIRC, просто отправляет пакет «сейчас закрывается», без ожидания подтверждения назначения, поэтому задержка не требуется.

ВАРИАНТ 2: Стоимость UDP: *

  1. Создать объект UDP
  2. Отправка данных
  3. Закрыть объект UDP

Шаг 1. Требуется минимальная настройка, не нужно беспокоиться о задержке, очень быстро.

Шаг 2: БУДЬТЕ ОСТОРОЖНЫ РАЗМЕРА, в UDP нет повторной передачи, поскольку ему все равно, был ли пакет кем-то принят или нет. Я слышал, что чем больше сообщение, тем больше вероятность получения поврежденных данных и что практическое правило заключается в том, что вы потеряете определенный процент сообщений свыше 20 МБ.

Шаг 3: Минимальная работа, минимальное время.

ВАРИАНТ 3: используйте вместо ZeroMQ

Вы сравниваете TCP с UDP с целью сокращения времени переподключения. Есть хороший компромисс: розетки ZeroMQ.

ZMQ позволяет вам настроить гнездо публикации, где вам все равно, слушает ли кто-либо (например, UDP), и иметь несколько слушателей на этом сокете. Это НЕ UDP-сокет - это альтернатива обоим этим протоколам.

Подробнее см. ZeroMQ.org .

Это очень высокая скорость и отказоустойчивость, и по этой причине он все чаще используется в финансовой индустрии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...