我们说我有两个网络接口:
eth0
的10.0.0.1
地址为eth1
192.168.0.1
使用route
或ip 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代码中使用接口名称。
答案 0 :(得分:0)
对于套接字,如果您希望内核及其路由表使用任何可用端口为您选择最佳接口,则在发送数据报套接字之前不必调用bind()
。
如果您确实绑定了套接字,它将被绑定到具有该特定IP地址的网络设备。但是,如果数据包无法从该网络设备到达目标地址,那是否有意义?