路由是否影响具有绑定源地址的套接字?

时间:2017-03-22 16:40:36

标签: linux networking router ip routing

我们说我有两个网络接口:

    地址为eth0
  • 10.0.0.1 地址为eth1
  • 192.168.0.1

使用routeip route add我已将其设置为路由:

  • eth0
  • 的所有地址
  • 1.2.3.4仅限eth1

因此,1.2.3.4的数据包应路由至eth1,其他所有内容均应路由至eth0

然后我创建一个UDP套接字并使用bind()将其本地地址设置为192.168.0.1。然后我发送一个数据包到1.2.3.4

是否会根据路由表或eth1通过eth0发送,因为它绑定到该IP地址?我试过了,似乎是在eth1发送的。

有没有办法可以强制套接字使用eth0,它有一条到目的地的有效路由,但不是最具体的规则?我知道SO_BINDTODEVICE,但更喜欢避免在C代码中使用接口名称。

1 个答案:

答案 0 :(得分:0)

对于套接字,如果您希望内核及其路由表使用任何可用端口为您选择最佳接口,则在发送数据报套接字之前不必调用bind()

如果您确实绑定了套接字,它将被绑定到具有该特定IP地址的网络设备。但是,如果数据包无法从该网络设备到达目标地址,那是否有意义?