Windows路由如何在应用程序级别上运行?

时间:2012-07-11 08:55:58

标签: windows networking

想象一下,我有Windows TCP套接字。应用程序在启动时连接此插槽一次。然后长时间发送/接收TCP流量

Windows能够路由IP流量。想象一下,您有多个网络适配器,您必须为您的应用程序设置静态路由,以便流量进入特定的NIC。

问题是 - Windows会浪费CPU周期来仅路由TCP套接字连接还是会路由每个IP数据包?

我正在计算微秒,我需要确切地知道 - 仅在发送/接收流量或连接时会产生CPU开销吗

1 个答案:

答案 0 :(得分:2)

我假设“路由”是指查看本地路由表以确定应在何处发送传出数据包的过程。这首先取决于使用哪个路由器,以及第二个用于到达该路由器的接口。

如果您已建立静态路由,则系统仍必须出现“路由”以查看该路由。这包括一个表查找,只需几十个机器指令。与复制数据包的成本相比,它绝对可以忽略不计。

请记住,将套接字绑定到网络接口与将静态规则绑定到路由表中是不一样的,并且网络接口与网络接口控制器(NIC)不同。这在考虑开销时很重要,因为绑定或路由到特定网络接口的影响可能是数据包被多次复制,这将产生大量开销。

可以设想一种情况,其中数据包在LAN上传输,由传输它的同一台计算机重新读取,然后通过不同的NIC再次传输到正确的路由器。大多数情况下,通过绑定到INADDR_ANY(地址0.0.0.0)并让路由表为您处理优化,可以获得最佳性能。

只有在需要确保使用特定IP地址进行发送和接收时,才能绑定到特定网络接口。除非本地路由已经以某种方式中断,否则静态路由到特定NIC似乎不太可能产生有用的结果。否则,干扰正常的路由过程只会增加开销。