我正在开发一个嵌入式TCP/IP4栈和HTTP/SNMP/SMTP。它在功能上可以工作,但我想让它在局域网上工作得更快。由于Nagle的算法和延迟的TCP,HTTP应用程序在局域网上的工作速度似乎很慢。
从http://en.wikipedia.org/wiki/IPv4#Private_networks上可以看出,有3种不同的私有网络具有不同的比特块值.
我要做的是:
相同的局域网
这些是否足以证明我和对方属于同一个局域网?
然后,当然,我将使用一个简单的黑客,如发送相同的数据包两次,以加快沟通。我已经测试过它了,但它现在是可选的。我想把它变成内置功能。
提前谢谢..。
发布于 2009-11-06 09:56:23
您需要检查您的子网掩码,以确定目标IPv4地址是否与您所在的网络相同。只有具有相同前缀的地址才能肯定地共享同一个网络。
例如,如果IP地址为10.2.3.87,子网掩码为/26,这意味着10.2.3.64和10.2.3.127之间的地址与您所在的子网相同,因为它们都将使用相同的前缀10.2.3.64。/26子网掩码为255.255.255.192。
当然,您将以二进制方式完成所有这些操作,这样您就不会检查地址是否介于min和最大值之间,而是使用子网掩码来获取地址和目标地址的前缀,然后检查它们是否相等。
二进制数:
10.2.3.87 00001010 00000010 00000011 01010111
10.2.3.64 00001010 00000010 00000011 01000000
255.255.255.192 11111111 11111111 11111111 11000000如您所见,和掩码有26位(/26),因此当应用子网掩码时,两个IP地址共享相同的前缀。
其他子网驻留在同一个LAN广播域是可能的,但并不常见,因此在奇怪的情况下,您的性能技巧将无法工作。如果您使用子网掩码来识别目标IP地址的接近性,那么您可能不需要担心RFC 1918私有地址。
发布于 2009-11-06 08:17:14
只要您确信没有人使用VPN连接,您可能是相当安全的。然而,通过VPN连接连接的计算机将(至少通常)具有一个本地的IP地址,即使它们的连接可能具有相当(甚至极)高的延迟。
发布于 2009-11-06 10:04:23
检测“低延迟”连接可能比检测"LAN连接“更健壮。
也许您的应用程序/堆栈可以以某种方式度量延迟,然后切换到替代算法。
https://stackoverflow.com/questions/1686101
复制相似问题