2

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

EDIT: Я обнаружил, что SCTP can be tunneled over UDP с единственной проблемой, которая является туннелированной SCTP, не совместима с бесконтактным SCTP.

ответ

1

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

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

+0

ОП запросил также о SCTP-туннелировании через UDP, разрешает ли это проблему с брандмауэрами? как насчет пробивки отверстий для обхода NAT? возможно ли это в случае SCTP? –

+0

Туннелирование решит проблему межсетевого экрана. Отверстие отверстий будет зависеть от туннеля, работающего на согласованном хорошо известном порту. – Alnitak

+1

См. Http://tools.ietf.org/html/draft-ietf-behave-sctpnat-05 для текущего состояния SCTP через NAT и предложение исправить его. На данный момент SCTP имеет плохую поддержку протокола, а фактическая реализованная поддержка хуже - в той мере, в которой она не работает со многими устройствами потребительского класса. – Bwooce

0

Как вам помочь?

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

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

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

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

+0

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

+0

Потеря пакетов настолько редка, что это не оправдывает использование SCTP через TCP; все, что вы получаете, - это пара секунд продолжительной пропускной способности других соединений, * если * вы одновременно передаете несколько файлов одному и тому же партнеру. – 2009-03-28 21:48:59

+0

Что касается небольших заголовков - я подозреваю, что в любом случае вы будете использовать UDP. Если у вас пять или десять тысяч одноранговых узлов, вы не будете открывать для них все TCP/SCTP-сокеты. Вы просто будете поддерживать связь с нечетным UDP-пакетом время от времени. – 2009-03-28 21:51:02

4

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

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

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

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

С уважением

Смежные вопросы