gpt4 book ai didi

Java Socket 为传出连接指定特定的网络接口(interface)

转载 作者:搜寻专家 更新时间:2023-11-01 02:43:45 25 4
gpt4 key购买 nike

好的。我知道之前有人问过类似的问题,但这次不同。

我从对类似问题的回复中注意到,我可以使用 Socket.bind 为传出连接指定特定的网络接口(interface)。 This页面是官方说明。

现在,我的机器有两个网卡eth0eth1,系统路由表设置eth0为出接口(interface),连接到一个服务器 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头的“Source Address”字段确实是ip.address.of.eth1。但是通过查看以太网头,我发现源MAC地址实际上是eth0的MAC地址,也就是说,数据包实际上仍然是通过eth0发出的!

任何人都可以帮助解释为什么它有这种行为吗?是预期的吗?非常感谢!

最佳答案

这是“弱端系统模型”的结果。此处描述范围太广,但在 RFC 1122 中进行了讨论。 .

关于Java Socket 为传出连接指定特定的网络接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27479901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com