Является ли вещание быстрее, чем случайное сканирование SYN / ACK для определенного порта? - PullRequest
1 голос
/ 02 марта 2009

В проекте, над которым я работаю, P2P используется для передачи данных между пирами, что сильно отличается от Bittorrent. Этот компонент выполняет случайное сканирование на каждом интерфейсе, чтобы увидеть, какие устройства находятся в сети. До сих пор оно было реализовано как соединение Socket, которое проверяет, удалось ли ему установить соединение, пытаясь подключиться к порту прослушивания программы. Мне интересно, будет ли быстрее разорвать это и сделать трансляцию на каждом интерфейсе. Будет ли это быстрее / надежнее?

Текущий код для подключения выглядит следующим образом:

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' - это простой

Random r = new Random();

для каждой подсети интерфейса.

Из моего опыта с вещанием (Wireshark, DHCP и т. Д.) У меня сложилось впечатление, что вещание будет загружаться быстрее и использовать кучу ресурсов меньше. Причина, по которой я спрашиваю, состоит в том, что человек, который написал это, - умный парень, и мне интересно, почему он не использовал вещание.

Так стоит ли усилий?

Ответы [ 2 ]

3 голосов
/ 19 марта 2009

Вещание может быть отфильтровано определенным оборудованием. Это будет ненадежным после одного сегмента сети - если то, что вы делаете, ограничено локальной сетью (или одним сегментом сети), то вещание действительно должно быть значительно быстрее.

При этом случайный поиск никогда не будет эффективным или оптимальным. Скорее всего, вы пропустите узлы, у вас будут проблемы с сканированием, которое займет больше времени, чем ожидалось, и т. Д. Поскольку у вас есть доступ к маске подсети, вы сможете достаточно легко вычислить список потенциально допустимых узлов в сегменте, однако, опять же, если вы ограничены одним сегментом сети (или их совокупностью), тогда широковещательная передача - путь.

Если вы ищете список действительных узлов WAN (т.е. не только один сегмент), то вы потенциально будете отправлять много нежелательного трафика. Я бы посоветовал просто иметь каждый узел, способный отправлять кеш других узлов друг другу, а затем требовать адрес одного узла в качестве пользовательского ввода для начальной загрузки в сеть.

0 голосов
/ 02 марта 2009

Я подозреваю, что вы правы, но есть подозрения, что вы должны начать исследования, а не там, где вам следует остановиться. Поскольку вы не говорите об огромных усилиях по проверке теории, почему бы вам не попробовать и не увидеть?

- MarkusQ

...