Вопрос

Я подумываю об использовании SCTP ( СКТП ) вместо TCP для p2p - приложения, написанного на C.Должен ли я это сделать?Также, как скорость SCTP сравнивается со скоростью TCP?

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

С уважением

Как это помогает вам?

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top