{"id":69003,"date":"2026-06-30T07:33:00","date_gmt":"2026-06-30T05:33:00","guid":{"rendered":"https:\/\/www.herr-rau.de\/wordpress\/?p=69003"},"modified":"2026-06-30T17:22:24","modified_gmt":"2026-06-30T15:22:24","slug":"client-und-server-tcp-und-tls-1","status":"publish","type":"post","link":"https:\/\/www.herr-rau.de\/wordpress\/2026\/06\/client-und-server-tcp-und-tls-1.htm","title":{"rendered":"Client und Server, TCP und TLS (1)"},"content":{"rendered":"<div style='text-align:right;'><small>(<a href='https:\/\/www.herr-rau.de\/wordpress\/2026\/06\/client-und-server-tcp-und-tls-1.htm#comments'>1 Kommentare.<\/a>)<\/small> <\/div>\n<h2 class=\"wp-block-heading\">0. Die Kurzfassung<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Wenn man in einen Browser eine Adresse eingibt, etwas www.herr-rau.de\/wordpress\/, geschieht Folgendes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der Browser erstellt eine Verbindung zu dem Teil dieser Adresse, der den Server angibt, zum Beispiel www.herr-rau.de. Die Verbindung wird bei http auf Port 80 angefragt beziehungsweise mit zus\u00e4tzlicher Verschl\u00fcsselung auf Port 443 bei https.<\/li>\n\n\n\n<li> Der Browser schickt \u00fcber diese Verbindung eine HTTP-Anfrage an diese Adresse, die mindestens folgende Zeilen enth\u00e4lt. Nach dem GET steht die angeforderte Ressource auf dem Server:<br><code>GET \/wordpress\/ HTTP\/1.1<br>Host: www.herr-rau.de<\/code><\/li>\n\n\n\n<li>Der Browser erh\u00e4lt eine Antwort und stellt sie dar.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Hier stelle ich ein kleines Programmierergebnis f\u00fcr die Schule vor, mit dem man das und Varianten davon ausprobieren kann. Den Code gibt es hier: <a href=\"https:\/\/codeberg.org\/HerrRau\/TCP_in_der_Schule\">https:\/\/codeberg.org\/HerrRau\/TCP_in_der_Schule<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Als Filmchen:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"576\" style=\"aspect-ratio: 1060 \/ 576;\" width=\"1060\" controls src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls_0.mkv\"><\/video><\/figure>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"576\" style=\"aspect-ratio: 1060 \/ 576;\" width=\"1060\" controls src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls_1.mkv\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Dieser Blogeintrag ist entstanden als Skript f\u00fcr die Schule; das erkl\u00e4rt den vielleicht ungewohnten Tonfall. Im Unterricht vermittle ich das anders, das hier ist zum Nachlesen f\u00fcr zuhause.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Das Client-Server-Prinzip<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Im Internet laufen viele Abl\u00e4ufe so ab, dass ein Client-Programm (das auf einem Rechner l\u00e4uft, den man auch Client nennt) eine Anfrage an ein Server-Programm (das auf eine Server-Rechner l\u00e4uft) stellt und daraufhin eine Antwort erh\u00e4lt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"631\" height=\"170\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_client-server.png\" alt=\"\" class=\"wp-image-69042\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Lernw\u00f6rter: Client, Server<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Die Verbindung zwischen Client und Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Im Internet sind die Rechner ja nicht unmittelbar durch ein Kabel verbunden. Auf einer oberen Ebene, die hei\u00dft Anwendungsschicht, kann man einfach davon ausgehen, dass es irgendwie halt eine Verbindung zwischen Client und Server gibt. Die Anwendungsschicht interessiert sich nicht, wie diese Verbindung zustande kommt oder wie die am Ende physisch aussieht, ob Kabel oder WLAN oder \u00fcber Zwischenrecher oder wie auch immer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Man kann sich eine Verbindung so vorstellen, dass an den beiden Enden der Verbindung jeweils eine Blechdose ist mit einer langen verbindenden Schnur dazwischen, und in die Blechdose kann man hineinsprechen und das kommt dann am anderen Ende an. Ein Server h\u00e4lt meist einen ganzen Vorrat solcher Blechdosen vorr\u00e4tig, weil ja oft gleichzeitig mehrere Clients etwas von ihm wollen. Der Client braucht dagegen nur die eine Blechdose.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-parsec.jpg\" alt=\"\" class=\"wp-image-69045\"\/><\/figure>\n\n\n\n<p class=\"has-small-font-size wp-block-paragraph\">Im Bild: links ein vielarmiger Server, rechts ein Au\u00dferirdischer mit einer Dosenverbindung zu ihm.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Es gibt auch andere \u00dcbermittlungsverfahren, die mehr nach dem Flaschenpost-Prinzip funktionieren als nach dem Dosen-Prinzip; die sind manchmal schneller und einfacher, aber nicht so zuverl\u00e4ssig. Uns geht es heute nur um die Blechdosen-Variante.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lernw\u00f6rter: Verbindung<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Ports und Sockets<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Der Fachausdruck f\u00fcr Blechdose ist <code>Socket<\/code>. Wenn ein Client ein Socket f\u00fcr die Verbindung zu einem Server einrichten will, braucht er dazu a) die Adresse des Servers, zum Beispiel <code>85.13.157.184<\/code> und zweitens einen <code>Port<\/code> f\u00fcr die Verbindung. Das ist erst einmal einfach nur eine beliebige Zahl. Unter einer Server-Adresse k\u00f6nnen n\u00e4mlich verschiedene Server gleichzeitig laufen: ein Webserver, ein Medienserver, ein E-Mail-Server, und damit die auseinander gehalten werden, geh\u00f6rt der Port zum Socket dazu.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Client sagt also: \u201eBitte ein Socket zu 85.13.157.184 auf Port 80\u201c, und wenn unter dieser Adresse ein Server auf Port 80 auf Verbindungsw\u00fcnsche wartet, dann kommt eine Verbindung zustande. Sonst halt nicht. Das Verfahren f\u00fcr die Blechdosen-Verbindung hei\u00dft TCP, <code>Transmission Control Protocol<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viele der Ports sind standardisiert. Anfragen an einen Webserver laufen \u00fcber Port 80, bei Verschl\u00fcsselung \u00fcber Port 443. Wenn man abfragt, ob neue E-Mail da ist, werden dazu die Ports 143 oder 220 verwendet, bei Verschl\u00fcsselung auch 993 oder 995. Zum Verschicken von E-Mail dienen die Ports 25 oder 487. Wenn ich mich auf einem fremden Rechner einloggen m\u00f6chte, und das technisch zugelassen ist, findet das meist auf Port 22 statt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Viele Ports sind also f\u00fcr bestimmte Anwendungen vorgesehen, es gibt aber noch ausreichend freie Ports. Der Client muss halt nur wissen, auf welchem Port bei der Server-Adresse etwas angeboten wird, und der Server muss es auch anbieten.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lernw\u00f6rter: Port<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1061\" height=\"609\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_0.png\" alt=\"\" class=\"wp-image-69036\"\/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Starte den Client im Modus \u201eLokal\u201c. Mit dem Knopf \u201eVerbindung herstellen!\u201c kannst du auf Port 80 eine Verbindung zu beliebigen Adressen im Web herstellen. Etwa: dailyimage.de, httpforever.com, facebook.com. Probiere ein paar davon aus. Allerdings bringt das noch nicht viel, weil du erst in einem n\u00e4chsten Schritt Anfragen \u00fcber diese Verbindung schicken musst, damit etwas geschieht.<br>Beende die Verbindung, wenn du sie nicht mehr brauchst. Die angefragten Webserver werden vermutlich ohnehin nach jeder HTTP-Anfrage die TCP-Verbindung gleich oder nach ein paar Sekunden schlie\u00dfen; das erkennst du an der Zeile \u201eConnection: Closed\u201c in der Antwort.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">(Probiere auch ein oder zwei andere Ports aus; du d\u00fcrftest keine Verbindung herstellen k\u00f6nnen, weil auf diesen Ports kein Server erreichbar ist. Mach das aber nicht zu oft, denn das k\u00f6nnte bereits als illegales Hacken ausgelegt werden. Die Rechtslage ist unklar, aber es ist in Deutschland m\u00f6glicherweise verboten, automatisiert zu \u00fcberpr\u00fcfen, welche Ports bei einer Adresse offen, also erreichbar, sind; das hei\u00dft <em>Port Scanning.<\/em>)<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">3. Der Witze-Server und das Witze-Protokoll<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ich habe einen kleinen Witze-Server programmiert, den ich auf einem Rechner laufen lassen kann. Der Port ist beliebig, sagen wir: 54000. Ein Client kann eine TCP-Verbindung zu dem Server aufmachen, wenn er dessen Adresse wei\u00df. Da der Client auf dem gleichen Rechner l\u00e4uft wie der Server, kann ich als Adresse <code>127.0.0.1<\/code> oder auch <code>localhost<\/code> angeben, das sind Pseudo-Adressen f\u00fcr: ist der gleiche Rechner, auf dem du eh bist. Deswegen gibt es auch T-Shirts mit der Aufschrift \u201eThere\u2018s no place like 127.0.0.1\u201c<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobald die Verbindung steht, kann ich dem Server Nachrichten schicken. Bei meinem Server geht das nur in Form von Text. Bei folgenden Anfragen erh\u00e4lt man als Response lediglich \u201e<em>Anfrage nicht verstanden.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>hallo<\/code><br><code>erz\u00e4hl mir einen Witz<\/code><br><code>erz\u00e4hl mir einen Witz<\/code><br><code>wie funktioniert denn das?<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Das Witz-Protokoll verlangt n\u00e4mlich, dass die Buchstaben \u201eWitz\u201c und \u201eBitte\u201c (Gro\u00dfschreibung egal) in irgendeiner Form geschickt werden. Fehlt das &#8222;Witz&#8220;, kriegt man &#8222;Was willst du?&#8220;, fehlt das &#8222;Bitte&#8220;, kriegt man &#8222;Wie heisst das Zauberwort?&#8220; Bei folgenden Anfragen erh\u00e4lt man als Response demnach einen &#8211; zuf\u00e4llig ausgew\u00e4hlten &#8211; Witz:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>bitte 1 witz<\/code><br><code>Witz, bitte<\/code><br><code>bittewitz<\/code><br><code>Das ist doch ein Witz! Bitte.?<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Warum sieht das Witze-Protokoll so aus? Einfach so, weil ich mir das ausgedacht habe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lernw\u00f6rter: Protokoll<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1061\" height=\"609\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_1.png\" alt=\"\" class=\"wp-image-69037\"\/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Wenn du kannst, lass auf deinem Rechner den Witzeserver laufen. Lass ebenfalls auf deinem Rechner den Client laufen, weiterhin im Modus \u201eLokal\u201c. Verbinde den Client mit dem Server; als Adresse kannst du <code>127.0.0.1<\/code>oder <code>localhost<\/code>eingeben; der Port sollte eine h\u00f6here Zahl sein, etwa 54000. Schicke dann Anfragen an ihn.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">4. Echo-, Chat- und Sprichwortserver<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ich habe auch noch weitere \u00e4hnliche Server programmiert, die man gleichzeitig (aber eben jeweils auf einem anderen Port!) laufen lassen kann.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Der Echo-Server akzeptiert jeden Input und schickt die Nachricht in umgekehrter Reihenfolge zur\u00fcck.<\/li>\n\n\n\n<li>Der Joke-Server sendet dann einen zuf\u00e4lligen Witz zur\u00fcck, wenn die Anfrage die W\u00f6rter \u201ewitz\u201c und \u201ebitte\u201c enth\u00e4lt.<\/li>\n\n\n\n<li>Der Sprichwort-Server sendet ein zuf\u00e4lliges Sprichwort zur\u00fcck, wenn du ihm <code>ok<\/code> sendest.<\/li>\n\n\n\n<li>Der Chat-Server sendet alles, was du eingibst, an alle anderen Teilnehmer im Chat.<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Lasse auch diese Server laufen, nacheinander oder gleichzeitig auf verschiedenen Ports<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Leider sind im Computerraum die Ports so gesperrt, dass du nur einen Server auf deinem eigenen Rechner erreichen kannst, die auf den anderen Rechnern sind nicht zug\u00e4nglich.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vorgeschlagene Standard-Ports:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Server<\/th><th>Port<\/th><th>Protokoll-Elemente<\/th><\/tr><\/thead><tbody><tr><td>Echo-Server<\/td><td>54000<\/td><td>(beliebig)<\/td><\/tr><tr><td>Joke-Server<\/td><td>54001<\/td><td>witz (und) bitte<\/td><\/tr><tr><td>Sprichwort-Server<\/td><td>54002<\/td><td>ok<\/td><\/tr><tr><td>Chat-Server<\/td><td>54003<\/td><td>(beliebig)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">5. Web-Server<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Webserver ist ein Programm, das auf Anfragen in einer bestimmten Form damit reagiert, dass das Erwartete in einer bestimmten Form zur\u00fcckgeschickt wird, meist eine Webseite; es k\u00f6nnte aber auch eine Bilddatei sein.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dabei m\u00fcssen sowohl Anfrage als auch Antwort einem bestimmten Protokoll folgen, also eben eine bestimmte Form haben. Die W\u00f6rter \u201eBitte\u201c und \u201eWitz\u201c spielen anders als im Witze-Protokoll keine Rolle, aber im Hypertext Transfer Protocol HTTP ist festgelegt, wie man Anfragen korrekt formuliert und welche Art Antworten man in welcher Form zu erwarten kann. H\u00e4ufig beginnen die Antworten mit den Fehlermeldungen \u201e404 Not Found\u201c oder \u201e400 Bad Request\u201c. Letzteres kriegt man gerne dann, wenn man die HTTP-Anfragen selber von Hand schreibt, statt sie dem Browser zu \u00fcberlassen, und dabei in irgendeiner Form gegen das Protokoll versto\u00dfen hat.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Du sollst nach und nach lernen, wie dieses Protokoll HTTP aussieht. Keine Sorge, es sind nur zwei Zeilen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lernw\u00f6rter: Webserver, HTTP<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Eigene HTTP-Anfragen<\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Starte den Client im Modus \u201eEinfach\u201c. Lade nacheinander die Beispiele und verbinde dich erst mit dem Server, bevor du dann die voreingestellte HTTP-Anfrage abschickst.<br>Wenn du das Prinzip verstanden hast, kannst du auch andere Server als in den Beispielen ausprobieren. Bei der Adresse kannst du einen Namen wie \u201efacebook.com\u201c aingeben; eine IP-Adresse funktioniert auch, wenn du eine geeignete kennst. (In sp\u00e4teren Beispielen wird das nur noch mit Namen gehen.) Der Port muss bisher immer 80 sein.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1061\" height=\"609\" src=\"https:\/\/www.herr-rau.de\/wordpress\/archiv\/tcp-tls-http_2.png\" alt=\"\" class=\"wp-image-69038\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Wie es funktioniert<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Wenn<\/em> man eine TCP-Verbindung zu <code>85.13.157.184<\/code> auf Port 80 hergestellt hat, <em>dann<\/em> kann man \u00fcber diese Verbindung folgende drei Zeilen schicken (es sind tats\u00e4chlich drei Zeilen, denn die Leerzeile am Ende geh\u00f6rt mit zum Protokoll):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/index.html HTTP\/1.1\nHost: www.dailyimage.de<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Als Antwort sollte man das hier erhalten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTP\/1.1 200 OK\nDate: Sat, 20 Jun 2026 16:28:09 GMT\nServer: Apache\nUpgrade: h2,h2c\nConnection: Upgrade\nLast-Modified: Sat, 20 Jun 2026 16:24:17 GMT\nETag: \"ef-654b1d746e0d5\"\nAccept-Ranges: bytes\nContent-Length: 239\nVary: Accept-Encoding,User-Agent\nContent-Type: text\/html\n\n&lt;!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\"&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;title&gt;&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n\n&lt;p&gt;\nWelch Wort entfloh dem Gehege deiner Z\u00e4hne?\n&lt;\/p&gt;\n\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Schauen wir uns die Antwort an: Alles ab dem \u201e&lt;!DOCTYPE\u201c ist die gesendete Webseite. Alles davor ist der Kopf der Antwort. Der Status ist <code>200 OK<\/code>, es hat also alles geklappt. Auch die anderen Angaben sind lauter Angaben, die ein Client, also meist ein Browser, sinnvoll verarbeiten und nutzen kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Am Ende sollte ich \u00fcbrigens die Verbindung (das mit den Dosen) wieder schlie\u00dfen, damit der Webserver nicht mit unn\u00f6tig vielen Dosen jonglieren muss. Es steht dem Webserver aber auch frei, die Verbindung selbstt\u00e4tig zu schlie\u00dfen, entweder sofort nach der Anfrage oder nach einigen Sekunden Wartezeit. Dem <code>Connection: Upgrade<\/code>in der Antwort oben kann man entnehmen, dass der Server die Verbindung eben <em>nicht<\/em> geschlossen hat; man k\u00f6nnte also gleich weitere Anfragen nachschicken, ohne erst mit den Dosen hantieren zu m\u00fcssen.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Was die Anfrage-Zeilen bedeuten<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Schauen wir uns die Anfrage noch einmal an, die hat es n\u00e4mlich in sich:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GET \/index.html HTTP\/1.1\nHost: www.dailyimage.de<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Die erste Zeile ist n\u00f6tig:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sie enth\u00e4lt das Schl\u00fcsselwort <code>GET<\/code> gefolgt von einem Schr\u00e4gstrich und der angeforderten Ressource.<\/li>\n\n\n\n<li>Die Ressource ist in diesem Fall eine Datei namens <code>index.html<\/code>, sich auf der obersten Ebene des Hosts befindet. Da k\u00f6nnte man auch nur <code>\/<\/code>schreiben, dann sucht der Webserver standardm\u00e4\u00dfig nach einer Datei, die so oder so \u00e4hnlich hei\u00dft.<\/li>\n\n\n\n<li>Dann folgt die Protokollversion, denn 1.2 oder 1.3 oder gar 1.0 unterscheiden sich in einigen Punkten. 1.1 ist die \u00fcbliche Version.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Die zweite Zeile ist auch n\u00f6tig:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Um welche Web-Adresse geht es \u00fcberhaupt? Das ist deshalb wichtig, weil sich unter der IP-Adresse, mit der wir uns verbunden haben (das war das mit den Dosen) verschiedene Host-Adressen befinden k\u00f6nnten, die alle verschiedene Dateien namens <code>index.html<\/code> auf der obersten Ebene liegen haben. Es ist n\u00e4mlich tats\u00e4chlich so, dass sich unter <code>85.13.157.184<\/code> nicht nur dailyimage.de, sondern auch herr-rau.de und taschenbuchschuerfer.de und neuronenzirkus.de und noch eine Reihe anderer Adressen aufrufen lassen. Die habe ich alle auf diesem gemieteten Server laufen, und andere Kunden haben auf dem gleichen Server vermutlich etliche weitere Adressen. Deswegen muss man in der HTTP-Anfrage den korrekten Host angeben.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Weitere Zeilen sind optional, aber \u00fcblich. Wikipedia etwa antwortet nur dann mit dem Gew\u00fcnschten, wenn Information zum <code>User-Agent<\/code> mitgeschickt wird; <code>Connection: disconnect<\/code>w\u00fcrde mitteilen, dass die Verbindung danach gleich wieder geschlossen werden kann.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><small>T\u00fcckisch ist au\u00dferdem eines: Die HTTP-Anfrage besteht aus mindestens drei Zeilen, davon ist die letzte leer. Aber was eine Zeile ist, dar\u00fcber streiten sich die Betriebssystem. F\u00fcr Linux, Unix, MacOS ist alles eine Zeile, was mit einem nicht druckbaren Zeichen NEWLINE, das gerne mal als <code>\"\\n\"<\/code> repr\u00e4sentiert wird, endet. F\u00fcr alte Versionen von MacOS ist alles eine Zeile, was mit dem \u00e4hnlich nichtdruckbaren Zeichen CARRIAGE RETURN, auch <code>\"\\r\"<\/code>, endet. F\u00fcr Windows ist alles eine neue Zeile, was mit der Kombination<code>\"\\r\\n\"<\/code> endet. F\u00fcr menschliche Augen im Textfenster sieht das alles gleich aus. F\u00fcr die HTTP-Anfrage muss die Zeile immer mit <code>\"\\r\\n\"<\/code> enden.<\/small><\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Weitere Aufgaben<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Aufgabe:<\/strong> Formuliere HTTP-Anfragen an den Server <code>85.13.157.184<\/code> auf Port <code>80<\/code>, um folgende Ressourcen zu laden:<\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/bild.jpg<\/code> auf dem Host <code>dailyimage.de<\/code><\/li>\n\n\n\n<li><code>\/gedicht.html<\/code> auf dem Host <code>dailyimage.de<\/code><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">7. Zwischenfazit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Kein Mensch erstellt von Hand eine HTTP-Request und verarbeitet die HTTP-Response von Hand. Das \u00fcberl\u00e4sst man einem Programm, die k\u00f6nnen das besser. Es muss nicht gleich ein ganzer Browser sein, f\u00fcr die meisten g\u00e4ngigen Programmiersprachen d\u00fcrfte es Pakete geben, in den das alles von Fachleuten sauber programmiert wurde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aber es ist ein besonderes Gef\u00fchl, das selber zu machen. Die TCP-Verbindung wird von der Programmbibliothek erstellt, alles andere, also auf der Anwendungsschicht, schreiben wir selber, egal ob Witze-Anfragen oder HTTP-Requests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.herr-rau.de\/wordpress\/2026\/06\/client-und-server-tcp-und-tls-2.htm\">(Fortsetzung hier.)<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>(1 Kommentare.) 0. Die Kurzfassung Wenn man in einen Browser eine Adresse eingibt, etwas www.herr-rau.de\/wordpress\/, geschieht Folgendes: Hier stelle ich ein kleines Programmierergebnis f\u00fcr die Schule vor, mit dem man das und Varianten davon ausprobieren kann. Den Code gibt es hier: https:\/\/codeberg.org\/HerrRau\/TCP_in_der_Schule Als Filmchen: Dieser Blogeintrag ist entstanden als Skript f\u00fcr die Schule; das erkl\u00e4rt [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":69072,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25],"tags":[227,233],"class_list":["post-69003","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatik","tag-informatik","tag-programmierprojekte"],"_links":{"self":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/69003","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/comments?post=69003"}],"version-history":[{"count":3,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/69003\/revisions"}],"predecessor-version":[{"id":69089,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/posts\/69003\/revisions\/69089"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media\/69072"}],"wp:attachment":[{"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/media?parent=69003"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/categories?post=69003"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.herr-rau.de\/wordpress\/wp-json\/wp\/v2\/tags?post=69003"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}