有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Javasocket为传出连接指定特定的网络接口

好的。我知道以前也有人问过类似的问题,但这是不同的

我从对类似问题的回答中注意到,我可以使用Socket.bind为传出连接指定特定的网络接口This页是这方面的官方指示

现在,我的机器有两个NIC 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) 个答案

  1. # 1 楼答案

    这是“弱端系统模型”的结果。它太宽泛了,无法在这里描述,但在RFC 1122中讨论了它