[英]Socket Programming- Change Socket IP
注意:问题已被编辑。
关于伯克利套接字编程我几乎没有问题:
绑定后是否可以更改套接字地址? 如果是这样 - 有什么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不是y。 这可能会导致问题,例如在TCP连接中,其他目标中的套接字将接收数据包,但由于目标IP不是预期的IP而将丢弃它。
这是真的吗? 如果是这样 - 这是否意味着服务器程序不使用INADDR_ANY,其中有两个或多个具有不同IP的活动NIC?
假设默认IP的NIC导致瓶颈。 我们可以更改套接字选项,以便数据包将通过另一个NIC(而不是之前的NIC)发送吗? 如果NIC具有默认IP地址,我们可以这样做吗?
我们可以通过一个NIC发送数据包,并将IP目标设置为另一个NIC吗? (即,NIC1只发送数据包,NIC2只接收数据包)
是否可以在创建后更改套接字地址?
套接字在创建时没有要更改的IP地址。 他们在绑定时获得一个。
如果是这样 - 有什么C命令呢?
Berkeley套接字API函数是bind()
和connect()
。
当套接字绑定到INADDR_ANY时,它会从所有接口接收数据包,但通过具有默认IP的单个NIC发送。
不会。它会通过每种情况下到达目标所需的任何NIC发送数据包。
你引用的资料来源有所区别。 绑定到INADDR_ANY
的套接字从任何接口接收数据包。 就INADDR_ANY
而言,'any'和'all'之间没有区别。 它更容易被理解为“任何”。
如果我理解正确 - 如果服务器有两个具有不同IP的活动NIC,则具有INADDR_ANY参数的套接字可以接收dst IP = x的数据包并发送一个src IP = y的数据包,其中x不是y
不会。它会使用客户端最初连接的源地址发送数据包。 这是定义连接的一部分。
这可能会导致问题,例如在TCP连接中,其他目标中的套接字将接收数据包,但由于目标IP不是预期的IP而将丢弃它。
否。数据包中的目的地是客户端的IP地址。 否则它甚至不会到达那里。 这只是胡说八道。 如果您的意思是源IP,请参阅上文。
这是真的吗?
没有。
如果是这样 - 这是否意味着服务器程序不使用INADDR_ANY,其中有两个或多个具有不同IP的活动NIC?
不,INADDR_ANY正是它所说的。 任何 IP地址:任何NIC。
假设默认IP的NIC导致瓶颈。 我们可以更改套接字选项,以便数据包将通过另一个NIC(而不是之前的NIC)发送吗?
不,但您可以更改IP路由表。
如果NIC具有默认IP地址,我们可以这样做吗?
其中只有一个可以拥有默认IP地址。 这个问题没有意义。
我们可以通过一个NIC发送数据包,并将目标设置为另一个NIC吗?
只有你发送给自己。 否则这个问题没有意义。
(来自你的引文)发送时,与INADDR_ANY绑定的套接字绑定到默认IP地址,这是编号最小的接口的IP地址
我希望这指的是正在描述的模拟器。 如果它是对TCP如何工作的描述则是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.