在windows中为套接字使用特定的网络接口
在Windows中,除了更改路由表外,是否有可靠的方法强制新创建的套接字使用特定的网络接口?我理解,在windows中为套接字使用特定的网络接口,windows,networking,binding,sockets,bind,Windows,Networking,Binding,Sockets,Bind,在Windows中,除了更改路由表外,是否有可靠的方法强制新创建的套接字使用特定的网络接口?我理解,bind()到接口的IP地址并不能保证这一点。(第二次确认) 仅供参考这里还有一个同样的问题 据 Windows XP和Windows Server®2003 使用弱主机模型进行发送和发送 接收所有IPv4接口和 发送和发送的强主机模型 接收所有IPv6接口的数据。你 无法配置此行为。这个 中的下一代TCP/IP堆栈 Windows Vista和Windows Server 2008 支持强主机发
bind()
到接口的IP地址并不能保证这一点。(第二次确认)
仅供参考这里还有一个同样的问题
据
Windows XP和Windows Server®2003
使用弱主机模型进行发送和发送
接收所有IPv4接口和
发送和发送的强主机模型
接收所有IPv6接口的数据。你
无法配置此行为。这个
中的下一代TCP/IP堆栈
Windows Vista和Windows Server 2008
支持强主机发送和
通过接收IPv4和IPv6的
除
Teredo隧道接口,用于
Teredo主机特定中继
因此,要在Windows XP和Windows Server 2003 IP4中回答您的问题(这次正确回答),请选择“否”,但在IP6中选择“是”。对于Windows Vista和Windows 2008,是(某些情况除外)
也来自
在Windows上,对bind()的调用会影响
卡选择仅限传入流量,
不是传出的流量。因此
在多主机系统中运行的客户端
(即多个接口卡),
是网络堆栈选择了
要使用的卡,并使其
选择完全基于
目标IP,而目标IP又是基于
在路由表上。对bind()的调用
不会影响卡的选择
无论如何
这跟我有点关系
被称为“弱端系统”的东西
(“弱E/S”)模型Vista已更改为
强大的E/S模型,因此问题可能
不会在Vista下出现。但所有之前
Windows版本使用弱E/S
模型
对于弱E/S模型,它是
决定哪张卡的路由表
用于中的传出流量
多宿系统
看看这些线程是否提供了一些
见解:
“多主机上的本地套接字绑定”
Windows XP中的主机“在”时不工作
“如何将端口连接到指定的
网络卡?“在
.
此线程提到
CreateIpForwardEntry()函数,该函数
(我认为)可以用来创建一个
在路由表中输入,以便所有
具有指定IP地址的传出IP流量
服务器通过指定的
适配器
“使用2个以太网卡”在
“多宿网络上奇怪的绑定行为”
系统“在
希望有帮助 谢谢,除非我遗漏了什么,否则这两个答案都不相关,因为windows与BINDTODEVICE无关。尽管我没有证据,但我怀疑你的总结是正确的!用更好的信息更新了我的答案-对不起!请注意,弱主机模型和强主机模型不会影响从套接字发送的流量的路由方式。即,强主机模型确保离开网络适配器的流量使用该适配器分配的IP地址,但不影响主机中的网络堆栈如何选择要实际使用的传出适配器。这实际上在上面的“有线电视人”链接以及Wikipedia上都有解释:在某些协议中,如icmpv6邻居发现,可以发送未指定地址(即
:
)作为源的数据包。例如,路由器请求消息可能具有(dstff02::2
(链接本地所有路由器)和作为源的:
)。如果在windows上打开一个原始IPv6套接字并发送这样的数据包,它会在所有接口上消失吗?这种情况是否意味着除了强制src成为接口的链路本地IP之外,没有其他方法限制输出接口?因此,11年后,最好的答案仍然是“不可能”?