繁体   English   中英

是否可以在SCTP中设置OWN主地址?

[英]Is it possible to set the OWN primary address in SCTP?

我正在尝试在服务器和客户端(Linux)之间设置SCTP连接。 服务器有多个IP地址,并且根据地址路由传出的IP数据包。 我希望sctp连接默认使用特定地址(以便默认使用特定路由)

我发现的唯一选择是:

   SCTP_SET_PEER_PRIMARY_ADDR
          Requests that the peer mark the enclosed address as the association primary. The enclosed address must be one of the association's locally bound addresses. The struc‐
          ture sctp_setpeerprim defined in /usr/include/netinet/sctp.h is used to make a set peer primary request.

   SCTP_PRIMARY_ADDR
          Requests that the local SCTP stack use the enclosed peer address as the association primary. The enclosed address must be one of the association peer's addresses. The
          structure sctp_prim defined in /usr/include/netinet/sctp.h is used to make a get/set primary request.

据我了解,此选项允许选择对等方的主地址(发送时),并要求对等方使用本地地址之一(接收时)。

问题是:有没有办法选择发送外发消息的本地地址?

免责声明:我没有使用lksctp的多路径或ASCONF的东西,但是我已经阅读了内核模块的源代码。

为每个对等地址构建一个单独的sctp_transport,因此情况将取决于您的本地地址是多路径到一个还是两个远程地址。

关联会保存接收到的数据包的目标地址,以便在通过特定的sctp_transport发送时用作首选源。 设置SCTP_SET_PEER_PRIMARY_ADDR将使对等方可以帮助您将正确的本地地址保留为特定传输的主要地址,如果只有一个传输,则可能已完成。 如果传输不止一种,可能会使对等方选择一种特定的传输。 设置SCTP_PRIMARY_ADDR是相反的情况,如果有多个传输,则肯定会更新哪个传输为主。

对于多个传输,除非上层同意,否则不应离开“主要”传输。 但是,哪种传输是“活动的”取决于错误等,并且对于重传,该规范明确鼓励使用备用传输地址。 总的来说,我想尝试一直控制哪个传输处于活动状态(相对于主传输)是没有希望的。 在对等方启动之前发送INIT这类简单的事情将使其来回切换。

不要忽略以下事实:如果将绑定/ bindx绑定到特定地址(vs 0.0.0.0),则在您绝对不想使用的地址的情况下,它将仅使用那些地址。

祝你好运。

sctp_sendmessage具有选项。 http://linux.die.net/man/3/sctp_sendmsg [SCTP_SendMessage] [1]

选择界面,对您有帮助吗?

您可以使用setsockopt来做到这一点:

struct ifreq ifr;
strncpy_IFNAMSIZ(ifr.ifr_name, "ethX");
setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM