Antwort

1

Wenn es für ein lokales Netzwerk ist, sicher gehen Sie dafür.

Beachten Sie jedoch, dass viele Consumer Grade-Firewalls nicht flexibel genug sind, um nicht erkannte IP-Protokolle über das offene Internet zuzulassen.

+0

OP fragte auch nach SCTP getunnelt über UDP, löst dies das Problem mit Firewalls? Was ist mit Lochung für NAT Traversal? ist es im Fall von SCTP möglich? –

+0

Tunnelling würde das Firewall-Problem lösen. Das Lochstanzen würde davon abhängen, dass der Tunnel auf einem konsistenten bekannten Port läuft. – Alnitak

+1

Siehe http://tools.ietf.org/html/draft-ietf-behave-sctpnat-05 für den aktuellen Status von SCTP über NAT und den Vorschlag, es zu beheben. SCTP hat derzeit eine unzureichende Protokollunterstützung und die tatsächlich implementierte Unterstützung ist schlechter - in dem Maße, in dem es nicht mit vielen Consumer-Geräten funktioniert. – Bwooce

0

Wie hilft es Ihnen?

Sie sind P2P, also muss jeder Peer mindestens einen Socket haben, der für jeden anderen Peer offen ist.

Wenn Sie einen Sockel geöffnet haben, können Sie alles tun, was Sie tun müssen. Wenn Sie den Ansatz eines Sockets pro Datei gewählt haben und mehrere Dateien gleichzeitig zwischen zwei angegebenen Peers übertragen werden, speichert SCTP einen Socket pro Datei. In einem normalen P2P-Netzwerk jeder Größe werden Sie jedoch fast nie mehrere Dateien haben, die gleichzeitig zwischen zwei Peers übertragen werden.

Haben Sie nur einen Sockel und haben Sie Ihr eigenes kleines Protokoll; Senden eines Pakets mit einem Header, wobei der Header den Inhaltstyp, z. ein Befehl oder Teil einer Datei - und wenn ja, welche Datei und welchen Bytebereich.

Natürlich erhalten Sie dafür einen kleinen Overhead, während Sie effizienter sind, wenn Sie einen Socket für Befehle und einen für jede Datei haben. Ist das Speichern eines Sockels pro Peer (unter der Annahme eines Downloads) die Zeit/den Aufwand/die Komplexität der Verwendung von SCTP wert?

+0

Sobald ich alles über SCTP gelernt habe, denke ich, es wäre einfacher, SCTP zu verwenden, weil es viele Probleme für mich wie Fehlertoleranz kümmert. SCTP hat (meines Wissens nach) kleinere Paket-Header, was den Aufwand für viele kleine Anfragen reduzieren würde. – andreasw

+0

Paketverlust ist so selten ein Ereignis, das es nicht gerechtfertigt, SCTP über TCP zu verwenden; Alles, was Sie gewinnen, ist ein paar Sekunden kontinuierlicher Durchsatz auf den anderen Verbindungen, wenn Sie mehrere Dateien gleichzeitig an denselben Peer übertragen. –

+0

Wie für kleinere Header - ich vermute, Sie werden UDP sowieso verwenden. Wenn Sie fünf oder zehntausend in die Warteschlange gestellte Peers haben, werden Sie keinen TCP/SCTP-Socket für alle offen halten. Sie bleiben nur gelegentlich mit dem ungeraden UDP-Paket in Verbindung. –

4

Haben Sie überlegt, ob auf allen Zielsystemen SCTP vorinstalliert ist oder ob Ihre Anwendung SCTP selbst enthalten muss? Nach meiner Erfahrung würde ich nicht erwarten, dass auf allen Systemen SCTP installiert ist, und ich würde erwarten, dass sie das nicht tun würden, wenn es Windows wäre.

Wenn Sie SCTP in die Anwendung selbst einbeziehen, wird dadurch die Anzahl der Nachrichten, die an einen Kernel übergeben werden, mehr als verdoppelt, was sich auf die Leistung im Vergleich zur Verwendung des vorinstallierten TCP auswirkt.

Haben Sie überlegt, welche Vorteile Sie von SCTP erwarten? Sie haben Fehlertoleranz erwähnt, aber damit dies mit SCTP funktioniert, muss die Anwendung mehrere Ethernet-Ports und IP-Adressen haben. Ist das wahrscheinlich in deiner App?

So sehr ich SCTP (!) Liebe, würde ich ernsthaft über TCP nachdenken, es sei denn, Sie sind sicher, dass SCTP benötigt wird oder Sie die Hosts steuern, auf denen Ihre App bereitgestellt wird.

Mit freundlichen Grüßen