Хорошо ли SCTP для одноранговых приложений? - PullRequest
2 голосов
/ 17 марта 2009

Я рассматриваю возможность использования SCTP вместо TCP для приложения p2p, написанного на C. Должен ли я это сделать? Кроме того, как скорость SCTP сравнивается со скоростью TCP?

EDIT: Я обнаружил, что SCTP может быть туннелирован по UDP с единственной проблемой, когда туннелируемый SCTP не совместим с ненунтированным SCTP.

Ответы [ 3 ]

4 голосов
/ 24 апреля 2009

Рассматривали ли вы, на всех ли ваших целевых системах будет предварительно установлен SCTP, или ваше приложение должно будет включать сам SCTP? По своему опыту я не ожидал, что на всех системах будет установлен SCTP, и я бы ожидал, что это будет не так, если бы это была Windows.

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

Рассматривали ли вы, какие преимущества вы хотите получить от SCTP? Вы упомянули отказоустойчивость, но для работы с SCTP требуется, чтобы приложение имело несколько портов Ethernet и IP-адресов. Это вероятно в вашем приложении?

Как бы я ни любил SCTP (!), Я бы серьезно подумал о том, чтобы придерживаться протокола TCP, если вы не уверены, что SCTP необходим или если вы не контролируете хосты, на которых развернуто ваше приложение.

Привет

1 голос
/ 17 марта 2009

Если это для локальной сети, обязательно зайдите.

Однако обратите внимание, что если вы планируете использовать его в открытом Интернете, многие брандмауэры потребительского уровня недостаточно гибки, чтобы пропускать через них нераспознанные протоколы IP.

0 голосов
/ 27 марта 2009

Как это тебе поможет?

Вы P2P, поэтому у каждого пира должна быть хотя бы одна розетка, открытая для каждого другого пира.

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

Просто есть один сокет и ваш собственный маленький протокол; отправьте пакет с заголовком, заголовок указывает тип контента, например, команда или часть файла - и если да, то какой файл и какой диапазон байтов.

Конечно, вы получаете небольшие накладные расходы, тогда как если у вас есть один сокет для команд и один на файл, вы более эффективны. Стоит ли сохранять один сокет на одноранговый узел (при условии одной загрузки за раз) время / хлопоты / сложность использования SCTP?

...