【发布时间】:2016-12-04 13:12:25
【问题描述】:
我有一个有很多 IP 地址的服务器,以及一个绑定到 0.0.0.0 的 UDP 套接字,因此我可以从其中任何一个接收 UDP。如何指定要在我发送的 UDP 数据包中使用的源 IP 地址?我目前的实现是使用 NIO,所以可能使用 DatagramChannel 来执行发送是问题。
【问题讨论】:
-
为什么? IP 将通过 IP 路由表确定的正确接口正确路由它们,并将该接口的 IP 地址放入传出数据报中。注意你没有。 'Java 代码绑定到 0.0.0.0',你有一个 UDP 套接字绑定到 0.0.0.0。
-
我发送数据包的系统将使用源IP作为信息,所以我需要从我的本地IP中选择一个特定的源IP。
-
这是一个不合逻辑的,因为我已经给出了原因。
-
@user207421 这个能力是绝对需要的。例如,对于负载测试 SNMP,单个 linux 服务器被赋予约 5000 个 IP 地址(10.0.0.1-10.0.19.254),并绑定在 0.0.0.0。例如,当它接收到指向 10.0.2.20 的 SNMP 请求时,它发送的响应应该源自 10.0.2.20 作为数据包中的源地址,即使服务器绑定到 0.0.0.0 - 因为,如如下所述,许多 NMS 依赖于响应(数据包)中的源地址匹配请求目标的 dest(10.0.2.20)。
标签: java networking udp nio