Windows路由如何在应用程序级别工作?

Windows路由如何在应用程序级别工作?,windows,networking,Windows,Networking,假设我有Windows TCP套接字。应用程序在启动时连接此套接字一次。然后,长时间发送/接收TCP流量 Windows能够路由IP流量。假设您有多个网络适配器,并且必须为您的应用程序设置静态路由,以便流量流向特定NIC 问题是-Windows会浪费CPU周期只路由TCP套接字连接还是路由每个IP数据包? 我在数微秒,我需要准确地知道-发送/接收流量或连接时是否会有CPU开销 我假设“路由”指的是查看本地路由表以决定传出数据包应发送到何处的过程。这首先取决于使用哪个路由器,其次是使用哪个接口访问

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

Windows能够路由IP流量。假设您有多个网络适配器,并且必须为您的应用程序设置静态路由,以便流量流向特定NIC

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

我在数微秒,我需要准确地知道-发送/接收流量或连接时是否会有CPU开销

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

如果已经建立了静态路由,则系统仍必须执行“路由”才能看到该路由。这包括一个只需要几十条机器指令的表查找。与复制数据包的成本相比,这是完全可以忽略不计的

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

可以设计这样一种场景,即数据包在LAN上传输,由传输它的同一台计算机重新读取,然后通过不同的NIC再次传输到正确的路由器。通常,通过绑定到INADDR\u ANY(地址
0.0.0.0
)并让路由表为您处理优化,可以获得最佳性能


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

Seth谢谢。。但这要简单得多。问题的关键词是“Windows会浪费CPU周期吗”。。我的意思是通过Windows(而不是硬件路由器)进行路由。特别是静态路由。所以问题是关于-Windows在TCP连接套接字的生命周期中做什么-它是在连接套接字时“路由”(做一些CPU工作)还是“路由”每个数据包?Windows(或任何具有IP堆栈的系统)是一个路由器。在网络设备中发生的完全相同的事情也发生在端点节点中。是的,Windows确实会查看每个数据包及其路由表,以确定它需要去哪里。但是CPU的工作可以忽略不计。对于网络主干上的路由设备,其中路由表可能有数百万个条目,它更为重要。但是对于一个终端节点,即使是一个有几个NIC的节点,表也会非常小。谢谢。99.99%的应用可忽略不计是的。不是我的。