代码之家  ›  专栏  ›  技术社区  ›  Nick Devereaux

广播速度是否比特定端口的随机SYN/ACK扫描快?

  •  1
  • Nick Devereaux  · 技术社区  · 17 年前

    我正在从事的项目使用P2P在对等点之间传输数据,这与Bittorrent非常不同。该组件对每个接口进行随机扫描,以查看网络上有哪些设备。到目前为止,它已经实现为套接字连接,通过尝试连接到程序的侦听端口来检查它是否成功连接。我想知道,如果把它撕下来,在每个界面上播放,会不会更快。这会更快/更可靠吗?

    连接的当前代码如下所示:

    Socket testSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    testSock.BeginConnect(iep, new AsyncCallback(ConnectedAsync), testSock);
    for (int i = 0; i <= iterations && Thread.CurrentThread.IsAlive; i++)
    {
         if (testSock.Connected)
             break;
         Thread.Sleep(25); 
    }
    testSock.Close(0);
    

    “随机”组件是一个简单的

    Random r = new Random();
    

    根据我在广播(Wireshark、DHCP等)方面的经验,我的印象是,广播的卡车装载速度更快,使用的资源更少。我问的原因是写这篇文章的人是个聪明人,我想知道他为什么不使用广播。

    那么,这值得付出努力吗?

    2 回复  |  直到 17 年前
        1
  •  3
  •   Adam Frisby    17 年前

    广播容易被某些设备过滤掉。过了一个网段就不可靠了——如果你所做的仅限于一个局域网(或单个网段),那么广播的速度确实应该大大加快。

    也就是说,随机搜索永远不会是有效的或最优的。您可能会错过节点,出现扫描时间超出预期的问题等。由于您可以访问子网掩码,因此您应该能够非常轻松地计算网段上潜在有效节点的列表,但是,如果您被限制在单个网段(或其集合)内,那么广播就是出路。

    如果您正在搜索有效WAN节点列表(即不只是一个网段),则可能会发送大量不需要的流量。我的建议是,让每个节点都能够向彼此发送其他节点的缓存,然后需要一个节点的地址作为用户输入,以引导到网络上。

        2
  •  0
  •   MarkusQ    17 年前

    我怀疑你是对的,但怀疑是你应该开始研究,而不是停在哪里。既然你不是在说大量的努力来测试这个理论,为什么不试试看呢?

    --马库斯克

    推荐文章