2008-11-13 6 views
14

Wenn zwei Computer mit dem Internet verbunden sind, die vorher nichts voneinander wissen, ist es möglich, dass ein Computer eine Nachricht senden kann, damit der zweite Computer sie empfangen und antworten kann?Zwei Computer, die sich über das Internet finden

Ich kenne UDP Broadcast exsits, aber ich glaube, dass diese in der Regel durch den ISP gefiltert werden, bevor es das wahre Internet erreicht. Ist das wahr?

+0

Nicht wirklich Programmierung verwandt, ist es? –

+6

Könnte mit der Programmierung zusammenhängen - er könnte daran interessiert sein, ein solches System zu entwickeln – Jaywalker

+0

Nun, es sieht immer noch aus wie eine Netzwerk-Hausaufgabe, wenn Sie mich fragen. Er schrieb nichts über die Programmierung solcher Dinge. –

Antwort

2

Nein, Sie können nicht so über das Internet senden. Sie müssen wissen, an welche Adresse Ihre Pakete gehen sollen.

+0

Ich weiß nicht, und ich bin wirklich neugierig, können Sie die Pakete nicht an alle Computer senden? Sie können über LAN senden; in der Theorie, was würde Sie daran hindern, ein Paket an ALLE Computer in der Welt zu senden? – Tom

+1

@Tom: Hinweis: Wie viele Menschen können auf die Welt senden, ohne dass das ganze System schmilzt? –

+2

IP-Broadcasts funktionieren nur im lokalen Netzwerksegment, weil der Netzwerkstack die IP-Broadcast in eine Ethernet-Broadcast konvertiert – Alnitak

7

Sie benötigen eine dritte Zwischenstation, die beide wissen, die Nachrichten, die darauf gerichtet sind, in einer Broadcast-ähnlichen Weise zu verteilen.

+0

Das beste Beispiel hierfür ist DNS, aber es gibt andere. – Tom

+0

Ja, DHT, wie von Vinko Vrsalovic erwähnt – bortzmeyer

+0

Aber wenn sie wussten, dass sie ein gemeinsames System von Drittanbietern hatten, wäre das nicht DNS? Wären sie dann nicht in der Lage, einen Non-Broadcast-Mechanismus zu benutzen, um sich gegenseitig zu finden? – benc

12

Der derzeit beste Weg, um ein Multinode-Netzwerk ohne zentrale Koordination zu erreichen, ist die Verwendung von . Dieser Link erklärt ein wenig und verlinkt auf verschiedene Implementierungen, die Sie nutzen können.

Das heißt, Sie müssen noch jede Maschine mit mindestens einigen Kollegen zu koordinieren. Es ist nur, dass Sie es nicht benötigen, um mit einem zentralen Server zu koordinieren. Eine Lösung, die einen zentralen Server verwendet, der beide (alle) teilnehmenden Computer kennt, funktioniert ebenfalls, aber sie unterliegt weiteren Einschränkungen hinsichtlich Anonymität und Skalierbarkeit. Denken Sie nur daran, was mit Napster passiert ist.

+1

Wie qualifiziert sich das unter dem "Wissen Sie nichts über die anderen" Teil der Frage? – benc

+1

Sie müssen nichts a priori voneinander wissen. Natürlich muss jemand etwas über irgendeine andere Maschine wissen Wenn ich etwas über BitTorrent herunterlade, weiß ich nichts über irgendeinen anderen Computer, den ich vorher gefunden habe, ich entdecke gerade beim Herunterladen –

4

Eine Lösung für dieses Problem (wo keiner Ihrer Kollegen die endgültige Adresse des anderen kennt) könnte sich auf IM-Protokolle verlassen.

Insbesondere das XMPP-Protokoll ist erweiterbar, offen und wird von vielen Anbietern wie Google Talk verwendet. Bibliotheken existieren für die meisten Sprachen und es hat das Plus, dass sie arbeiten können (langsam und über einen 3rd-Party-Server), selbst wenn beide Hosts hinter einer NAT-Box sind.

Wenn die Kommunikation einen anderen Kanal verwenden muss, können Sie XMPP verwenden, um IP-Adresse auszutauschen und dann mit der Standard-Socket-Route fortzufahren (aber wenn Sie Ihre Nachrichten verschlüsseln, sollte es kein Problem sein, sogar durch einen 3rd-Party-Server zu gehen true alle Pakete gehen durch nicht vertrauenswürdige 3rd-Party-Router, so dass Sie trotzdem verschlüsseln sollten, wenn Sie sensible Daten haben ..).

Hoffe, das hilft.

1

UDP ist eine Sackgasse - es ist nur ein Protokoll, wo die Reihenfolge der Pakete empfangen wird weniger wichtig ist und es Probleme gibt, Routing über WANS. Sie haben gesagt, dass Sie zwei Computer im "Internet" verbinden wollen, vermutlich mit den Endpunkten, die sich bewegen. Der einzige Weg ist, einen zentralen Server als Register/Verzeichnis zu verwenden. Wenn jedes Endpunkt auch einen Web-Service oder etwas und registriert seine aktuelle IP-Adresse und Name regelmäßig, dann kann der andere Endpunkt die IP-Adresse des anderen mit diesem Service suchen. (könnte Ihren eigenen DNS-Server hosten und Ihren Endpunkt für die Registrierung auf diesem DNS kodieren?)

Eines der Probleme ist, dass selbst wenn Sie die IP-Adresse haben, was sind ein oder mehrere Knoten hinter einer Firewall oder NAT-Router? Sie müssen einen Server für den Proxy-Verkehr einrichten. Das beste Beispiel ist SKYPE - schauen Sie, wie es funktioniert, es ist dokumentiert, sehr interessant.

Die simplist Antwort könnte für Sie auf der Rückseite auf einem bestehenden Dienst wie Messenger, Skype, bit torrent usw.

Simon

2

Eine mögliche Lösung springen wird, ist ein dynamic DNS Service zu nutzen.

Ihre Anwendung müsste im Voraus wissen, welchen Hostnamen der andere Host verwendet, aber dieser Dienst würde zumindest die Tatsache umgehen, dass Sie nicht genau wissen, welche IP-Adresse der andere Computer hat.

Beachten Sie, dass dies das potenzielle Problem von Firewalls zwischen den beiden Hosts, die Ihre Pakete blockieren, nicht lösen kann. Der einzige praktische Weg besteht darin, dass beide Hosts eine ausgehende Verbindung zu einem zentralen Host öffnen, der dann Daten zwischen ihnen weiterleiten kann.

-2

Multicasting ist auch eine mögliche Lösung. Es ist sicherlich in einem Unternehmensnetzwerk machbar

+1

und derzeit kaum über das ganze Internet durchführbar – Alnitak

+0

@Alnitak - stimme zu, ich wünschte, es wäre so Wenn sie dies tun würde, würde es wahrscheinlich eine ganze Reihe von Multicasting-Angriffen geben. " – Jeff

+0

Außerdem müssten sie wissen, welche Multicast-Adresse zu verwenden war. Das bedeutet, dass sie" vorher nichts voneinander wissen "würden. – benc

1

Wenn die Computer Windows ausführen, würde ich mit PNRP aussehen.

2

Schauen Sie sich den Algorithmus für Akkorde oder Gebäck an. Es ist ein Overlay-Netzwerk (DHT-basiert), an dem ein Discovery-Mechanismus beteiligt ist. Es ist ein P2P (Peer 2 Peer) Routing-Algorithmus.

Verwandte Themen