0

我正在研究嵌入式 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 并检查它是否与我属于同一个 LAN

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

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

提前致谢...

4

5 回答 5

2

您需要检查您的子网掩码以了解目标 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 私有寻址。

于 2009-11-06T09:56:23.020 回答
1

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

于 2009-11-06T08:17:14.337 回答
1

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

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

于 2009-11-06T10:04:23.963 回答
1

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

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

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

于 2009-11-06T10:16:29.090 回答
0

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

我想会没事的。

于 2009-11-06T08:09:45.020 回答