调用bind时,多宿主客户端主机中的源IP

时间:2016-01-11 03:28:47

标签: linux interface ip

如果在多宿主客户端主机上调用bind,那么tcp套接字中的源IP地址是什么?客户端有两个接口eth0(IP0)eth1(IP1),客户端tcp套接字绑定到IP0。在客户端socket, bind, connect之后,它会向服务器发送数据包。目标IP为servIP。但servIPIP0不在同一子网中(可能是servIPIP1)。哪个是发送到服务器的数据包中的源IP? getsockname将返回什么?

1 个答案:

答案 0 :(得分:1)

这里有两个不同的问题:

1)要绑定哪个IP?

调用bind()时,您可以选择指定和绑定地址,也可以将此决定留给计算机上的TCP / IP堆栈。您可以在'addr'参数中传递特定地址或将其保留为INADDR_ANY。您可以在ip(7)的手册页中找到有关如何执行此操作的详细信息。如果调用bind()提供有效的IP地址并调用bind()成功,则使用绑定套接字发送的数据报将其源地址设置为调用bind()时提供的值。

2)如何路由数据包?

数据包的路由方式仅取决于目标地址,而不取决于源地址。可能是你的源地址是eth0的源地址,它将通过eht1发出。这是因为您的操作系统中的路由系统使用的是基于目标的路由,而不是基于源的路由。通过在操作系统的控制台中发出“route”命令并将输出与目标地址进行比较,您始终可以看到将使用哪个适配器

相关问题