Высокочастотный трейдинг — TCP › UDP?

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

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

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

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


person n00b    schedule 31.10.2011    source источник
comment
У меня нет опыта работы с полем HFT, но я подозреваю, что используется TCP, потому что он гарантирует, что пакет дойдет до места назначения, а UDP — нет.   -  person hafichuk    schedule 31.10.2011
comment
Соединение UDP будет быстрее, но не таким надежным. Было бы плохо, если бы вы попытались продать свои резко падающие акции, но ваш пакет UDP не прошел. Вероятно, поэтому большинство людей используют TCP, а не UDP для HFT.   -  person Seth Carnegie    schedule 31.10.2011
comment
Вот пост, который говорит именно об этом.   -  person rbinnun    schedule 18.03.2019


Ответы (5)


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

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

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

person David Schwartz    schedule 31.10.2011
comment
Есть некоторые фонды, у которых была своя оптимизированная версия ядра для уменьшения задержки от сетевой карты до алгоритма. - person Suminda Sirinath S. Dharmasena; 03.12.2011
comment
Не уверен, что согласен. Когда пакет потерян, TCP блокирует поток данных к приложению до успешной повторной передачи. Данные HFT похожи на видео — если у вас нет кадра вовремя, забудьте о нем — уже слишком поздно — просто получите следующий. - person ; 24.06.2012
comment
@BlankXavier: Вы должны сопоставить это со всеми другими вещами, которые TCP делает, которые вам нужны, такими как скорость передачи, обнаружение дубликатов пакетов, установка и разрыв соединения и так далее. Вы также должны учитывать относительную зрелость и надежность того, что вы придумываете сами, по сравнению с TCP. А с точки зрения производительности каждая современная платформа имеет сильно оптимизированный стек TCP, включая такие вещи, как аппаратная разгрузка. Самому трудно с этим сравниться. - person David Schwartz; 24.06.2012
comment
Те же платформы также имеют сильно оптимизированные стеки UDP, и на этих платформах есть большая отдача от усилий по написанию этого кода. Черт, эти компании внедряют программное обеспечение в FPGA для повышения производительности. Внедрение собственной транспортной оболочки UDP — правильное решение. - person ; 24.06.2012

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

person Kirk Strauser    schedule 31.10.2011

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

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

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

person Steve-o    schedule 06.11.2011

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

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

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

person septical    schedule 31.10.2011

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

person Jeremiah Gowdy    schedule 31.10.2011