跪求一个关于sctp的问题,很紧急啊

最近学校这边在做个项目用到了sctp,现在测试时发现个问题,客户端有两张网卡,在connect到服务端时
  在建连阶段的 INIT是,客户端就把自己的两张网卡地址都发给了服务端,经过一些系统初始化数据传输之后,客户端
  发送给服务端heartbeat时,服务端返回abort,之后连接断开,这个问题非常严重啊,一直想不到问题出在哪里,现在
  只能推测在INIT时上报了客户端的两张网卡。抓包出来显示服务端会定时发送给客户端那张不是直接相连的网卡地址  heartbeat,客户端当然没有heartbeat ack,但是当真正相连的地址发送给服务端heartbeat时服务端就断掉。
           请问怎么样才能让客户端在INIT时只上报直接相连的网卡的IP地址。这样可能能解决这个问题。
           查了鞋资料似乎是在创建socket后在setsockopt中有选项可以做到这一点,但资料实在是太少,不知道该怎么设置,知道的大侠帮下忙啊。

作者: zjkelehaha   发布时间: 2011-01-18



QUOTE:
最近学校这边在做个项目用到了sctp,现在测试时发现个问题,客户端有两张网卡,在connect到服务端时
  在建连阶段的 INIT是,客户端就把自己的两张网卡地址都发给了服务端,


为什么要用两张网卡啊,网络通信,一对一就可以了。你的两张网卡都启用了吗,都配置 IP 并连接到链路上了吗

作者: Godbach   发布时间: 2011-01-18

回复 Godbach


    我们这个项目客户端需要两张网卡以上的,只有一张网卡连到服务端。现在就是想让sctp在建立连接时只报上去当前连接的网卡

作者: zjkelehaha   发布时间: 2011-01-18

你想要的是 bind 吧

作者: Godbach   发布时间: 2011-01-18

回复 Godbach


    我已经绑定了。sctp建链时默认情况下会把当前启用并设有ip地址的网卡都报上去,当其中一条连接断开时就切换到另外一条。
    但我现在没必要用他这个特性,因为另外的网卡并没有与目标机子相连。因为这个特性导致程序出现断开。所以我要关闭这个特性,
    在建立连接时客户端不要上报其他的网卡地址,只要报当前直接相连的就行了。这个设置可以通过setsockopt()函数来搞定。但我不知道
    怎么设,网上的资料和示例代码实在太少了。

作者: zjkelehaha   发布时间: 2011-01-18

sctp不同于tcp/udp。
sctp支持多宿主通信。也就是说,通信双方(association)之间可以有多个传输路径(transport)。




QUOTE:
为什么要用两张网卡啊,网络通信,一对一就可以了。你的两张网卡都启用了吗,都配置 IP 并连接到链路上了 ...
Godbach 发表于 2011-01-18 16:02

作者: asweisun   发布时间: 2011-01-18



QUOTE:
sctp不同于tcp/udp。
sctp支持多宿主通信。也就是说,通信双方(association)之间可以有多个传输路径(transport)。


受教。
之前只是看过 TCP详解卷3中介绍 SCTP,实际中没有使用过。内核模块配置的时候,SCTP 还是标注为 Experimental.

作者: Godbach   发布时间: 2011-01-18

回复 asweisun


    是的,请问怎么才能让客户端连接服务端时不上报未与服务端直接相连的网卡ip呢。
    差不多就是setsockpot()这个函数应该怎么写

作者: zjkelehaha   发布时间: 2011-01-18

回复 Godbach


    是的,目前sctp在linux中的使用还是比较少的,其他地方用的比较多。所以各方面资料也比较少啊

作者: zjkelehaha   发布时间: 2011-01-18

客户端是怎么连服务器端的?
客户端本地地址是可以自己指定的。
直接去掉不能用的本地地址呢。

另外,多宿主的特性是关闭不掉的。关闭掉就不是sctp了。
sctp的选项可以参考rfc: (这个现在只是草案)
http://tools.ietf.org/html/draft-ietf-tsvwg-sctpsocket-25




QUOTE:
回复  Godbach


    我已经绑定了。sctp建链时默认情况下会把当前启用并设有ip地址的网卡都报上去,当 ...
zjkelehaha 发表于 2011-01-18 17:51

作者: asweisun   发布时间: 2011-01-18