0

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

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

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

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

4

1 回答 1

2

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

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

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

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

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

于 2012-07-11T16:37:24.603 回答