我正在开发嵌入式TCP / IP4堆栈和HTTP / SNMP / SMTP。 它在功能上有效,但我想让它在局域网上更快地运行。 由于Nagle的算法和延迟的TCP-ACK, 即使在LAN上,HTTP应用程序似乎也很慢。
从http://en.wikipedia.org/wiki/IPv4#Private_networks可以看出, 有3种不同的专用网络具有不同的位块值。
我要做的是:
这些足以证明我和另一方属于同一局域网吗?
然后当然,我会使用一个简单的黑客,就像发送两次相同的数据包一样 加快沟通。我已经测试了这个并且它可以工作,但它确实如此 现在是可选的。我想把它变成一个内置功能。</ p>
提前致谢...
答案 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)
这些地址正在内部网络(企业和家庭)中使用。 它们不能在公共互联网上使用。
我认为没问题。