gpt4 book ai didi

linux - 路由会影响具有绑定(bind)源地址的套接字吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:57 25 4
gpt4 key购买 nike

假设我有两个网络接口(interface):

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

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

  • eth0的所有地址
  • 1.2.3.4 仅适用于 eth1

因此,到 1.2.3.4 的数据包应该被路由到 eth1,而所有其他的都被路由到 eth0

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

它会根据路由表通过 eth1 发送,还是因为它绑定(bind)到该 IP 地址而通过 eth0 发送?我试过了,好像是在eth1上发送的。

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

最佳答案

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

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

关于linux - 路由会影响具有绑定(bind)源地址的套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42959547/

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