aystys 发表于 2015-05-28 10:43

linux多网卡同网段,使用SCTP虚拟IP之间发包,链路切换混乱

需求:使用SCTP协议绑定多网卡间任意同网段IP组(包括虚拟IP),使其能正常通信,且接收端能得到源IP地址(包括虚拟IP).

网络环境:
主机1:
eth0:1 192.168.100.1
eth0:2 192.168.100.2            (secondary)

主机2:
eth0:1 192.168.100.4
eth0:2 192.168.100.5      (secondary)
eth0:3 192.168.100.6      (secondary)

SCTP 分别绑定主机1的1、2,主机2的2、3,主机1作为服务端只接收数据,主机2客户端一直发数据.

问题:


使用secondary虚拟IP(linux中除第一次创建的虚拟IP默外,其他的都为secondary IP)建立sctp链路时,第一个虚拟IP默认为sctp的首选路由,而第二个ip地址不会发出任何报文,把首选路由down掉,链路会维持一会,然后断掉,抓包显示断链的时候,1号IP会给6号IP发heartbeat心跳,但heartbeat ack 是5号IP 回给1的并且后面显示未发的数据都是5给1,然后1给5回SACK,那么问题来了,5为什么没断呢?怎么实现5断了,6能发报文,且服务端知道是6发来的?


不使用虚拟ip,如下图两块板(可以理解成主机)完全使用四个物理网卡进行测试:
测试结果显示
1.两端分别绑定eth0和eth2建立sctp链路,互发数据,心跳和数据都是正常的。
2.两端分别绑定eth1和eth3建立sctp链路,则两端eth3的ip发不出报文。


可以看出把物理网卡部署在同网段也存在相同问题,可以判断使用虚拟网卡方案来规避是不可行的。
这个问题是IP协议栈数据发送和路由选择机制决定的。

有点乱,请高手帮忙解决,谢谢!

ssffzz1 发表于 2015-05-28 13:06

你是要做个程序,还是要求网卡冗余?
页: [1]
查看完整版本: linux多网卡同网段,使用SCTP虚拟IP之间发包,链路切换混乱