So, wie
versprochen, ich versuche mal die Sache mit den Ping-Grafiken von
ping.zockertown.de zu erklären: Als
Beispiel nehme ich einen Test Webserver, den ich eigens zu dem Zweck
aufgesetzt habe. Der Name der (Pseudo) Domain ist
ping-tester.
Ping-tester
ist der Asus G1 Laptop, hinter einem Router. Der Router hat eigens zu
dem Zweck ein Forwarding von Port 80 auf dem Laptop, so das der Server
vom Internet aus, also auch von ping.zockertown.de zu erreichen ist.
Das besondere am verwendeten Webserver thttpd ist, das man seine
Auslieferungsgeschwindigkeit drosseln kann. Leider ist der http_ping,
um den es hier geht nicht in der Lage, Dateien zu laden, sondern nur -
wie es sich auch für einen normalen Ping gehört - ein Tool um den
Verbindungsauf- und abbau zu messen.
In der Legende der Grafiken sind die folgenden Werte abgebildet:
- open connection (Gelb)
- send request      (Braun)
- receive response (Blau)
- close connection (Dunkelblau)
- total                    (Rot)
Die horizontale Achse ist die Uhrzeit, die vertikale Achse ist die
benötigte Zeit. Normalerweise in Millisekunden, bei besonders langsamen
Sites sind es auch schonmal Sekunden.
Die Gelbe "open connection"
Zeit, ist die Zeitspanne, bis eine Reaktion des Webservers eintrifft.
Der Webserver liefert dann sein "Connect".
Das Braune "send
request" ist die Zeit, die für das zustellen des Kommandos an den
Webserver benötigt wird, normalerweise kaum messbar.
Das Blaue
"receive response" ist die Zeitdauer, die bis zum eintreffen des
letzten Bytes vergeht.
Das Dunkelblaue "close connection" ist die Zeitdauer, bis das Close des Webservers eintrifft.
Wo der Unterschied zwischen der Roten Total Time und der Blauen Zeit ist, habe ich nicht ergründen können. Evtl. habe ich die Punkte in der unteren Erklärung auch ein - zwei phasen versetzt, ich bin nicht in den Source Code von php eingestiegen, sondern verlasse mich auf die Beschreibung der Funktionen und meine Intuition. Da ist also noch Unsicherheit.
Was passiert im einzelnen, wenn der HTTP_Ping gestartet wird? Ich habe den Verkehr zwischen Ping.zockertown.de und meinem Laptop belauscht. Dazu habe ich wireshark benutzt. Dieses Schweizer Taschenmesser für Netzadmins habe ich viel zu wenig genutzt bis jetzt, es wurde mal wieder Zeit. Der Extrakt der 11 markierten Pakete ist im erweiterten Teil des Beitrages mit entsprechenden Erklärungen dazu, zu sehen.
Hier ist der Ausschnitt vom Captured File. Ein komplettes http_ping. (Capture Log auf http://yourpaste.net/1350)
Zeile 1-16: Hier findet sich das erste Paket Frame 6126. Gesendet vom Client (mein Ping.Zockertown.de ist der Initiator, in diesem Kontext der Client). Es ist das [SYN] Flag. Dieses Paket ist der erste Part eines 3 Schritt Handshakes zum Aufbauen einer Verbindung.
Zeile 17-36: Darauf antwortet mein thttp Webserver (also der Server in diesem Kontext) im Frame 6127 mit einem [SYN, ACK] Flag. Die verstrichene Zeit ist 0.000034 Sekunden.
Zeile 37-56: Hier antwortet der Client in Frame 6128 mit [ACK] Seq=1 Ack=1. Das ist die Bestätigung des Clients, die Verbindung ist nun hergestellt. Die verstrichene Zeit ist 0.031983000 Sekunden. Diese Zeit ist die (Gelb) dargestellte open connection in den Grafiken.
Zeile 57-80: Frame 6129 Jetzt ist der Client also in der Lage, dem Server Befehle zu senden, normalerweise würde nun ein Get für die HTML Seite folgen, doch da es sich um einen Erreichbarkeitstest handelt und man ja keinen unnötigen Traffic will, sendet der Client: Connection: close verstrichene Zeit ist 0.032315 Sekunden.
Zeile 81-100: Frame 6130 Hier bestätigt der Server den erhalt des Close: mit [ACK] verstrichene Zeit ist 0.032337 Sekunden. Ich nehme an das ist der Braune "send
request" Messpunkt, bin mir aber nicht ganz sicher.
Zeile 101-119: Frame 6131Â Das ist ein reassembletes Paket, spielt hier keine Rolle. Verstrichene Zeit ist 0.032475 Sekunden.
Zeile 120-145: Frame 6132 Hier liefert der Server nun den HTTP Header mit dem Inhalt Connection Close. Verstrichene Zeit ist 0.032578 Sekunden. Ich behaupte mal, diese Zeit ist die Blaue
"receive response" so ganz bin ich mir aber nicht sicher
Zeile 146-167:Frame 6133 Vom Client kommend. Das ist ein eigentlich nicht notwendiger Frame [Duplicate to the ACK in frame: 6129].Verstrichene Zeit ist 0.067277Sekunden.
Zeile 168-187: Frame 6134 Auch das kommt vom Client. Es ist die Bestätigung für Frame 6132 Verstrichene Zeit ist 0.067429 Sekunden.
Zeile 188-204: Frame 6135 Hier beginnt der Verbindungsabbau. Der Client liefert ein[FIN, ACK] Verstrichene Zeit ist 0.067571 Sekunden.
Zeile 205-224: Frame 6136 Der Server Bestätigt den erhalt von FIN und liefert [ACK] Verstrichene Zeit ist 0.067588 Sekunden. Das ist die Dunkelblaue "close connection" Zeit.
Mir müsste jemand von seinem Server mit hilfe von wireshark ein Capture zukommen lassen, wo extreme Zeiten aufgenommen sind, um die Unsicherheiten zu klären, aber für den Anfang denke ich, das nun das Verständnis (auch für mich) für die Grafiken von ping.zockertown.de besser ist. Das Caputure befindet sich bei yorpaste, es öffnet sich im neuen Fenster. Leider kam das geshi plugin hiermit durcheinander http://yourpaste.net/1350
Für Kommentare, Fehlerhinweisen und Richtigstellungen bin ich dankbar!