Java Socket为传出连接指定某个网络接口

时间:2014-12-15 08:22:02

标签: java sockets

行。我之前也知道类似的问题,但这是不同的。

我注意到对类似问题的回答,我可以使用Socket.bind为传出连接指定某个网络接口。 This页面是对此的正式指示。

现在,我的计算机有两个网卡eth0eth1,系统路由表将eth0设置为用于连接服务器S的传出接口。

然后我尝试了以下内容:

Socket so = new Socket();
so.bind(new InetSocketAddress("ip.address.of.eth1", 0));
so.connect(new InetSocketAddress("ip.address.of.S", 80));

我使用WireShark捕获数据包,并注意到"源地址" IP标头的字段确实是ip.address.of.eth1。但是通过检查以太网头,我注意到源MAC地址实际上是eth0的MAC地址,也就是说,数据包实际上仍然是通过eth0发送的!

任何人都可以帮忙解释为什么会出现这种行为吗?这是预期的吗?非常感谢!

1 个答案:

答案 0 :(得分:4)

这是弱端系统模型的结果'。它在这里描述得过于宽泛,但在RFC 1122中进行了讨论。