2009-05-05 66 views
3

有没有现有的Linux/POSIX C/C++库或示例代码来说明如何将套接字从一个物理接口重新绑定到另一个接口?将套接字重新绑定到不同的接口

例如,我在一个与物理连接A相关联的套接字上ping传输,并且我想将该套接字重新绑定到物理连接B,并使ping数据包继续在连接B上发送和接收(在短暂切换期间的延迟)。

我只需要这个用于无会话协议。

谢谢

更新:

我试图提供与PPP和以太网设备使用故障转移解决方案。

我有一个基本的脚本,可以通过使用iptables,NAT和路由表完成90%的功能。

问题是当故障转移发生时,ping继续在辅助连接上发送,但是,它们的源IP来自旧连接。

我已经和一些在商用路由器上工作的人讲过话了,他们的建议是将套接字重新绑定到辅助接口。

更新2:

我很抱歉没有指定此更早。该解决方案将在路由器上运行。我无法更改ping程序,因为它会在客户端计算机上运行。我仅以ping为例,任何不基于会话的连接都应该能够切换。我在几台商用路由器上测试了这个功能,它确实有效。不幸的是,他们的软件是专有的,但是,从各种对话和测试中,我发现它们在故障转移时重新绑定套接字。

+1

我可能在这里错过了一些东西,但你试过只关闭套接字,然后绑定到其他接口? – Duck 2009-05-06 02:51:51

+0

谢谢鸭, 我会尝试一下,看看会发生什么。 – 2009-05-06 21:06:49

回答

3

从更新后的帖子来看,问题是更改路由信息不会改变ping的源地址,只会强制将其发送到第二个接口。 This answer包含一些相关信息。

您需要更改ping程序。您可以使用每个接口的套接字方法,并以某种方式通知程序何时进行故障切换。或者你将不得不关闭套接字,然后绑定到第二个接口。

您可以通过几种方法获得所需的接口信息,包括使用SIOCGIFCONF选项调用ioctl(),并循环返回的结构以获取接口地址信息。

0

我不认为这是一个相当明确的操作。物理接口有不同的MAC地址,所以除非你有一个映射他们的路由层(NAT或类似的),否则他们将有不同的IP地址。

端口由<IP addr, Port number, protocol>三元组标识,因此如果您的IP地址发生更改,端口将发生更改。

你真的想在这里做什么?

0

我完全不知道你在做什么,但我有一个猜测......你正在尝试做某种故障转移吗?如果是这样,那么确实有办法做到这一点,但为什么不在操作系统而不是应用程序中做到这一点?

在一端可以使用CARP,另一端可以在故障切换模式下使用接口中继/绑定(术语各不相同)。

+0

我看到了CARP和绑定,但是由于CARP和Linux 2.6的空间限制,我无法使用,但是2.6内核不幸与以太网和PPP设备绑定。 – 2009-05-05 20:48:37

相关问题