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



假设我有两个网络接口:

  • eth0与地址10.0.0.1
  • eth1与地址192.168.0.1

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

  • eth0的所有地址
  • 1.2.3.4eth1

所以发给1.2.3.4的数据包应该路由到eth1,其他所有东西都路由到eth0

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

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

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

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

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

最新更新