# Datenpakete nach Australien



## Philipp.wehling (20. Mrz 2012)

Hallo liebe Forums-Gemeinde,

ich hab da eine Projektaufgabe bekommen:

Ich soll die Zeit messen, die ein Datenpaket von hier nach Australien braucht, um ein stochastisches Modell dafür zu entwicklen. Ich muss also eine Messung über einen sehr langen Zeitraum tätigen.

Ich hab mir überlegt, dass ich dafür hier einen Service brauche, welcher die Datenpakete los schickt und in Australien auf einem Server einen Service, welcher als Loop-back dient: Die Pakete müssen ja da gemessen werden und wieder an mich verschickt werden.

Es existieren einige Probleme:

- ein Paket nimmt ja verschiedenste Wege bei so langen Übertragungsstrecken
- Ein IP-Paket besitzt keinen Zeitstempel
- ist "Service-Programmierung" mit java überhaupt möglich?


Ich bin nicht der fitteste in Programmieren. Da ist Java schon noch das beste, was ich drauf hab 

Könnte ihr mir da weiter helfen? Ich wäre euch wirklich sehr dankbar!!!



vlg


----------



## ARadauer (20. Mrz 2012)

- ein Paket nimmt ja verschiedenste Wege bei so langen Übertragungsstrecken
ja darum wird man öfter messen und den durchnitt ausrechnen...
- Ein IP-Paket besitzt keinen Zeitstempel
brauchst du den? ich würd eine art ping schicken, die dauer bis zur antwort /2 wird die dauer für eine strecke sein
- ist "Service-Programmierung" mit java überhaupt möglich?
"service" ist ein sehr allgemeiner begriff


----------



## nillehammer (20. Mrz 2012)

> - ein Paket nimmt ja verschiedenste Wege bei so langen Übertragungsstrecken


Stimmt, der Weg ist aber auch nicht der einzige Faktor, der die Laufzeit bestimmt. Die Latenz der beteiligten Router spielt da bspw. auch mit rein. Über den langen Messzeitraum sollten Ausschläge nach oben/unten sich ja herausmitteln. Sehe ich also kein Problem drin.


> - Ein IP-Paket besitzt keinen Zeitstempel


Stimmt, aber TCP hat sowas (Stichwort TCP-Options). Es wird u.a. auch für Deinen Anwendungsfall verwendet. Guckst Du hier: TCP option 8, Timestamp Das Blöde ist nur, dass Du per Java keinen Zugriff auf diese Options hast (zumindest nicht, dass ich wüsste). Insofern müsstest Du das umgehen, in dem Du selbst den Timestamp erzeugst und an Deinen Testserver in Australien schickst.


> - ist "Service-Programmierung" mit java überhaupt möglich?


Verstehe den Begriff "Service" in diesem Kontext nicht. Meinst du sowas wie einen Windows-Service (oder unter Unix auch Daemon genannt)? Falls ja, dann heißt die Antwort teils/teils. Du kannst in Java ein Programm schreiben, dass ständig auf einem Port auf Verbindungen horcht und was macht (prominentestes Beispiel Tomcat). Dieses Programm lässt sich aber nicht als Service/Daemon starten. Dafür sind sog. Wrapper(-Scripts) nötig, die von der gewählten Plattform abhängen.

Nachdem Du ja nicht auf Java festgelegt bist und es für solche Messzwecke bereits sehr gute Tools gibt, würde ich Dir aber eher Raten, dich bei diesen Tools zu bedienen.


----------



## Philipp.wehling (20. Mrz 2012)

Das mit dem Ping und weg durch 2 hab ich mir auch schon überlegt. Aber da kommt doch wieder das Problem der unterschiedlichen Wege ins Spiel, dass es ja nicht den gleich Weg/die gleiche Verzögerung erfährt, wenn es zurück geschickt wird.

Mit "Service" meine ich eine Anwendung, die 24/7 (über ca. 2 Monate hinweg) läuft und pro Minute ein Paket los schickt, damit ich ausreichend Messdaten zur Verfügung habe.

Außerdem sollen die Messdaten so genau wie möglich sein.

Wenn es solche Tools schon gibt, wo finde ich diese denn?


----------



## nillehammer (20. Mrz 2012)

> Aber da kommt doch wieder das Problem der unterschiedlichen Wege ins Spiel, dass es ja nicht den gleich Weg/die gleiche Verzögerung erfährt, wenn es zurück geschickt wird.


So ist das im Internet nunmal. Wenn Du dort ideale Bedingungen hättest, müsstest Du ja auch nicht messen, sondern könntest einfach die Entfernung nach Australien durch die Lichtgeschwindigkeit teilen und so die Zeit berechnen. Die Messung über einen langen Zeitraum stellt doch sicher, dass Extremwerte nicht so ins Gewicht fallen und im Durchschnitt ein Wert herauskommt, der die durch Messungen belegte reale Situation widerspiegelt. Ich sehe da also *immer noch* kein Problem.


> Das mit dem Ping und weg durch 2 hab ich mir auch schon überlegt.


Das ist ein berechtigter Einwand, wenn Dich eigentlich nur die einfache Zeit interessiert.


> Wenn es solche Tools schon gibt, wo finde ich diese denn?


Mal sone Idee, wie es mit bestehenden Tools gehen könnte:

Besorg Dir in Deutschland und Australien je eine Linux-Kiste
Schicke Pings los, benutze den Parameter "-p", um einen Timestamp in den Payload des Pings zu generieren. (ping(8) - Linux man page)
Auf der Anderen Seite starte ein tcpdump oder einen wireshark und logge alle ankommenden Ping-Pakete in ein File inklusive. (Manpage of TCPDUMP), (Wireshark  Go deep.)
Lass über das File im Nachgang ein Script laufen, dass die Timestamps aus den Pakleten rauspult, auf die Australische Zeitzone normalisiert und die Sendezeit von der Capturezeit abzieht. Dann hast Du Deine einfache Laufzeit für die Pakete, die Du dir auch wieder in einem File merkst. (Bash Reference Manual)
Wende Deine stochastistischen Verfahren auf die Messreihe an. (Microsoft Excel 2010 - Office.com)
[EDIT]
Statt mit Pings (also ICMP) kannst Du auch mit UDP arbeiten. Das ließe sich mittels Syslog-Messages relativ leicht realisieren. (syslog(3): send messages to system logger - Linux man page), (syslogd(8): system logging utilities - Linux man page)
So brauchst Du auch keinen tcpdump/wireshark, weil Du in Australien den Syslogdaemon direkt laufen lassen kannst.
[/EDIT]


----------



## bygones (20. Mrz 2012)

Philipp.wehling hat gesagt.:


> Mit "Service" meine ich eine Anwendung, die 24/7 (über ca. 2 Monate hinweg) läuft und pro Minute ein Paket los schickt, damit ich ausreichend Messdaten zur Verfügung habe.


hab einen Server auf dem das laeuft und stell sich dass der Server up ist - dann gibts dzbgl kein problem


----------



## Philipp.wehling (26. Mrz 2012)

Danke schonmal für die detaillierte Beschreibung des Lösungsvorschlags.

Das mit dem Ping und dem auslesen/umformen der Zeit verstehe ich.

In Linux bin ich leider auch nur rudimentär bewandert und würde dich bitten, mir noch genauere Informationen bezüglich sys_log bereit zu stellen.
Ich hab mir die man-pages durchgelesen, bin daraus aber leider nicht schlau geworden.

Gibts irgendwo ein Tutorial, wie man in Linux ein Skript schreibt? Falls der Server mal abschmiert, würde ich gerne das Skript in den Autostart mit einfügen, damit ich keine großen Ausfallzeiten habe.


vlg


----------



## Philipp.wehling (28. Mrz 2012)

Ich habe die Idee mit dem sys_log jetzt verworfen.


Aber wie bekomme ich einen TIMESTAMP in den payload von ping mit dem -p Befehl?



danke im vorraus


----------

