Как вам помочь?
Вы P2P, поэтому каждый сверстник должен иметь по крайней мере одно гнездо, открытое для каждого другого партнера.
Если у вас открыт сокет, вы можете делать все, что вам нужно для этого. Если вы использовали подход к одному сокету на один файл, и у вас есть несколько файлов, транслируемых одновременно между двумя данными, то SCTP сохранит вам один сокет на файл. Однако в обычной сети P2P любого размера вы будете почти никогда имеют несколько файлов, передаваемых одновременно между двумя одноранговыми узлами.
Просто один разъем и у вас есть собственный протокол; отправьте пакет с заголовком, заголовок указывает тип содержимого, например. команду или часть файла - и если да, то какой файл и какой диапазон байтов.
Конечно, для этого вы получите немного накладных расходов, тогда как если у вас есть один сокет для команд и один для каждого файла, вы более эффективны. Является ли сохранение одного сокета на одноранговое соединение (при условии, что одна загрузка за раз) стоит время/сложность использования SCTP?
ОП запросил также о SCTP-туннелировании через UDP, разрешает ли это проблему с брандмауэрами? как насчет пробивки отверстий для обхода NAT? возможно ли это в случае SCTP? –
Туннелирование решит проблему межсетевого экрана. Отверстие отверстий будет зависеть от туннеля, работающего на согласованном хорошо известном порту. – Alnitak
См. Http://tools.ietf.org/html/draft-ietf-behave-sctpnat-05 для текущего состояния SCTP через NAT и предложение исправить его. На данный момент SCTP имеет плохую поддержку протокола, а фактическая реализованная поддержка хуже - в той мере, в которой она не работает со многими устройствами потребительского класса. – Bwooce