Sockets 如何让不同的进程使用不同的网络接口?
我是客户。有多个网络接口。如何让不同的进程使用不同的网络接口进行通信?因为我想连接到同一台服务器,所以这里的路由似乎不起作用。另外,Sockets 如何让不同的进程使用不同的网络接口?,sockets,networking,network-programming,Sockets,Networking,Network Programming,我是客户。有多个网络接口。如何让不同的进程使用不同的网络接口进行通信?因为我想连接到同一台服务器,所以这里的路由似乎不起作用。另外,connect()没有像bind()那样指定本地地址或接口的参数。如果您的目标是通过并行使用多个网络接口来增加服务器的带宽,那么这可能不是您在应用程序级别可以(或应该)做的事情。相反,您应该研究一下,然后配置您的计算机和网络堆栈来使用它。一旦工作正常,您将自动获得所需的并行化加速,而无需客户机应用程序执行任何特殊操作来启用它 “bind()系统调用经常被误解。它用于
connect()
没有像bind()
那样指定本地地址或接口的参数。如果您的目标是通过并行使用多个网络接口来增加服务器的带宽,那么这可能不是您在应用程序级别可以(或应该)做的事情。相反,您应该研究一下,然后配置您的计算机和网络堆栈来使用它。一旦工作正常,您将自动获得所需的并行化加速,而无需客户机应用程序执行任何特殊操作来启用它
“bind()系统调用经常被误解。它用于
绑定到一个特定的IP地址。只绑定到该IP地址的数据包
地址将被接收,任何传输的数据包都将携带该地址
作为源的IP地址。bind()不控制有关
传输数据包的路由。例如,如果您绑定到IP
eth0的地址,但您将数据包发送到
内核的最佳路由是eth1,它将愉快地发送数据包
源IP地址为eth0的eth1。这对于
TCP/IP,其中数据包可以在到达目的地的途中穿越不相关的网络
目的地。”
更多信息,例如
这就是您可能误解bind()调用的原因
绑定到物理拓扑(到某些特定接口)的适当方法是使用
SO\u BINDTODEVICE
socket选项。这是通过调用setsockopt()
完成的 源策略路由
可能会有所帮助
请尝试以下步骤:
- 使用
为来自不同进程的数据包提供不同的标记iptables
- 使用
将具有不同标记的数据包路由到不同的表iproute2
- 在不同的表中,将默认路由设置为不同的上行链路
您还可以让进程与具有不同端口的服务器进行通信,并按端口标记通信量。为什么您认为需要它们对同一服务器使用不同的接口?是什么让你认为“路由在这里不起作用”?既然bind()已经指定了本地地址,为什么connect()应该允许您指定本地地址?问题是什么?我想通过多个网络接口与同一台服务器通信,以利用客户端上的所有带宽。