【问题标题】:Is it possible to set the OWN primary address in SCTP?是否可以在 SCTP 中设置 OWN 主地址?
【发布时间】:2012-03-01 01:27:07
【问题描述】:

我正在尝试在服务器和客户端 (Linux) 之间设置 SCTP 连接。服务器有多个 ip 地址,并且传出的 ip 数据包根据 source 地址进行路由。我希望 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.

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

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

【问题讨论】:

    标签: c linux sctp


    【解决方案1】:

    选择界面对你有帮助吗?

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

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

    【讨论】:

    • 我可以尝试这样做,但不会禁用其他接口(顺便说一句,我每个接口都有 1 个地址)。我想要实现的是将 SCTP 套接字绑定到所有地址/接口,但选择一个特别用于发送消息
    【解决方案2】:

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

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

    该关联保存接收数据包的目标地址,以便在通过特定 sctp_transport 发送时作为首选源重用。设置 SCTP_SET_PEER_PRIMARY_ADDR 将使对等点帮助您将正确的本地地址作为特定传输的主要地址,如果只有一个传输,也许您已经完成了。如果有多个传输,它可能会使对等点选择一个特定的传输。设置 SCTP_PRIMARY_ADDR 是翻转的情况,如果有多个传输,它肯定会更新哪个传输是主要的。

    对于多个传输,除非上层要求,否则不应从“主要”传输切换。但是,哪个传输是“活动的”取决于错误等,对于重传,规范明确鼓励使用备用传输地址。总的来说,我会说尝试始终控制哪个传输处于活动状态(与主要传输相比)是非常没有希望的。简单的事情,比如在对等点启动之前发送 INIT 会来回切换它。

    不要忽视这样一个事实,即如果您绑定/绑定到特定地址(与 0.0.0.0 相比),它只会使用那些您绝对不想使用的地址。

    祝你好运。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-07-18
        • 1970-01-01
        • 2018-07-19
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多