Bor*_*rka 4 sockets windows routing tcp
我写了一个在具有两个网络接口的系统(Win7)上运行的工具,每个网络接口链接到一个不同的子网,每个接口都有自己的网关,然后将其链接到两个单独的远程网络(每个网关后都有出站防火墙)。我正在通过使用Socket.Bind
(在之前Connect
)到每个相关NIC的IP地址来通过两个NIC启动传出TCP连接。第一个NIC工作正常,但是对于第二个NIC,我得到SocketException
:“尝试对不可达的网络进行套接字操作”。
我最初的理解是,由于套接字绑定到具体的NIC本地端点(已定义网关),因此应该将连接路由到此网关,因此应该可以正常工作。但是,似乎源IP地址已被忽略,并且路由正在根据本地路由表运行(即,第二个NIC的连接请求转到第一个,默认,网络,并且由于子网错误而被拒绝)。
调整本地路由表会有所帮助,但这使我想知道套接字绑定到特定本地IP的能力背后的全部原因。
做一些额外的阅读后,我发现确实存在诸如“源IP路由”之类的东西,但是DisableIPSourceRouting
由于安全原因,Windows默认情况下(通过注册表设置)将其禁用,例如:
问题:
Socket.Bind
应该足够)–为什么不修改路由表就无法正常工作?Socket.Bind
忽略并使用路由)–拥有Socket.Bind有什么意义?为什么要这么做?非常感谢。
好了,经过阅读后,这里有一些高级解释。我仍然需要在系统中验证以下结论。显然,选择网络接口时通常会忽略本地绑定。而是,为此使用路由表。然而,在强主机模式(默认为Vista和XP中较新的,不存在的),源IP 被用作路由表中查找一个“约束”。
关于强主机模型与弱主机模型的简要说明:http : //technet.microsoft.com/zh-cn/magazine/2007.09.cableguy.aspx
关于XP与更新的Windows版本在上述方面的不同之处的说明:http : //blogs.technet.com/b/networking/archive/2009/04/24/source-ip-address-selection-on-a-多宿主Windows Computer.aspx
归档时间: |
|
查看次数: |
2948 次 |
最近记录: |