2009-03-02 3 views
1

Das Projekt, an dem ich gerade arbeite, verwendet P2P, um Daten im Gegensatz zu Bittorrent zwischen Peers zu übertragen. Diese Komponente führt auf jeder Schnittstelle einen zufälligen Scan durch, um zu sehen, welche Geräte sich im Netzwerk befinden. Bisher wurde es als Socket-Verbindung implementiert, die überprüft, ob es gelungen ist, eine Verbindung herzustellen, indem sie versucht, sich mit dem Abhörport des Programms zu verbinden. Ich frage mich, ob es schneller wäre, das heraus zu rippen und eine Übertragung auf jeder Schnittstelle zu machen. Wäre das schneller/zuverlässiger?Wird schneller als ein zufälliger SYN/ACK-Scan für einen bestimmten Port gesendet?

Der aktuelle Code für die Verbindung ist wie folgt:

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); 

Die 'random' Komponente ein einfaches

ist
Random r = new Random(); 

für jedes Subnetz der Schnittstelle.

Aus meiner Erfahrung mit Broadcasting (Wireshark, DHCP etc) habe ich den Eindruck, dass Sendungen schneller werden und weniger Ressourcen verbrauchen. Der Grund, warum ich frage, ist, dass die Person, die es geschrieben hat, ein kluger Typ ist, und ich frage mich, warum er nicht Rundfunk benutzt.

Also ist es die Mühe wert?

Antwort

3

Der Rundfunk kann von bestimmten Geräten herausgefiltert werden. Es wird unzuverlässig nach einem Netzwerksegment sein - wenn das, was Sie tun, auf ein LAN (oder ein einzelnes Netzwerksegment) beschränkt ist, dann sollte das Senden tatsächlich deutlich schneller sein.

Das gesagt, zufällige Suche wird nie effizient oder optimal sein. Vermutlich werden Sie Knoten vermissen, Probleme mit dem Scan haben länger als erwartet, usw. Da Sie Zugriff auf die Subnetzmaske haben, sollten Sie in der Lage sein, eine Liste potentiell gültiger Knoten auf dem Segment leicht genug zu berechnen, jedoch wiederum - wenn Sie sind in einem einzigen Netzwerksegment (oder Sammlung von ihnen) beschränkt, dann Broadcasting ist der Weg zu gehen.

Wenn Sie nach einer Liste gültiger WAN-Knoten (dh nicht nur ein Segment) suchen, werden Sie möglicherweise viel unerwünschten Datenverkehr senden. Mein Ratschlag wäre einfach, dass jeder Knoten in der Lage ist, einen Cache von anderen Knoten zu senden, und dann die Adresse eines einzelnen Knotens als Benutzereingabe benötigt, um in das Netzwerk zu booten.

0

Ich vermute, Sie haben Recht, aber der Verdacht ist, wo Sie Forschung beginnen sollten, nicht wo Sie aufhören sollten. Da du nicht viel Mühe hast, die Theorie zu testen, warum versuchst du es nicht und siehst es?

- MarkusQ

+0

Danke ich werde. Mein Zögern war darauf zurückzuführen, dass die Person, die die Bewerbung schrieb, ein ziemlich guter Programmierer war, aber das schien ein Mangel an Wissen über das Networking zu sein. Ich war mir nicht sicher, ob ich etwas übersehen hatte. Ich muss etwas recherchieren. Vielen Dank :) –