Высокочастотная торговля - TCP> UDP? - PullRequest
7 голосов
/ 31 октября 2011

Мне сказали, что для системы высокочастотной торговли (HFT), которая требует малой задержки, TCP используется поверх UDP. Мне сказали, что с TCP вы можете устанавливать соединения типа точка-точка, тогда как с UDP вы не можете, однако, насколько я понимаю, вы можете отправлять пакеты UDP на определенный IP / порт.

В этой статье приведено несколько аргументов относительно того, почему UDP> TCP для игр, но я вижу важность для HFT.

Почему TCP лучше использовать для HFT?

(Администраторы. Мой предыдущий пост по этому вопросу был удален без объяснения причин. Если я нарушаю условия использования, пожалуйста, предупредите меня об этом вместо того, чтобы молча удалить вопрос)

Ответы [ 5 ]

13 голосов
/ 31 октября 2011

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

В приложении HFT вам нужны практически все функции, которые требуются TCP. Поэтому, если вы выбрали UDP, вам бы пришлось реализовать эти функции самостоятельно. Это означает, что вам нужно реализовать установление соединения, разрыв соединения, повторную передачу, время передачи, окна и т. Д.

Если бы был способ сделать все те вещи, которые были бы лучше, чем то, что делал TCP, то TCP сделал бы это так. У вас была бы одна рука за спиной, потому что TCP сильно оптимизирован некоторыми из лучших умов планеты и реализован в / с ядром.

5 голосов
/ 31 октября 2011

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

3 голосов
/ 06 ноября 2011

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

Однако многоадресный маршрут UDP по-прежнему испытывает те же проблемы, что и одноадресный UDP для накладных расходов дейтаграмм.Поэтому многие HFT-системы используют системы с аппаратным ускорением, которые могут мультиплексировать потоки во многих сетевых картах через TCP, например, Solace.

В наши дни, хотя вы хотите полностью обойти ядро ​​с помощью, например, IP-стека пользовательского пространства, такого как Solarflare или Mellanoxили даже пропустить ядро ​​и стек IP с помощью RDMA.

2 голосов
/ 31 октября 2011

По сути, современные реализации TCP будут такими же быстрыми, как UDP, если вы сохраняете соединение живым.Если TCP вынужден пересылать пакет, вам нужно будет отправить его и по UDP тоже.Кроме того, для UDP вы в конечном итоге будете использовать тот же код надежности (повторная передача отброшенных пакетов), который уже реализован в TCP.

2 голосов
/ 31 октября 2011

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

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

Нет особой разницы между портом TCP и портом UDP, кроме используемого типа соединения (отправка пакета и его потеря, стиль UDP или согласование соединения и его поддержка, стиль TCP) и прослушивания службы на стороне сервера. например TCP / 25 обычно показывает SMTP-сервер, а UDP / 25 - нет.

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