Хорош ли SCTP для одноранговых приложений?
-
19-08-2019 - |
Вопрос
Я подумываю об использовании 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?