Java Gekapselten Paket erstellen?

roker002

Commander
Registriert
Dez. 2007
Beiträge
2.107
hmm ich kenne mich nicht in der Netzwerkkommunikation nicht so gut aus. Deswegen suche ich tutorials wo ich nachlesen kann, wie man gekapselte Nachrichten erstellen kann. Kommunikation über einen Server zu einen anderen Rechner.

Wieso die Kapselung der Nachrichten? Da es nur ein stinknormaler server ist, der mir keine bearbeitung von Nachrichten zuläst, muss ich die Nachrichten kapseln.

Code:
                   ---------------------
                   |  ip  |  payload  |
                   ---------------------
                        |
----------------------------------
|server_ip |        payload    |
----------------------------------
das problem ist... ich weiss auch nicht, in wie fern diese technik auch arbeitet. Was passiert mit dem payload des Pakets den ich an den server geschickt habe. wird der payload automatisch ausgewertet und wenn es eine IP enthält auch an diese Adresse versendet?

hab rumgegooglet... aber leider nicht vieles erfahren. Gibts den bestimmte stichwörter dazu?

danke
 
Naja im IP-Header steht mehr drinnen als nur eine Adresse, an die ein Paket geliefert werden soll. Aber wenn du in einem IP-Paket ein anderes verpackst, wir das nicht automatisch weitergesendet, nur weil der dann eigentliche Payload eine weitere Adresse enthält, das müsste dann der Server übernehmen an den du das verschachtelte Paket geschickt hast.
 
also muss ich einen serverprogramm schreiben dass die pakete auswertet und diese dann entsprechend verarbeitet. dann ist es aber nichts anderes als ein P2P tracker, oder? Hmm
 
Wenn du mit "P2P tracker" einen Bittorrent tracker meinst, so sehe ich technisch nicht wirklich den Zusammenhang. Kannst du mal genauer beschreiben was das werden soll? Kannst du das was du willst nicht eigtl. mit einem SSH-Tunnel oder VPN machen?
 
Will die Kommunikation durch die Firewall/NAT hindurch erstellen. Es geht aber nur dann wenn man einen "Loch" in der NAT macht indem man eine Verbindung erst nach aussen herstellt damit jemand von aussen an mich die daten schicken kann.

Für SSH und VPN braucht man normalerweise Portfreigabe. Diese Methoden funktionieren in meinen Fall nicht.
 
Was meinst du mit Kapselung von Nachrichten?

du solltest wie folgt vorgehen:
1. Auswahl der Netzwerkarchitektur: Client/Server, P2P
Client/Server bedeutet das du eine Server Applikation hast und mehrere Client-Applikationen welche auf die Server Applikation zugreifen. Die Verbindung geht vom Client aus, der Server "hört" nur auf eingehende Verbindungen stellt allerdings im Normalfall keine Verbindung zum Client her.
P2P bedeutet das du einen "Vermittler" (Tracker) hast welcher zwischen den einzelnen Peers (Clients) vermittelt, d.h. z.B. im Falle von Torrent welche Peers noch verfügbar sind. Peers stellen untereinander eine Verbindung her d.h. eigentlich sind Peers Server und Client in einem.
In deinem Falle wäre Client/Server die richtige Wahl.

2. Auswahl des Netzwerkprotokolls: TCP/IP, UDP
TCP/IP ist ein sagen wir mal verbindungsorientiertes Protokoll, d.h. du weisst zu jeder Zeit ob eine Verbindung vorhanden ist oder auch nicht bzw. eine Verbindung ist zwingend erforderlich, zudem kannst du dir "sicher" sein das gesendete Packete ankommen.
UDP ist ein verbindungsloses Protokoll, d.h. es ist keine Verbindung erforderlich, allerdings kann man nie sicher sein ob Packete wirklich angekommen sind.
In deinem Falle wäre TCP/IP die richtige Wahl

3. Definition des Schnittstellenprotokolls (dies ist Möglicherweise die Kapselung von der du sprichst):
Je nachdem was du für Daten senden willst bzw. was du letztendlich machen willst musst du dir ein Protokoll überlegen.

Zu Firewall/NAT gibts eigentlich nur 1 zu sagen: Der Server "hört" (listen) auf einem festgelegten Port, damit sich Clients zu diesem Port verbinden können muss dieser von der Firewall eingehende Verbindungen zulassen und ggf. über NAT geforwardet werden. Am Client-System brauchst du im Normalfall keine Ports zu öffnen, ausser die Firewall blockiert ausgehende Verbindungen.

/EDIT: omg, glaub ich hab kein plan was du überhaupt willst, google mal nach pcap bzw. winpcap ^^
 
Zuletzt bearbeitet:
Also meinst du UDP hole punching wie Skype es macht? Dafür brauchst du aber kein gekapseltes Paket...
 
ja weil skype auch einen zentralen server hat. Wie würde es funktionieren wenn man keinen zentralen server hat der die pakete so weiterleitet um die verbindung zwischen den Peer herzustellen. Nehme man einen ganz einfachen server der für alle bekannt ist und der nicht hinter eine Firewall sitzt. Hole Punching funktioniert nur dann wenn diese 2 clients eine verbindung zu dem server hergestellt haben.
natürlich kann man einen eigenen server einführen der die anfragen bearbeitet. Aber ich habe eventuell diese ressourcen nicht.

es gibt viele seiten zu dem thema... aber keine konkrette die eine Programmierlösung (oder zumindest einen ansatz) anbietet.
 
Was willst du konkret machen? nach dem was du bisher geschrieben hast, hast du 2 Clients welche nicht direkt am Internet hängen und sich hinter einer Firewall befinden und NAT verwenden.

C1 ----> Firewall/NAT <----> Internet <----> Firewall/NAT <---- C2

eine Kommunikation zwischen C1 und C2 kann nicht ohne weiteres stattfinden, da C1 nicht C2 kennt und umgekehrt zudem wird die Firewall eingehende Verbindungen blockieren. Entweder du brauchst einen "Vermittlungsserver" den beide Clients kennen, oder du musst die Firewall/NAT Konfiguration so abändern, dass Packete entsprechend zu den Clients geforwardet werden.
 
Also ich habe den ganzen Thread jetzt gelesen, aber trotzdem werde ich nicht schlau daraus.... !

@roker002 : Bitte schildere uns mal ganz genau was du vorhast und welches Problem dabei auftritt ! Um was für einen Server handelt es sich ? Welche Daten sollen verschickt werden ? etc....

Zum Thema Kapselung : Unter Kapselung im Bereich Netzwerkkommunikation versteht man das Wandern der Daten durch die einzelnen Schichten des OSI-Refernezmodells oder in Deinem konkreten Fall das Wandern der Daten durch die TCP/IP Protocol Suite !
Jede Schicht fügt dabei zusätzliche Daten für Steuerinformationen hinzu... z.B. :

Transportschicht: Hier arbeitet TCP und UDP, wie haze4real schon beschrieben hat verbindungsorientiert oder verbindungslos, den Prozess nennt man Segmentierung, weil TCP und UDP Segmente erzeugt und die Port Adressen der beteiligten Anwendungen hinzufügt, dann gehts weiter zur ...

Netzwerkschicht: hier arbeitet IP, wobei die Kapselung hier Pakettierung genannt wird. IP erzeugt aus den Segmenten Pakete und fügt Quell und Ziel IP-Adressen hinzu.....

und so weiter bis zur Bitübertragungsschicht....

hier mehr Infos: http://de.wikipedia.org/wiki/OSI-Modell oder http://de.wikipedia.org/wiki/Internetprotokollfamilie#TCP.2FIP-Referenzmodell

Wie auch immer, ich verstehe trotzdem nicht wieso du dich damit beschäftigen musst.... wenn du ne Netzwerkkommunikation programmieren willst, in Java oder C, dann benutz Sockets und entscheide dich für TCP oder UDP und implementier es entsprechend... mit Kapselung muss man sich doch da garnicht beschäftigen !! ??
 
Wenn man die Clients entsprechend programmiert kann man das UDP-HolePunching wohl auch über einen HTTP-Webserver (also mit PHP oder so) machen oder sich Emails mit den entsprechenden Daten schicken oder Ähnliches. Wird dann aber wohl nicht ganz so gut funktionieren...
 
Zurück
Oben