专用网络(如在IPv4中)的问题

时间:2009-11-06 08:03:12

标签: network-programming tcp ipv4

我正在开发嵌入式TCP / IP4堆栈和HTTP / SNMP / SMTP。 它在功能上有效,但我想让它在局域网上更快地运行。 由于Nagle的算法和延迟的TCP-ACK, 即使在LAN上,HTTP应用程序似乎也很慢。

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

我要做的是:

  1. 我首先要确保通过查看自己的IP
  2. 确定自己​​是局域网成员
  3. 我会查看dst_ip并检查它是否属于与我相同的局域网
  4. 这些足以证明我和另一方属于同一局域网吗?

    然后当然,我会使用一个简单的黑客,就像发送两次相同的数据包一样 加快沟通。我已经测试了这个并且它可以工作,但它确实如此 现在是可选的。我想把它变成一个内置功能。<​​/ p>

    提前致谢...

5 个答案:

答案 0 :(得分: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私有寻址。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

检测“低延迟”连接而不是“LAN连接”可能更加健壮。

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

答案 3 :(得分:1)

你(可能)比测量IP地址更好地测量延迟。仅仅因为两个IP不在同一个子网内并不意味着它们之间存在高延迟。

仅仅因为两个IP恰好存在于相同的IP范围内并不意味着具有低延迟(考虑两个以太网网段,通过64 kbps线路上的WAN桥连接;在这个时代可能不太可能,但我当然可以使用网络,这些链接很常见。)

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

答案 4 :(得分:0)

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

我认为没问题。