Ответ 1
По сравнению с задержкой обмена пакетами все другие затраты, такие как время установки ядра, незначительны.
Я хотел бы узнать общую стоимость создания нового соединения по сравнению с UDP. Я знаю, что TCP требует первоначального обмена пакетами (трехстороннее квитирование). Какие будут другие расходы? Например, есть ли какая-то магия в ядре, необходимая для настройки буферов и т.д.?
Причина, по которой я спрашиваю, я могу сохранить существующее соединение открытым и повторно использовать его по мере необходимости. Однако, если есть небольшое перенапряжение, это уменьшит сложность.
По сравнению с задержкой обмена пакетами все другие затраты, такие как время установки ядра, незначительны.
Как только пакет UDP был сброшен на провод, стек протокола UDP может полностью забыть об этом. С TCP, на минимальном уровне сведения о подключении (исходный/удаленный порт и источник/удаленный IP), порядковый номер, размер окна для подключения и т.д. Это не огромный объем данных, но быстро складывается на занятый сервер с множеством подключений.
И тогда есть трехстороннее рукопожатие. Некоторые braindead (и/или вредоносные системы) могут злоупотреблять процессом (смотрите "syn flood" ) или просто удаляйте соединение с их конца, оставляя вашу систему в ожидании ответа или уведомления о закрытии, которое никогда не появится. Плюсом является то, что с помощью TCP система сделает все возможное, чтобы пакет попадал туда, где он должен. В UDP нет никаких гарантий.
ВАРИАНТ 1: Общая стоимость создания TCP-соединения:
Шаг 1: Требуется обмен пакетами, поэтому он задерживается на время ожидания и обратно из сети, а также время обслуживания целевого сервера. Никакое существенное использование ЦП в любом ящике не задействовано.
Шаг 2: зависит от размера сообщения.
Шаг 3: IIRC, просто отправляет пакет "закрыть сейчас", w/no wait для адресата назначения, поэтому не требуется латентность.
ВАРИАНТ 2: Затраты UDP: *
Шаг 1: требуется минимальная настройка, без задержек, очень быстро.
Шаг 2: БУДЬТЕ ОСТОРОЖНЫ РАЗМЕРА, в UDP нет повторной передачи, так как это не волнует, был ли пакет получен кем-либо или нет. Я слышал, что чем больше сообщение, тем большая вероятность получения данных повреждена, и что эмпирическое правило состоит в том, что вы потеряете определенный процент сообщений более 20 МБ.
Шаг 3: Минимальная работа, минимальное время.
ВАРИАНТ 3: Вместо этого используйте ZeroMQ
Вы сравниваете TCP с UDP с целью сокращения времени повторного подключения. У НАСЛЕДУЮЩЕГО КОМПРОМИССА: гнезда ZeroMQ.
ZMQ позволяет вам настроить сокет публикации, где вас не волнует, если кто-то слушает (например, UDP), и имеет несколько слушателей в этом сокете. Это не сокет UDP - это альтернатива обеим этим протоколам.
Подробнее см. ZeroMQ.org.
Это очень высокая скорость и отказоустойчивость, и в этих целях все чаще используется в финансовой отрасли.