我正在考虑对用 C 编写的 p2p 应用程序使用SCTP而不是 TCP。我应该这样做吗?另外,SCTP 的速度与 TCP 的速度相比如何?
编辑:我发现SCTP 可以通过 UDP 建立隧道,唯一的问题是隧道 SCTP 不能与非隧道 SCTP 互操作。
我正在考虑对用 C 编写的 p2p 应用程序使用SCTP而不是 TCP。我应该这样做吗?另外,SCTP 的速度与 TCP 的速度相比如何?
编辑:我发现SCTP 可以通过 UDP 建立隧道,唯一的问题是隧道 SCTP 不能与非隧道 SCTP 互操作。
您是否考虑过您的目标系统是否都预装了 SCTP,或者您的应用程序是否需要包含 SCTP 本身?根据我的经验,我不希望所有系统都安装 SCTP,如果是 Windows,我希望它们不会。
如果您在应用程序本身中包含 SCTP,那么与使用预安装的 TCP 相比,传递到内核外的消息数量将增加一倍以上,这将影响性能。
您是否考虑过您希望从 SCTP 获得哪些好处?您提到了容错,但要使其与 SCTP 一起使用,它需要应用程序具有多个以太网端口和 IP 地址。这可能在您的应用程序上吗?
尽管我很喜欢 SCTP(!),但我会认真考虑坚持使用 TCP,除非您确定需要 SCTP,或者除非您控制部署应用程序的主机。
问候
如果是局域网,那当然可以。
但是请注意,如果您打算在开放的互联网上使用它,许多消费级防火墙不够灵活,无法允许无法识别的 IP 协议通过它们。
它对你有什么帮助?
您是 P2P,因此每个对等点必须至少有一个对其他对等点开放的套接字。
如果你打开了一个套接字,那么你可以做你需要做的一切。如果您采用了每个文件一个套接字的方法,并且在两个给定的对等点之间同时传输了多个文件,那么 SCTP 将为每个文件节省一个套接字。但是,在任何规模的普通 P2P 网络上,您几乎永远不会在两个对等方之间同时传输多个文件。
只需一个套接字,并拥有自己的小协议;发送带有标头的数据包,标头指示内容类型,例如命令或文件的一部分-如果是,则说明哪个文件以及哪个字节范围。
当然,您会为此付出一些开销,而如果您有一个用于命令的套接字和一个用于每个文件的套接字,那么您的效率会更高。每个对等方保存一个套接字(假设一次下载一个)值得使用 SCTP 的时间/麻烦/复杂性吗?