Sven Rautenberg: Predigt: KeepAlive und Transport-Encodings

Beitrag lesen

Moin!

Zuerst sendet der Client eine Verbindungsanfrage an den
Server, die der Server positiv beantwortet. Dann erst
kann der Client den eigentlichen HTTP-Request senden.

Das ist ein Zwei-Wege-Handshake :) Richtig waere:

Der lokale Rechner sendet ein SYN. Der Host sendet ein
SYN|ACK. Der lokale Rechner muss darauf mit einem ACK
antworten. Erst nach dieser erfolgreich abgelaufenen
Prozedur ist die TCP/IP-Verbindung aufgebaut.

Ja, ok, hab' ich ein Detail etwas unterschlagen.

Allerdings gilt für die Zeit: Der Client kann nach dem Senden des ACK sofort weitere Daten über die dann hergestellte Verbindung senden. Die Pakete können also direkt aufeinander folgen, ohne dass deswegen Zeit verloren geht.

Dieses Handshake kann auch mit fortgeschrittenen
Netzwerk-Techniken zeitlich nicht verkürzt werden: Es muß
zwingend die Laufzeit der Pakete abgewartet werden. Also
geht ein Datenpaket hin, eines kommt zurück, und eines
geht wieder hin (das erste, was effektiv dem
darüberliegenden Protokoll etwas bringt).

Falsch: erst das 4. Paket kann vom ueberliegenden Protokoll
genutzt werden.

Ja, stimmt dann auch. Obwohl es eigentlich unsinnig ist, extra deswegen _zwei_ einzelne Pakete zu schicken - das könnte man doch auch in ein Paket packen. Ich bin mir nicht sicher, ob das nicht sogar gemacht wird - und gerade zu faul, tcpdump anzuwerfen. ;)

Wenn man sich die Zeit, die dabei draufgeht, mal ausmalt:
Mit Modem hat man unter Umständen Ping-Zeiten von
mehreren hundert Millisekunden. Mit anderen Worten: Der
Aufbau einer TCP-Verbindung bis hin zur ersten
Serverreaktion (indem er eine HTML-Seite o.ä. sendet)
dauert mindestens die doppelte Ping-Zeit (Handshake hin
und her, Request hin und her).

Die dreifache Ping-Zeit :) Aber das ist so auch nicht ganz
wahr. Es wird die Zeit gemessen, bis ich ein Paket losschicke
und eine Antwort zurueck kommt. Es wird also auf zwei
Datenpakete gewartet. So komme ich auf die 1 1/2-fache
Ping-Zeit.

Nö, das mit der doppelten Ping-Zeit ist schon nicht falsch. :)

Es wird nennenswert Zeit verbraucht, um auf ein Datenpaket vom Client eine Antwort vom Server zu erhalten. Diese Zeit vergeht einmal für den ersten Handshake-Teil, und dann (da der Client das ACK und den Request sofort hintereinander schickt) noch einmal für die Antwort auf den Request.

Die Zeit kann länger sein, wenn der Webserver noch viel Zeit für die Auslieferung der Ressource benötigt.

Wer einen Ping von 0,5 Sekunden hat, wartet allein
deshalb pro Ressource eine Sekunde lang, ohne dass was
passiert.

0,75 Sekunden :)

Ok, nach 0,75 Sekunden legt der Webserver los, aber erst nach einer Sekunde merkt man davon was am Client. Und nur diese Zeit ist interessant für den Benutzer.

- Sven Rautenberg

--
SELFTREFFEN 2003 - http://selftreffen.kuemmi.ch/
ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|