【问题标题】:Private Network (as in IPv4) question专用网络(如 IPv4)问题
【发布时间】:2009-11-06 08:03:12
【问题描述】:

我正在研究嵌入式 TCP/IP4 堆栈和 HTTP/SNMP/SMTP 的东西。 它在功能上可以工作,但我想让它在 LAN 上更快地工作。 由于 Nagle 算法和延迟的 TCP-ACK, 即使在 LAN 上,HTTP 应用程序似乎也运行缓慢。

可以在http://en.wikipedia.org/wiki/IPv4#Private_networks 上看到, 有 3 个不同的专用网络,具有不同的位块值。

我要做的是:

  1. 首先我会通过查看自己的 IP 来确定我是 LAN 成员
  2. 我会查看dst_ip并检查它是否与我属于同一个局域网

这些足以证明我和对方属于同一个局域网吗?

当然,我会使用一个简单的技巧,比如将相同的数据包发送两次到 加快沟通。我已经对此进行了测试,并且可以正常工作,但是 现在可选。我想把它变成一个内置功能。

提前谢谢...

【问题讨论】:

  • 虽然建议测量延迟的答案很有希望;对于这个特定的系统,它是不可行的(非常低端的嵌入式系统几乎无法运行)。谢谢你的回答...

标签: network-programming tcp ipv4


【解决方案1】:

您需要检查您的子网掩码,以了解目标 IPv4 地址是否与您在同一网络上。只有具有相同前缀的地址才能确定共享同一个网络。

例如,如果您的 IP 地址是 10.2.3.87,子网掩码是 /26,这意味着 10.2.3.64 和 10.2.3.127 之间的地址与您在同一个子网上,因为它们都使用相同的前缀 10.2。 3.64。 /26 子网掩码为 255.255.255.192。

当然,您将在二进制中执行所有这些操作,因此您不会检查以确保地址在最小值和最大值之间,而是使用子网掩码来获取地址的前缀和目的地地址,然后检查它们是否相等。

二进制:

10.2.3.87       00001010 00000010 00000011 01010111
10.2.3.64       00001010 00000010 00000011 01000000
255.255.255.192 11111111 11111111 11111111 11000000

如您所见,AND 掩码有 26 个一位 (/26),因此在应用子网掩码时,两个 IP 地址共享相同的前缀。

其他子网有可能驻留在同一个 LAN 广播域上,但并不常见,因此在奇怪的情况下,您的性​​能技巧将不起作用。如果您使用子网掩码来识别目标 IP 地址的接近程度,那么您可能无需担心 RFC 1918 私有寻址。

【讨论】:

    【解决方案2】:

    只要您确定没有人使用 VPN 连接,您就可能相当安全。但是,通过 VPN 连接连接的计算机将(至少通常)具有您网络本地的 IP 地址,即使它们的连接可能具有相当(甚至极高)的延迟。

    【讨论】:

      【解决方案3】:

      检测“低延迟”连接可能比检测“LAN 连接”更可靠。

      也许您的应用程序/堆栈可以以某种方式测量延迟,然后切换到替代算法。

      【讨论】:

        【解决方案4】:

        与查看 IP 地址相比,测量延迟(可能)更好。仅仅因为两个 IP 不在同一个子网中并不意味着它们之间有很高的延迟。

        仅仅因为两个 IP 恰好位于同一个 IP 范围内并不意味着它们具有低延迟(考虑两个以太网段,通过 64 kbps 线路上的 WAN 网桥连接;在当今时代可能不太可能,但我肯定曾与此类链接很常见的网络合作过)。

        但是,检查两个 IP 是否在同一个子网内肯定是一个很好的近似值。

        【讨论】:

          【解决方案5】:

          这些地址在内部网络(企业和家庭)中使用。 它们不能在公共互联网中使用。

          我觉得没问题。

          【讨论】:

          • 事实上 RFC 1918 地址可以在公共互联网上使用,并且正在公共互联网上使用。当然,它们不应该是这样,但唯一阻止它们被使用的是每个使用它们的网络上的流量过滤器。似乎很多网络都没有过滤流量并且泄漏到互联网上。有关泄漏这种所谓的火星流量的一些网络的示例,请参阅此 URL:ris.ripe.net/historic-reports/martians/2009/01/20090101.html
          • @Michael Dillon:这是我第一次听到这个“火星交通”。我认为这是由低质量的adsl调制解调器引起的。没有大的网络管理员会犯这样的错误,对吧?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-08-01
          • 2016-06-13
          • 1970-01-01
          • 1970-01-01
          • 2019-04-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多