【问题标题】:How Windows routing works on application level?Windows 路由如何在应用程序级别工作?
【发布时间】:2012-07-11 08:55:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: windows networking


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • Seth 谢谢你.. 但它要简单得多。问题中的关键词是“Windows会浪费CPU周期”。我的意思是通过Windows(不是硬件路由器)进行路由。特别是静态路由。所以问题是 - Windows 在 TCP 连接的套接字的生命周期中做了什么 - 它是在连接套接字时“路由”(做一些 CPU 工作)还是“路由”每个数据包?
    • Windows(或任何具有 IP 堆栈的系统)是路由器。网络设备中发生的完全相同的事情也发生在端点节点中。所以是的,Windows 确实会查看每个数据包及其路由表,以确定它需要去哪里。但是这样做的 CPU 工作可以忽略不计。对于网络骨干上的路由设备,路由表可能有数百万个条目,它要大得多。但是对于一个端节点,即使是一个有几个 NIC 的节点,表也会非常小。
    • 谢谢。对于 99.99% 的应用程序来说可以忽略不计。不是我的。
    猜你喜欢
    • 2013-12-05
    • 1970-01-01
    • 2023-04-10
    • 2020-02-08
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多