注:问题经编辑。
关于伯克利套接字编程,我有几个问题:
发布于 2015-10-07 17:56:41
创建后是否可以更改套接字地址?
在创建套接字时,套接字没有要更改的IP地址。当他们被绑起来的时候会得到一个。
如果是这样的话--C命令是怎么做的?
伯克利套接字API函数是bind()
和connect()
。
当套接字绑定到INADDR_ANY时,它从所有接口接收数据包,但通过一个带有默认IP的NIC发送。
不是的。它通过在每种情况下到达目标所必需的NIC发送数据包。
你被引用的消息来源画了一个没有区别的区别。绑定到INADDR_ANY
的套接字接收来自任何接口的数据包。就INADDR_ANY
而言,“any”和“all”之间没有区别。要理解为“任何”要容易得多。
如果我正确理解--如果服务器有两个活动的NICs,具有不同的is,那么带有INADDR_ANY参数的套接字可以接收带有dst IP=x的数据包,并发送带有src IP=y的数据包,其中x不是y。
不是的。它发送的数据包与客户端最初连接的源地址相同。这就是定义连接的部分内容。
这可能会导致问题,例如在TCP连接中,另一个目的地中的套接字将接收数据包,但会丢弃它,因为预期的最大IP并不是预期的。
不是的。数据包中的目的地是客户端的IP地址。否则它甚至都不会到达那里。这只是胡说八道。如果您指的是源IP,请参见上文。
是真的吗?
不是的。
如果是这样的话-这是否意味着服务器程序在有(两个或更多)具有不同IP的活动NIC的情况下不使用INADDR_ANY?
不是的。INADDR_ANY的意思正是它所说的。任何IP地址:任何网卡。
假设默认IP的NIC造成瓶颈。我们是否可以更改套接字选项,以便将数据包通过另一个NIC(而不是以前的NIC)发送?
不,但是你可以改变IP路由表。
如果NIC有默认的IP地址,我们可以这样做吗?
其中只有一个可以拥有默认的IP地址。这个问题没有道理。
我们能否通过一个网卡发送数据包,并将目的地设置为另一个网卡?
除非你给自己送去。否则这个问题就没有意义了。
(引用)发送时,使用INADDR_ANY绑定的套接字绑定到默认的IP地址,即最低编号的接口。
我希望这指的是所描述的任何模拟器。如果它是为了描述TCP的工作方式,那么它是错误的。
https://stackoverflow.com/questions/33005234
复制