繁体   English   中英

套接字编程 - 更改套接字IP

[英]Socket Programming- Change Socket IP

注意:问题已被编辑。

关于伯克利套接字编程我几乎没有问题:

  1. 绑定后是否可以更改套接字地址? 如果是这样 - 有什么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?

  2. 假设默认IP的NIC导致瓶颈。 我们可以更改套接字选项,以便数据包将通过另一个NIC(而不是之前的NIC)发送吗? 如果NIC具有默认IP地址,我们可以这样做吗?

  3. 我们可以通过一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM