注意:问题已被修改。
关于伯克利插座编程我几乎没有问题:
绑定后是否可以更改套接字地址?如果是这样 - 有什么C命令呢?
2.根据https://www.cs.cmu.edu/~srini/15-441/F01.full/www/assignments/P2/htmlsim_split/node18.html,当套接字绑定到INADDR_ANY时,它接收来自所有接口的数据包,但是当发送数据包时(使用发送命令),它通过具有默认IP的单个NIC发送
如果我理解正确 - 如果服务器有两个具有不同IP的活动NIC,则具有INADDR_ANY参数的套接字可以接收dst IP = x的数据包并发送一个src IP = y的数据包,其中x不是年。这可能会导致问题,例如在TCP连接中,其他目标中的套接字将接收数据包,但由于目标IP不是预期的IP而将丢弃它。
这是真的吗?如果是这样 - 这是否意味着服务器程序不使用INADDR_ANY,其中有两个或多个具有不同IP的活动NIC?
假设默认IP的NIC导致瓶颈。我们可以更改套接字选项,以便数据包将通过另一个NIC(而不是之前的NIC)发送吗?如果NIC具有默认IP地址,我们可以这样做吗?
我们可以通过一个网卡发送数据包,并将IP目的地设置为另一个网卡吗? (即,NIC1仅发送数据包,NIC2仅接收数据包)
答案 0 :(得分:3)
是否可以在创建后更改套接字地址?
套接字在创建时没有要更改的IP地址。他们在绑定时得到一个。
如果是这样的话 - 有什么C命令可以这样做?
Berkeley套接字API函数这样做是bind()
和connect()
。
当套接字绑定到INADDR_ANY时,它会从所有接口接收数据包,但通过具有默认IP的单个NIC发送。
没有。它通过在每种情况下到达目标所需的任何NIC发送数据包。
Your cited source区别对待。绑定到INADDR_ANY
的套接字从任何接口接收数据包。任何'之间没有区别。和所有'就INADDR_ANY
而言。任何'都容易理解。
如果我理解正确 - 如果服务器有两个具有不同IP的活动NIC,则具有INADDR_ANY参数的套接字可以接收dst IP = x的数据包并发送一个src IP = y的数据包,其中x不是ÿ
没有。它使用客户端最初连接的相同源地址发送数据包。这是定义连接的部分原因。
这可能会导致问题,例如在TCP连接中,其他目标中的套接字将接收数据包,但会因为目标IP不是预期的IP而丢弃它。
没有。数据包中的目的地是客户端的IP地址。否则它甚至不会到达那里。这只是胡说八道。如果您的意思是源IP,请参阅上文。
是真的吗?
没有
如果是这样的话,是否意味着服务器程序不使用INADDR_ANY,其中有两个或多个具有不同IP的活动NIC?
没有。 INADDR_ANY正是它所说的。 任何 IP地址:任何NIC。
假设默认IP的NIC导致瓶颈。我们可以更改套接字选项,以便通过另一个NIC(而不是以前的NIC)发送数据包吗?
不,但您可以更改IP路由表。
如果NIC具有默认IP地址,我们可以这样做吗?
其中只有一个可以拥有默认IP地址。这个问题没有意义。
我们可以通过一个网卡发送数据包,并将目的地设置为另一个网卡吗?
只有你自己发送给自己。否则这个问题没有意义。
(来自您的引文)发送时,与INADDR_ANY绑定的套接字绑定到默认IP地址,即接口编号最小的IP地址
我希望这指的是正在描述的模拟器。如果它是对TCP如何工作的描述,那就错了。