Network programming 专用网络(如IPv4)问题

Network programming 专用网络(如IPv4)问题,network-programming,tcp,ipv4,Network Programming,Tcp,Ipv4,我正在研究嵌入式TCP/IP4堆栈和HTTP/SNMP/SMTP之类的东西。 它在功能上可以工作,但我想让它在局域网上工作得更快。 由于Nagle算法和延迟TCP-ACK, 即使在局域网上,HTTP应用程序似乎也工作得很慢 如图所示, 有3个不同的专用网络具有不同的位块值 我要做的是: 我将首先通过查看自己的IP来确定自己是LAN成员 我将查看dst_ip并检查它是否与我属于同一个LAN 这些足以证明我和另一方属于同一局域网吗 然后,当然,我会使用一个简单的hack,比如将相同的数据包发送两次到

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

如图所示, 有3个不同的专用网络具有不同的位块值

我要做的是:

  • 我将首先通过查看自己的IP来确定自己是LAN成员
  • 我将查看dst_ip并检查它是否与我属于同一个LAN
  • 这些足以证明我和另一方属于同一局域网吗

    然后,当然,我会使用一个简单的hack,比如将相同的数据包发送两次到 加快沟通。我已经测试过了,它可以工作,但它是 现在可以选择。我想把它变成一个内置功能


    提前感谢…

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


    我想没问题。

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


    我想没问题。

    只要你确定没有人使用VPN连接,你可能就相当安全了。然而,通过VPN连接的计算机(至少在正常情况下)将有一个IP地址位于您的网络本地,即使它们的连接可能具有相当高(甚至非常高)的延迟。

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

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

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

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


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

    检测“低延迟”连接可能比检测“局域网连接”更可靠

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

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

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

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

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

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


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

    事实上,RFC 1918地址可以在公共Internet上使用,并且在公共Internet上使用。当然,它们不应该被使用,但唯一阻止它们被使用的是每个网元上的流量过滤器