Die Anwendungsschicht
MittelEinheit 2 von 8 in Kurs: Computernetzwerke – Internetprotokolle, TCP/IP und Routing
Was du lernst
- Vergleiche Client-Server- und Peer-to-Peer-Architekturen, beschreibe, wie Anwendungsprozesse über Sockets Nachrichten austauschen, und ordne den Anforderungen einer Anwendung die Dienste von TCP und UDP zu.
- Vergleiche Client-Server- und Peer-to-Peer-ArchitekturenBeschreibe, wie die Architekturen Hosts Rollen zuweisen, warum Peer-to-Peer-Architekturen mit ihrer Nutzerzahl skalieren und welche Herausforderungen die Architekturen mit sich bringen.
- Beschreibe die Kommunikation zwischen Prozessen und wähle einen TransportdienstErkläre Sockets, die Adressierung von Prozessen und was ein Anwendungsschichtprotokoll festlegt, und entscheide, ob eine Anwendung TCP oder UDP nutzen sollte.
- Vergleiche Client-Server- und Peer-to-Peer-Architekturen
- Lies und analysiere HTTP-Nachrichten und -Verbindungen, erkläre die Funktionsweise von Cookies und Caches und beschreibe, was HTTP/2 und HTTP/3 an der Übertragung von Nachrichten ändern.
- Lies HTTP-Nachrichten und vergleiche VerbindungstypenInterpretiere HTTP-Anfragen und -Antworten und berechne, wie sich persistente und nicht persistente Verbindungen auf die Ladezeit einer Seite auswirken.
- Erkläre, wie Cookies und Webcaches funktionierenBeschreibe, wie Websites Nutzer mithilfe von Cookies über das zustandslose HTTP wiedererkennen, und berechne, wie ein Caching-Proxy und bedingte Anfragen Verzögerung und Datenverkehr verringern.
- Erkläre, wie HTTP/2 und HTTP/3 mit QUIC das Web beschleunigenBeschreibe Head-of-Line-Blocking und erkläre, wie die Aufteilung in HTTP/2-Frames und HTTP/3 über QUIC Verzögerungen verringern, während die Bedeutung der HTTP-Nachrichten gleich bleibt.
- Lies HTTP-Nachrichten und vergleiche Verbindungstypen
- Verfolge eine Namensauflösung durch die DNS-Hierarchie, lies DNS-Einträge und -Nachrichten und erkläre, wie Caching und ein verteilter Aufbau DNS schnell und robust halten.
- Verfolge eine Namensauflösung durch die DNS-HierarchieBeschreibe die Dienste von DNS und die Aufgaben von Root-Nameservern, TLD-Nameservern, autoritativen Nameservern und lokalen DNS-Servern und verfolge die Anfragen einer Namensauflösung Schritt für Schritt.
- Lies DNS-Einträge und DNS-NachrichtenInterpretiere die gebräuchlichen Ressourceneintragstypen, vollziehe nach, wie Einträge die Hierarchieebenen verbinden, und lies DNS-Anfragen und -Antworten und erkenne ihre Sicherheitsschwächen.
- Verfolge eine Namensauflösung durch die DNS-Hierarchie
- Verfolge eine Nachricht vom Sender zum Empfänger über SMTP, lies Dialoge zur E-Mail-Übertragung und Nachrichtenformate und erkläre, wie Nutzer ihre E-Mails mithilfe von Zugriffsprotokollen lesen.
- Verfolge die Übertragung einer E-Mail mit SMTPBeschreibe die Bestandteile des E-Mail-Systems, verfolge einen SMTP-Dialog zwischen Mailservern und erkläre, wie E-Mails eingeliefert und gefälschte Absender erkannt werden.
- Erkläre Nachrichtenformate und Protokolle für den E-Mail-ZugriffLies den Header und die MIME-Struktur einer E-Mail und vergleiche IMAP, POP3 und Webmail als Möglichkeiten, E-Mails zu lesen.
- Verfolge die Übertragung einer E-Mail mit SMTP
- Berechne, warum die Peer-to-Peer-Dateiverteilung skaliert, erkläre, wie BitTorrent eine Datei verteilt, und beschreibe, wie adaptives Streaming und Content Delivery Networks Videos an Millionen Zuschauer ausliefern.
- Berechne die Verteilungsdauer in P2P-Netzen und erkläre BitTorrentVergleiche die Mindestdauer für die Verteilung einer Datei mit einem Server und mit Peer-to-Peer und erkläre, wie BitTorrent Dateistücke, Rarest-First-Anfragen und den wechselseitigen Austausch nutzt.
- Erkläre adaptives Videostreaming über HTTPSetze Videobitraten zum Netzwerkdurchsatz in Beziehung und erkläre, wie DASH-Clients Segmente für eine flüssige Wiedergabe auswählen.
- Erkläre, wie CDNs Inhalte ausliefernBeschreibe, warum Inhalteanbieter CDNs nutzen, vergleiche Möglichkeiten zur Platzierung von CDN-Servern und verfolge, wie DNS eine Anfrage zu einem nahe gelegenen CDN-Server leitet.
- Berechne die Verteilungsdauer in P2P-Netzen und erkläre BitTorrent
- Nutze das Socket-Modul von Python, um UDP- und TCP-Clients und -Server zu programmieren, und erkläre, wie sich das Verhalten der Programme aus dem jeweiligen Transportdienst ergibt.
- Programmiere einen UDP-Client und einen UDP-ServerSchreibe und erkläre ein UDP-Client-Server-Paar in Python, einschließlich Adressierung, Codierung, Zeitüberschreitungen und der Grenzen der Datagrammübertragung.
- Programmiere einen TCP-Client und einen TCP-ServerSchreibe und erkläre ein TCP-Client-Server-Paar in Python, verarbeite den TCP-Bytestrom korrekt und nutze einen Socket, um HTTP von Hand zu sprechen.
- Programmiere einen UDP-Client und einen UDP-Server
Anwendungsschicht einfach erklärt
1Anwendungsentwurf und Transportdienste
Vernetzte Programme benötigen einen Plan, wer mit wem kommuniziert, und einen Dienst, der ihre Daten überträgt. Ein Browser, der eine Datei abruft, und ein Spiel, das Positionsaktualisierungen sendet, können dasselbe Internet nutzen und dabei unterschiedliche Entwurfsentscheidungen treffen. Verfolge einen Austausch von den Prozessen an seinen Enden über deren Sockets und vergleiche dann, was TCP, UDP und sichere Transportdienste hinsichtlich Zuverlässigkeit, Zeitverhalten, Durchsatz und Schutz bieten.
1.1 Wo Anwendungsprogramme laufen
Eine Netzwerkanwendung besteht aus Programmen, die auf Endsystemen laufen: Smartphones, Laptops und Servern. Ihre Prozesse tauschen Nachrichten über das Netz aus. Router und Switches leiten die Pakete weiter; auf ihnen muss kein neues Anwendungsprogramm installiert werden, wenn jemand einen neuen Dienst erstellt.
Zwei Arten, die Arbeit aufzuteilen
Eine Anwendungsarchitektur beschreibt, wie die Anwendung Arbeit auf Hosts verteilt. Sie ist von der Schichtenarchitektur des Netzes getrennt. Der Entwickler entscheidet, wo Programme laufen, und verlässt sich darauf, dass das bestehende Netz sie verbindet.
Bei einer Client-Server-Architektur kontaktieren Clients einen ständig eingeschalteten Server unter einer bekannten Adresse. Ein Browser fordert ein Dokument von einem Webserver an, der das Dokument zurückgibt. Andere Browser müssen für diesen Austausch nicht online sein. Ein beliebter Dienst kann seine Serverrolle auf Tausende Rechner in Rechenzentren verteilen; ein öffentlicher Name kann diese Gruppe repräsentieren. Geräte, Strom, Kühlung und Internetverbindungen kosten Geld.
Eine Peer-to-Peer-Architektur, kurz P2P, ermöglicht den direkten Datenaustausch zwischen Nutzergeräten. Ein Peer kann ein Dateistück anfordern und auch Stücke hochladen, die er bereits besitzt. Peers können die Verbindung trennen oder Adressen ändern, sodass die Anwendung verfügbare Peers finden und bei wechselnder Teilnahme weiterarbeiten muss.
| Architektur | Wer stellt die Inhalte bereit? | Was geschieht, wenn Nutzer beitreten? |
|---|---|---|
| Client-Server | Eigens dafür vorgesehene Serverhosts | Mehr Anfragen erreichen die Server des Dienstes. |
| P2P | Teilnehmende Nutzerhosts | Die Nachfrage wächst und Peers steuern Uploadkapazität bei. |
Verfolge einen Austausch
Angenommen, eine Forschungsgruppe verteilt einen großen Datensatz. Bei einer Client-Server-Architektur lädt jeder Forschende eine Kopie vom Server der Gruppe herunter. Zehn neue Forschende bedeuten zehn weitere Kopien, die dieser Server hochladen muss. Bei einer P2P-Architektur senden Forschende, die bereits einige Stücke besitzen, diese an neu Hinzukommende. Jede hinzukommende Person kann neben zusätzlicher Nachfrage auch Kapazität einbringen. Das ist Selbstskalierung: Die Ressourcen der Anwendung wachsen mit der Teilnahme.
Selbstskalierung hängt dennoch von nützlichen Beiträgen ab. Ein Peer mit einer langsamen Uploadverbindung steuert weniger Kapazität bei als einer mit einer schnellen Verbindung. Viele Anschlüsse von Privathaushalten sind asymmetrisch: Herunterladen ist schneller als Hochladen. Ein Peer, der die Verbindung trennt, trägt nichts bei, solange er offline ist. P2P-Software muss Teilnehmer außerdem vor nicht vertrauenswürdigen Peers schützen und Nutzer dazu anregen, hochzuladen, statt nur Daten zu beziehen.
Zentrale Koordination und direkte Übertragung
Eine hybride Architektur kombiniert Serverkoordination mit P2P-Datenübertragung. Ein BitTorrent-Tracker informiert einen Peer über andere Peers; er muss die Datei nicht selbst senden. Ebenso kann ein Anrufdienst Teilnehmer über einen Server finden, ihre Geräte Medien direkt austauschen lassen und eine Weiterleitung nutzen, wenn kein direkter Pfad verfügbar ist. Ordne den Pfad, über den die Daten übertragen werden, getrennt von dem Pfad ein, über den die Übertragung eingerichtet wird.
Die Wörter Client und Server beschreiben auch Rollen bei einem einzelnen Austausch. Wenn Peer Mira eine Anfrage an Peer Leo stellt, ist Mira bei diesem Austausch der Client und Leo der Server. Kurz darauf können sie die Rollen tauschen. P2P beseitigt die Abhängigkeit von eigens dafür vorgesehenen Inhaltsservern; die Rollen der anfragenden und antwortenden Seite bleiben bestehen.
Wichtige Erkenntnisse
- Anwendungsprogramme laufen auf Endsystemen; der Netzkern leitet ihre Pakete weiter.
- Client-Server-Architekturen stellen Dienstkapazität auf eigens dafür vorgesehenen Hosts bereit.
- P2P-Teilnehmer steuern neben Nachfrage auch Uploadkapazität bei.
- Eine hybride Architektur kann ein zentrales Verzeichnis nutzen, während Peers die Inhalte übertragen.
- Die Rollen von Client und Server hängen davon ab, wer den jeweiligen Austausch beginnt.
1.2 Sockets, Adressen und die Wahl des Transportdienstes
Ein laufendes Anwendungsprogramm ist ein Prozess. Prozesse auf verschiedenen Hosts tauschen Nachrichten über Sockets aus, die Softwareschnittstellen zwischen Anwendungs- und Transportschicht. Der Anwendungscode bestimmt die Bedeutung der Nachricht; der Transportdienst überträgt ihre Bytes oder Datagramme.
Den empfangenden Prozess finden
Eine IP-Adresse bezeichnet einen Host, aber auf dem Host können viele Dienste laufen. Eine Portnummer bezeichnet einen Transportendpunkt auf ihm. Um einen HTTPS-Dienst unter 203.0.113.10 zu kontaktieren, richtet ein Client seine Anfrage normalerweise an Port 443. Sein eigenes Betriebssystem weist ihm üblicherweise einen vorübergehenden, sogenannten ephemeren Quellport zu.
Ports sind 16-Bit-Werte von 0 bis 65.535. Die Systemports umfassen 0–1023, die registrierten Ports 1024–49.151 und die dynamischen Ports 49.152–65.535. Zu den gebräuchlichen Dienstports gehören HTTP 80, HTTPS 443, SMTP-Übertragung 25 und DNS 53. Ein Port ist Teil der Adressierung und sagt nicht aus, ob der Verkehr verschlüsselt oder vertrauenswürdig ist.
Die Nachrichten festlegen
Ein Anwendungsschichtprotokoll legt Nachrichtentypen, Syntax, Semantik und Austauschregeln fest. Typen unterscheiden eine Anfrage von einer Antwort. Die Syntax beschreibt Felder und Trennzeichen. Die Semantik erklärt jedem Teilnehmer, was diese Felder bedeuten. Austauschregeln bestimmen, wann ein Prozess eine Nachricht sendet und wie der Empfänger antwortet. Öffentliche Spezifikationen, häufig RFCs, ermöglichen die Kommunikation zwischen Programmen verschiedener Entwickler.
Ein Protokoll ist ein Bestandteil einer Anwendung. Das Web benötigt auch Browser, Server und Dokumente. Die Definition von HTTP allein erstellt weder einen Browser noch legt sie das Aussehen seiner Oberfläche fest.
Den Dienst passend zum Bedarf wählen
Betrachte vier Anforderungen: korrekte Übertragung, ausreichenden Durchsatz, akzeptable Verzögerung und Sicherheit. Ein E-Mail-Anhang benötigt jedes Byte. Ein Sprachanruf kann einzelne verlorene Mediendaten verkraften, leidet aber, wenn ältere Audiodaten zu spät ankommen. Ein gespeichertes Video benötigt einen anhaltenden Durchsatz nahe seiner codierten Bitrate, während ein elastischer Download die jeweils verfügbare Rate nutzen kann.
| Dienst | Was die Anwendung erhält | Was sie weiterhin selbst behandeln muss |
|---|---|---|
| TCP | Einen zuverlässigen, geordneten Bytestrom nach dem Verbindungsaufbau | Nachrichtenabgrenzung, Sicherheit und schwankende Verzögerung oder schwankenden Durchsatz |
| UDP | Einzelne Datagramme ohne Verbindungsaufbau | Verlust, Duplikate, Reihenfolge und gegebenenfalls benötigte Zuverlässigkeit |
TCP umfasst Flusskontrolle zum Schutz des Empfängers und Überlastkontrolle, um Überlastung im Netz zu verringern. Es bietet weder eine Mindestbandbreite noch eine Zustellfrist. UDP selbst ergänzt weder Zuverlässigkeit noch Überlastkontrolle. Seine Wahl beseitigt keine Überlastung auf dem Pfad.
Ein Spiel beispielsweise, das 30-mal pro Sekunde Positionen sendet, erzeugt etwa alle 33 ms eine neue Aktualisierung. Es kann UDP nutzen, damit eine verlorene Aktualisierung durch eine neuere ersetzt werden kann, ohne auf ihre erneute Übertragung zu warten. Der Chat des Spiels benötigt weiterhin zuverlässige Übertragung, ob durch TCP oder durch Zuverlässigkeitsmechanismen im eigenen Protokoll.
Sicherheit im Protokollstapel ergänzen
Weder TCP noch UDP verschlüsselt für sich genommen Anwendungsdaten. HTTP/1.1 und HTTP/2 nutzen für HTTPS gewöhnlich TLS über TCP. TLS ergänzt Vertraulichkeit, Integrität und Serverauthentifizierung. HTTP/3 nutzt QUIC über UDP; QUIC bietet Zuverlässigkeit, Überlastkontrolle und integriertes TLS 1.3. Gespeicherte Videos, die über HTTP ausgeliefert werden, nutzen daher TCP oder QUIC, während interaktive Anrufe Medien häufig über UDP übertragen.
Wichtige Erkenntnisse
- IP-Adresse und Port geben an, wo ein Prozess Netzwerkverkehr empfängt.
- Anwendungsprotokolle legen Typen, Syntax, Semantik und Austauschregeln fest.
- TCP liefert Bytes zuverlässig und geordnet, ohne garantierte Rate oder Frist.
- UDP erhält Datagramme, überlässt die Zuverlässigkeit aber höheren Schichten.
- Weder TCP noch UDP verschlüsselt Daten von sich aus.
- HTTP/3 erhält zuverlässige, sichere Datenströme von QUIC über UDP.
2Wie HTTP Webinhalte überträgt
Beim Laden einer Seite wirken Nachrichtenformate, Verbindungsaufbau und Anfragen für mehrere Objekte zusammen. Das Verhalten hängt auch davon ab, ob der Browser eine Verbindung oder Antwort wiederverwenden kann und ob die Website den Besucher wiedererkennen muss. Lies zuerst den sichtbaren HTTP-Austausch und berechne seine wichtigsten Verzögerungen. Verfolge dann, wie Cookies, Caching und neuere HTTP-Transportverfahren den Aufwand für die Auslieferung der Seite verändern.
2.1 HTTP-Nachrichten und Verbindungszeiten
Eine Webseite besteht meist aus mehreren Objekten, jedes mit einer eigenen URL. Die HTML-Basisdatei nennt Bilder, Skripte und andere Dateien. In https://www.example.org/docs/intro.html ist https das Schema, www.example.org der Host und /docs/intro.html der Pfad.
Eine Anfrage und eine Antwort lesen
HTTP arbeitet mit Anfrage-Antwort-Austauschen. Eine HTTP/1.1-Anfrage beginnt mit Methode, Pfad und Version:
GET /docs/intro.html HTTP/1.1
Host: www.example.org
Connection: close
Die Anfragezeile und die Headerzeilen enden mit CRLF. Eine Leerzeile beendet die Header, danach folgt ein optionaler Nachrichtentext. Host ist in HTTP/1.1 erforderlich, weil mehrere Websites eine Serveradresse gemeinsam nutzen können. Connection: close fordert das Schließen der Verbindung nach der Antwort an.
GET ruft ein Objekt ab. HEAD fordert dessen Antwortheader ohne den Nachrichtentext an. POST sendet Daten im Nachrichtentext einer Anfrage; ein GET kann Formularwerte auch in der Abfragezeichenkette seiner URL mitführen. PUT speichert ein Objekt unter einer angegebenen URL und DELETE entfernt eines.
Die Antwort beginnt mit einer Statuszeile wie HTTP/1.1 200 OK, gefolgt von Headern, einer Leerzeile und dem Nachrichtentext. Content-Type bezeichnet die Darstellung; Content-Length gibt deren Länge in Byte an. Die Statusklassen sind 1xx Information, 2xx Erfolg, 3xx Umleitung, 4xx Clientfehler und 5xx Serverfehler. Ein 301 verweist in Location auf eine neue URL; 304 erlaubt die Wiederverwendung einer zwischengespeicherten Kopie. Ein 404 bedeutet, dass der Server geantwortet hat, das angeforderte Objekt sei nicht gefunden worden, nicht dass der Server unerreichbar war. Weitere nützliche Codes sind 400, 500 und 505.
HTTP ist zustandslos: Jede Anfrage lässt sich ohne frühere Anfragen verstehen. Eine Website kann trotzdem oberhalb von HTTP Anmelde- oder Warenkorbzustände verwalten. Ein gewöhnliches wiederholtes GET kann das Objekt erneut zurückgeben, während eine bedingte Anfrage eine gespeicherte Kopie überprüfen kann.
Die Umlaufzeiten zählen
Für ein Objekt über eine neue TCP-Verbindung rechne eine RTT für den Verbindungsaufbau und eine für die Anfrage und den Beginn der Antwort. Addiere dann die Übertragungszeit des Objekts. Bei RTT 30 ms, Größe 500 kB und Rate 50 Mbps:
Insgesamt sind das 60 ms plus 80 ms, also 140 ms. Dieses Modell lässt DNS, TLS und Verarbeitungszeit außer Acht. Ein vollständiger TLS-1.3-Handshake über die neue TCP-Verbindung fügt eine weitere RTT hinzu.
Die Verbindung wiederverwenden oder neu öffnen
Eine nicht persistente Verbindung überträgt ein Objekt. Eine persistente Verbindung kann spätere Anfragen ohne erneuten TCP-Aufbau übertragen. Persistenz ist die Voreinstellung von HTTP/1.1, auch wenn inaktive Verbindungen irgendwann geschlossen werden.
Für ein HTML-Objekt und acht kleine Bilder, RTT 20 ms und vernachlässigbare Übertragungszeiten:
| Abrufmuster | Umlaufzeiten | Zeit |
|---|---|---|
| Neue Verbindung für jedes Objekt, nacheinander | 18 | 360 ms |
| Zuerst HTML, dann acht neue Verbindungen parallel | 4 | 80 ms |
| Eine persistente Verbindung, Anfragen nacheinander | 10 | 200 ms |
| Eine persistente Verbindung, acht Bildanfragen im Pipelining | 3 | 60 ms |
Die Bildanfragen setzen den Empfang der HTML-Datei voraus. Selbst bei parallelem Abruf können sie erst beginnen, wenn ihre URLs bekannt sind. Zähle diese voneinander abhängigen Schritte, bevor du die Handshakes zählst. HTTP/1.1-Browser nutzen häufig mehrere Verbindungen pro Host; Pipelining ist ein Zeitmodell und keine Voraussetzung für Persistenz.
Wichtige Erkenntnisse
- Beim Laden einer Seite werden die HTML-Datei und die von ihr referenzierten Objekte abgerufen.
- HTTP/1.1 trennt Startzeile, Header und optionalen Nachrichtentext durch Zeilenenden und eine Leerzeile.
- Bei einer neuen TCP-Verbindung benötigt ein Objekt vor dem zusätzlichen TLS-Aufwand etwa zwei RTTs zuzüglich Übertragungszeit.
- Persistenz spart wiederholte Verbindungsaufbauten.
- Auch parallele Anfragen warten, bis die HTML-Datei ihre URLs bekannt gibt.
- Eine 404-Antwort zeigt, dass ein HTTP-Server geantwortet hat.
2.2 Nutzer wiedererkennen und Antworten wiederverwenden
HTTP-Anfragen stehen für sich, trotzdem kann sich ein Shop einen Warenkorb merken. Ein Browser kann auch ein Bild wiederverwenden, statt es erneut herunterzuladen. Cookies unterstützen die Wiedererkennung über mehrere Anfragen hinweg; Caches ermöglichen die Wiederverwendung von Antworten.
Ein Cookie verfolgen
Beim ersten Besuch erstellt shop.example.com einen Datenbankeintrag für einen Besucher und gibt Set-Cookie: id=1678 zurück. Der Browser speichert diesen Wert. Spätere passende Anfragen enthalten Cookie: id=1678, sodass der Server den Warenkorb nachschlagen kann. Das Cookie sind Daten, kein ausführbarer Code, und der Warenkorb selbst kann in der Datenbank des Servers bleiben.
Cookie-Attribute steuern seine Verwendung. Expires oder Max-Age legt eine Lebensdauer fest; ein Cookie ohne beide ist ein Sitzungscookie. Domain und Path schränken ein, zu welchen Anfragen es passt. Secure beschränkt das Senden auf HTTPS, HttpOnly verhindert den Zugriff durch Seitenskripte und SameSite steuert das Senden im Kontext anderer Websites. Die Sitzungswiederherstellung kann Sitzungscookies erhalten, wenn ein Browser eine frühere Sitzung wiederherstellt.
Erstanbieter-Cookies gehören zur besuchten Website. Ein eingebetteter Drittanbieterdienst kann Cookies über verschiedene Websites hinweg nutzen, um einen Browser wiederzuerkennen. Safari blockiert Drittanbieter-Cookies standardmäßig; Firefox trennt sie nach Websites; Chrome bietet Nutzern Einstellungsmöglichkeiten und blockiert sie im Inkognitomodus. Die Regeln der Europäischen Union verlangen eine Einwilligung für Cookies, die zur Bereitstellung eines angeforderten Dienstes nicht unbedingt erforderlich sind.
Eine Anfrage an den Cache verfolgen
Ein Webcache speichert HTTP-Antworten. Ein Browser hat seinen eigenen Cache. Ein Caching-Proxy sitzt zwischen Clients und Ursprungsservern: Er liefert bei einem Cachetreffer direkt eine Antwort oder ruft sie bei einem Cachefehltreffer ab, speichert sie und leitet sie weiter. Er handelt gegenüber dem Browser als Server und gegenüber dem Ursprungsserver als Client. Ein Proxy kann auch ohne Caching existieren.
Ein Treffer in einem nahe gelegenen Cache verringert Verzögerung, Last am Ursprungsserver und Verkehr auf der Zugangsverbindung. Bei 90 Anfragen pro Sekunde mit durchschnittlich je 1 Mbit beträgt die angebotene Last 90 Mbps. Auf einer 100-Mbps-Zugangsverbindung beträgt die Verkehrsintensität 0,9; dabei können Warteschlangen groß werden. Eine Trefferquote von 40 % lässt 60 % über die Verbindung laufen: 54 Mbps und eine Intensität von 0,54. Wenn Treffer 10 ms und Fehlzugriffe 200 ms dauern, beträgt die durchschnittliche Antwortzeit:
Diese Verkehrsberechnung setzt für die Gruppe der Treffer und die der Fehlzugriffe dieselbe durchschnittliche Objektgröße voraus. Eine allein anhand der Anzahl der Anfragen gemessene Trefferquote muss bei unterschiedlichen Objektgrößen nicht dem Anteil der eingesparten Bytes entsprechen.
Vor der Wiederverwendung die Aktualität prüfen
Ein bedingtes GET sendet If-Modified-Since mit einem gespeicherten Änderungsdatum oder If-None-Match mit einem gespeicherten ETag. Ein unverändertes Objekt ergibt 304 Not Modified ohne Objektdaten im Nachrichtentext. Der Cache verwendet seine Kopie erneut. Ein geändertes Objekt ergibt 200 OK mit dem Ersatz. Die Prüfung spart die Übertragung des Nachrichtentexts, benötigt aber weiterhin einen Umlauf zum Ursprungsserver.
| Antwortdirektive | Bedeutung |
|---|---|
max-age=3600 | Eine Kopie kann 3.600 Sekunden lang aktuell bleiben. |
no-cache | Speichern, falls erlaubt, aber vor der Wiederverwendung prüfen. |
no-store | Die Antwort nicht speichern. |
private | Ein privater Cache darf sie speichern; gemeinsam genutzte Caches dürfen es nicht. |
Ein gemeinsam genutzter Proxy kann normalerweise die Inhalte einer HTTPS-Verbindung, die ihn durchläuft, nicht einsehen. Browsercaches und CDN-Server, die im Auftrag einer Website ausliefern, können an den Endpunkten zwischenspeichern, an denen diese Antworten in lesbarer Form vorliegen.
Wichtige Erkenntnisse
- Cookies ermöglichen einem Server, einen Browser über unabhängige HTTP-Anfragen hinweg wiederzuerkennen.
- Cookie-Attribute steuern Lebensdauer, Geltungsbereich und Zugriff.
- Ein Caching-Proxy übernimmt sowohl Client- als auch Serverrollen.
- Cachetreffer können Verzögerung und Verkehr auf der Zugangsverbindung verringern.
- Eine 304-Antwort bestätigt ein gespeichertes Objekt, ohne dessen Nachrichtentext erneut zu senden.
- no-cache verlangt eine Prüfung; no-store verbietet das Speichern.
- HTTPS beschränkt, was ein gewöhnlicher gemeinsam genutzter Proxy zwischenspeichern kann.
2.3 Frames, Datenströme und HTTP/3
HTTP-Versionen behalten die Bedeutung von Methoden, Statuscodes, Feldern und URLs bei. Ein 404 bedeutet weiterhin, dass die angeforderte Ressource nicht gefunden wurde. Was sich ändert, ist die Übertragung von Anfragen und Antworten: HTTP/1.1 nutzt Textnachrichten, während HTTP/2 und HTTP/3 binäre Frames nutzen.
Kleine Antworten vorankommen lassen
Auf einer HTTP/1.1-Verbindung können geordnete Antworten dazu führen, dass ein kleines Objekt hinter einem großen warten muss. Das ist Head-of-Line-Blocking auf Anwendungsebene. Mehrere TCP-Verbindungen zu öffnen, verkürzt diese Wartezeit, verursacht aber zusätzlichen Verbindungsaufbau und verschafft der Seite mehrere konkurrierende, überlastkontrollierte Verbindungen.
HTTP/2 teilt Nachrichten in HTTP-Frames und weist jedem Anfrage-Antwort-Austausch einen Datenstrom zu. Der Sender verschachtelt Frames verschiedener Datenströme auf einer TCP-Verbindung. Die Headerkompression HPACK verringert wiederholte Felddaten. Prioritäten können steuern, welche Antworten zuerst berücksichtigt werden.
Für einen vereinfachten Vergleich hat eine große Antwort 1.000 Frames und acht kleine haben je zwei Frames. Pro Zeitschlitz wird ein Frame gesendet. Wird die große Antwort zuerst gesendet, werden die kleinen Antworten in den Zeitschlitzen 1.002 bis 1.016 fertig, im Durchschnitt bei 1.009. Wird abwechselnd je ein Frame aus jedem noch nicht abgeschlossenen Datenstrom gesendet, werden die kleinen Antworten in den Zeitschlitzen 11 bis 18 fertig, im Durchschnitt bei 14,5. Die große Antwort wird in Zeitschlitz 1.016 fertig. Die Verschachtelung ändert die Fertigstellungszeiten, ohne die Übertragungsrate der Verbindung zu erhöhen.
HTTP/2 spezifizierte auch Server Push, bei dem Inhalte vor einer Anfrage gesendet werden. Große Browser haben es deaktiviert. Eine 103 Early Hints-Antwort weist stattdessen auf Ressourcen hin, sodass der Browser beginnen kann, sie anzufordern.
Die verbleibende Blockierung finden
TCP liefert einen geordneten Bytestrom. Fehlen Bytes, warten spätere Bytes auf die Wiederherstellung, selbst wenn sie Frames eines anderen HTTP/2-Datenstroms enthalten. HTTP/2 beseitigt die Blockierung durch die Reihenfolge der Antworten, behält aber diese Blockierung auf Transportebene bei.
HTTP/3 bildet HTTP auf QUIC ab, ein Transportprotokoll über UDP, und komprimiert Header mit QPACK. QUIC bietet zuverlässige Datenströme, Fluss- und Überlastkontrolle sowie Sicherheit durch TLS 1.3. Jeder Datenstrom hat seine eigene Auslieferungsreihenfolge. Fehlende Daten in einem Datenstrom verhindern für sich genommen nicht die Auslieferung bereits empfangener Daten in einem anderen. Gemeinsame Überlastkontrolle und Abhängigkeiten innerhalb der Anwendung können weiterhin mehrere Datenströme betreffen.
QUIC nutzt Verbindungs-IDs, damit eine Verbindung eine Änderung der IP-Adresse übersteht, etwa beim Wechsel vom WLAN zum Mobilfunk. Seine Implementierung kann mit einer Anwendungsbibliothek aktualisiert werden. So wird der langsame Verbreitungsweg von TCP-Änderungen in Betriebssystemen und Middleboxes umgangen.
Eine neue Verbindung vergleichen
Bei RTT 50 ms und ohne Aufwand für DNS oder Verarbeitung benötigen TCP und TLS 1.3 zwei RTTs, bevor die erste HTTP/2-Anfrage abgesendet wird. Eine erste Antwort beginnt nach etwa 150 ms. QUIC kombiniert Transport- und Sicherheitsaufbau in einer RTT, sodass eine HTTP/3-Antwort nach etwa 100 ms beginnen kann. Wiederaufgenommene QUIC-Verbindungen können 0-RTT-Daten nutzen, aber das Risiko eines Wiederholungsangriffs beschränkt, welche Anfragen sich gefahrlos früh senden lassen.
Browser können HTTP/3 über Alt-Svc oder DNS-HTTPS-Einträge entdecken. Ist UDP blockiert, können sie auf HTTP über TCP zurückfallen. HTTP/3 bleibt zuverlässig, weil QUIC oberhalb von UDP Zuverlässigkeit bereitstellt.
Wichtige Erkenntnisse
- HTTP-Versionen behalten die gemeinsame Bedeutung der Nachrichten bei.
- HTTP/2 verschachtelt Datenströme auf einer TCP-Verbindung.
- Ein TCP-Verlust kann weiterhin alle HTTP/2-Datenströme auf dieser Verbindung blockieren.
- QUIC bietet unabhängige geordnete Datenströme und integrierte Sicherheit über UDP.
- QUIC verkürzt den Aufbau neuer Verbindungen und unterstützt Adressänderungen durch Verbindungs-IDs.
3Wie DNS Dienste findet
Namen verbergen die wechselnden Standorte von Internetdiensten. Bevor ein Browser oder Mailserver ein Ziel kontaktiert, kann DNS eine Adresse, einen Alias oder einen Mailservernamen liefern. Verfolge einen Resolver durch die verteilte Hierarchie und untersuche dann die Einträge und Nachrichtenfelder, die er austauscht. Zwischengespeicherte Antworten beschleunigen diesen Vorgang; ihre Lebensdauer erklärt, warum eine geänderte Adresse erst nach einiger Zeit alle Nutzer erreicht.
3.1 Eine DNS-Abfrage vom Cache bis zum autoritativen Nameserver
Ein Name wie www.example.org ist für Menschen praktisch. Eine Verbindung benötigt eine IP-Adresse. Das Domain Name System, kurz DNS, ist sowohl die verteilte Datenbank der Namenseinträge als auch das Anwendungsprotokoll zu ihrer Abfrage. Es nutzt normalerweise Port 53 und arbeitet unabhängig von HTTP.
Die Namensverwaltung aufteilen
Lies www.example.org. von rechts nach links: Wurzel, org, example, dann www. Der letzte Punkt steht für die Wurzel und wird in der Alltagsschreibweise meist weggelassen. Ein zentraler Server für alle Namen würde eine Ausfallstelle, einen Verkehrsengpass und lange Pfade für entfernte Clients schaffen.
Root-Nameserver verweisen Resolver an TLD-Nameserver. TLD-Nameserver verweisen sie an die autoritativen Nameserver für Domains unterhalb der TLD. Autoritative Nameserver veröffentlichen die eigentlichen Einträge einer Domain. Die 13 benannten Serveridentitäten des Root-Dienstes sind auf viele physische Instanzen repliziert; 13 ist nicht die Anzahl der Rechner, die das weltweite DNS tragen.
Der Host sendet seine Frage normalerweise an einen lokalen Resolver, den seine Organisation, sein Internetanbieter oder ein öffentlicher Dienst bereitstellt. Dieser Resolver arbeitet im Auftrag des Hosts. Er ist keine weitere Ebene zwischen der Wurzel und der TLD in der Namenshierarchie.
Eine Namensauflösung bei leerem Cache verfolgen
Ein Laptop auf dem Campus benötigt die IPv4-Adresse von www.example.org:
- Der Laptop fragt seinen lokalen Resolver nach der endgültigen Antwort.
- Der Resolver fragt einen Root-Nameserver und erhält einen Verweis auf
.org-Server. - Er fragt einen
.org-Server und erhält einen Verweis auf die autoritativen Nameserver fürexample.org. - Er fragt einen autoritativen Nameserver und erhält
203.0.113.25. - Er gibt die Adresse an den Laptop zurück.
Es gibt vier Anfrage-Antwort-Paare, also acht Nachrichten. Die Anfrage des Hosts ist rekursiv: Beschaffe mir die Antwort. Die Anfragen des Resolvers sind iterativ: Jeder kontaktierte Server antwortet aus seinem Wissen oder verweist den Resolver weiter. Der Root-Nameserver beschafft die Adresse des Webservers nicht im Auftrag des Laptops.
Antworten bis zum Ablauf ihrer TTL wiederverwenden
Ein Ressourceneintrag enthält eine Gültigkeitsdauer, kurz TTL, die in Sekunden gemessen wird. Resolver halten wiederverwendbare Einträge in Caches, bis ihre zulässige Lebensdauer endet. Sie können sowohl Verweise als auch endgültige Adressen zwischenspeichern. Eine gespeicherte Delegation für eine TLD oder Domain ermöglicht es, bei einer späteren Namensauflösung frühere Schritte zu überspringen. Auch Betriebssysteme und Browser können Caches haben.
Bei einer RTT von 2 ms zwischen Host und Resolver und einer RTT von 30 ms für jede der drei aufeinanderfolgenden Hierarchieabfragen dauert die Namensauflösung bei leerem Cache etwa 92 ms. Eine beim Resolver zwischengespeicherte Adresse benötigt etwa 2 ms. Die Wartezeiten addieren sich, weil jeder Verweis Informationen für die nächste Anfrage liefert.
Caching verzögert auch Änderungen. Hat ein Resolver eine Adresse unmittelbar vor einer Aktualisierung mit einer TTL von einer Stunde zwischengespeichert, kann er die alte Adresse für die verbleibende Lebensdauer weiter zurückgeben. Das Absenken der TTL vor einer geplanten Änderung begrenzt diese Überschneidung; die Änderung des autoritativen Eintrags allein ersetzt nicht jede zwischengespeicherte Kopie.
DNS kann mehr als Namen in Adressen auflösen. Es unterstützt Aliase, findet Mailserver und verteilt Last, indem es mehrere Adressen für einen Dienst zurückgibt. Diese Aufgaben erklären, warum auch E-Mail-Zustellung und CDN-Auswahl von DNS abhängen.
Wichtige Erkenntnisse
- DNS ist eine verteilte Datenbank und ein Abfrageprotokoll der Anwendungsschicht.
- Root-, TLD- und autoritative Nameserver teilen die Zuständigkeit nach Namen auf.
- Ein lokaler Resolver führt die rekursive Anfrage des Hosts mithilfe iterativer Anfragen aus.
- Zwischengespeicherte Einträge und Verweise verkürzen spätere Namensauflösungen.
- Die TTL begrenzt die Speicherzeit, sodass sich Adressänderungen erst nach einiger Zeit verbreiten.
3.2 Einträge, Verweise und DNS-Antworten
DNS speichert Ressourceneinträge mit Name, Wert, Typ und TTL. Der Typ teilt dem Resolver mit, wie er den Wert deuten muss. Ein Adresseintrag, ein Alias und ein Mailservereintrag beantworten unterschiedliche Fragen zu derselben Domain.
Den Eintragstyp lesen
| Typ | Was sein Wert liefert |
|---|---|
| A | Eine IPv4-Adresse für einen Hostnamen |
| AAAA | Eine IPv6-Adresse für einen Hostnamen |
| NS | Den Namen eines autoritativen Nameservers |
| CNAME | Einen kanonischen Namen für einen Alias |
| MX | Einen Mailservernamen mit einer Präferenznummer |
| TXT | Text, einschließlich Angaben zur E-Mail-Authentifizierung |
| PTR | Einen Namen für die umgekehrte Adressauflösung |
| SOA | Administrative Angaben für eine Zone |
| HTTPS | Dienstinformationen, einschließlich unterstützter HTTP-Versionen |
Beispielsweise gibt www.example.org. 3600 IN A 203.0.113.25 den zugehörigen Namen, die TTL, die Internetklasse, den Typ und die Adresse an. Ein NS-Wert ist ein Name, keine Adresse. Ein Verweis kann einen separaten A-Eintrag mit der Adresse des Nameservers enthalten, der oft Glue-Eintrag genannt wird, wenn er zur Auflösung der Delegation benötigt wird.
Ein CNAME wie media.example.org, der auf edge.cdn.example.net zeigt, veranlasst den Resolver, die Adresse des Ziels nachzuschlagen. Ein MX-Eintrag steuert dagegen die E-Mail-Zustellung. Versuche bei den Präferenzen 10 und 20 zuerst den Mailserver mit Präferenz 10; eine größere Zahl bedeutet keine höhere Priorität.
Die Nachricht um die Einträge lesen
Anfragen und Antworten haben ein gemeinsames Format. Der 12 Byte lange Header enthält eine Identifikationsnummer, Flags und die Anzahl der Einträge in vier Abschnitten. Die Antwort übernimmt die ID der Anfrage, damit der Anfragende den Austausch zuordnen kann.
Der Frageabschnitt nennt, was angefordert wurde. Der Antwortabschnitt enthält passende Einträge. Der Autoritätsabschnitt kann NS-Verweise enthalten, während der zusätzliche Abschnitt hilfreiche Einträge wie Nameserveradressen liefert. In der Ausgabe von dig kennzeichnet qr eine Antwort, rd bedeutet, dass Rekursion angefordert wurde, und ra, dass Rekursion verfügbar ist. NOERROR meldet keinen DNS-Fehler; NXDOMAIN meldet, dass der abgefragte Name nicht existiert. Auch eine Antwort ohne Fehler kann keinen Eintrag des angeforderten Typs enthalten.
Um eine neue Domain zu veröffentlichen, registriert ein Inhaber sie und gibt die Daten ihrer autoritativen Nameserver an. Die Delegation der übergeordneten Domain leitet Anfragen an diese Server, die die eigenen Host- und Mail-Einträge der Domain veröffentlichen. Durch die Registrierung des Namens wird der Registrar nicht zum Server, der jeden Eintrag speichert.
Übertragung und Schutz
Die meisten kleinen DNS-Austausche nutzen UDP-Port 53. Bei einer gekürzten UDP-Antwort ist das TC-Flag gesetzt; der Resolver kann es über TCP-Port 53 erneut versuchen. TCP unterstützt auch Zonenübertragungen. DNS ist daher nicht auf UDP beschränkt.
Klassischer DNS-Verkehr legt abgefragte Namen für Beobachter auf seinem Pfad offen. DNS over TLS oder DNS over HTTPS verschlüsselt den Austausch zwischen Client und Resolver, üblicherweise über Port 853 beziehungsweise 443. Die Verschlüsselung dieses Austauschs und die Echtheit eines Eintrags sind getrennte Eigenschaften.
Beim Cache-Poisoning akzeptiert ein Resolver eine gefälschte Antwort und schickt Nutzer später an die falsche Adresse. Unvorhersehbare IDs und Quellports erschweren es, gefälschte Antworten passend zuzuordnen. DNSSEC ergänzt Signaturen, mit denen sich die Echtheit von Einträgen prüfen lässt; es verbirgt die Anfrage nicht. Auch Überflutungsangriffe können DNS-Server unerreichbar machen. Replikation und zwischengespeicherte Verweise verringern die Abhängigkeit vom Root-Dienst bei jeder Anfrage, aber Ausfälle bei einem viel genutzten autoritativen Anbieter können weiterhin viele Websites beeinträchtigen.
Wichtige Erkenntnisse
- Eintragstypen unterscheiden Adressen, Delegationen, Aliase und E-Mail-Routing.
- Ein NS-Eintrag nennt einen Server; ein separater Adresseintrag gibt dessen Adresse an.
- MX-Einträge mit niedrigeren Präferenznummern werden zuerst versucht.
- DNS-Antworten trennen Antworten, Autoritätsinformationen und zusätzliche Einträge.
- DNS kann sowohl TCP als auch UDP nutzen.
- Verschlüsseltes DNS schützt einen Pfad; DNSSEC prüft die Echtheit signierter Einträge.
4Wie E-Mails übertragen werden und verfügbar bleiben
Eine E-Mail kann ankommen, während das Smartphone des Empfängers ausgeschaltet ist, weil Server die Zustellung und Speicherung unabhängig von Nutzergeräten übernehmen. Verfolge den Übertragungsdialog, unterscheide den Zustellungsumschlag von den Feldern, die Lesende sehen, und untersuche, wie Anhänge in eine Nachricht passen. Vergleiche dann die Zugriffsprotokolle, mit denen Laptop, Smartphone oder Browser E-Mails abrufen und den Postfachzustand verwalten.
4.1 SMTP-Zustellung und der E-Mail-Umschlag
E-Mail trennt das Verfassen einer Nachricht von ihrer Zustellung. Ein Benutzerprogramm ist die App oder Webseite zum Lesen und Schreiben von E-Mails. Ein Mailserver speichert eingehende E-Mails in Postfächern und hält ausgehende Nachrichten in einer Warteschlange. SMTP überträgt Nachrichten zwischen Systemen.
Die Zustellung nach der Einlieferung verfolgen
Alice liefert bei ihrem eigenen Server eine Nachricht für Bob ein. Dieser Server schlägt die MX-Einträge für Bobs Domain nach, löst die Adresse des gewählten Servers auf und öffnet eine TCP-Verbindung zu Port 25. Er überträgt die Nachricht an Bobs Server, der sie in dessen Postfach speichert. Alices Server ist bei dieser Übertragung der SMTP-Client, obwohl er in einem anderen Austausch Alices Benutzerprogramm als Server bedient.
Ist das Ziel vorübergehend nicht verfügbar, behält die Ausgangswarteschlange die Nachricht für weitere Versuche. Alices Gerät kann offline gehen, während ihr Server weiterarbeitet. Nach wiederholtem Fehlschlag kann ein Unzustellbarkeitsbericht an den Absender im Umschlag zurückgehen.
Den Dialog lesen
SMTP nutzt Textbefehle und numerische Antworten. Hier ist ein verkürzter Zustellungsdialog; C: und S: bezeichnen die beiden Seiten und werden nicht als Teil jedes Befehls übertragen.
S: 220 mail.example.net ready
C: EHLO mail.example.org
S: 250 mail.example.net
C: MAIL FROM:<alice@example.org>
S: 250 OK
C: RCPT TO:<bob@example.net>
S: 250 OK
C: DATA
S: 354 Send message
C: From: Alice <alice@example.org>
C: To: Bob <bob@example.net>
C: Date: Tue, 03 Mar 2026 10:02:44 +0100
C: Subject: Lab report
C:
C: The report is ready.
C: .
S: 250 Message accepted
C: QUIT
S: 221 Closing
Mit EHLO stellt sich der sendende Host vor. MAIL FROM legt den Absender im Umschlag fest; jedes RCPT TO nennt einen Empfänger im Umschlag. DATA beginnt die Nachricht und eine Zeile, die nur einen Punkt enthält, beendet sie. Eine Verbindung kann mehr als eine Nachricht übertragen. Antwortklassen unterscheiden Erfolg (2xx), die Aufforderung zu weiterer Eingabe (3xx), vorübergehenden Fehler (4xx) und dauerhaften Fehler (5xx). Eine 4xx-Antwort verlangt einen späteren erneuten Versuch; ein 5xx-Fehler erfordert eine andere Behandlung, oft eine Unzustellbarkeitsmeldung.
Zustelladressen und angezeigte Felder unterscheiden
Der SMTP-Umschlag steuert die Zustellung. Die Felder From: und To: innerhalb der Nachricht werden den Lesenden angezeigt. Sie können sich vom Umschlag unterscheiden. Ein Bcc-Empfänger kann in RCPT TO erscheinen, ohne in den sichtbaren Nachrichtenheadern zu stehen. Für die Antwort auf eine Nachricht und für die Meldung eines Zustellfehlers muss nicht dieselbe Adresse verwendet werden.
Ein Nutzer liefert E-Mails normalerweise über authentifiziertes SMTP an Port 587 mit STARTTLS oder an Port 465 mit TLS von Anfang an ein. Die Übertragung zwischen Servern nutzt normalerweise Port 25 und kann STARTTLS aushandeln. Einlieferung und Übertragung haben unterschiedliche Aufgaben, auch wenn beide SMTP nutzen. HTTP ruft im Allgemeinen angeforderte Objekte ab; SMTP überträgt eine vorbereitete Nachricht aktiv.
Die Domain des Absenders prüfen
Ein sichtbares From:-Feld lässt sich leicht fälschen. SPF prüft, ob der sendende Host für die Domain im Umschlag autorisiert ist. DKIM prüft eine Nachrichtensignatur mit einem in DNS veröffentlichten öffentlichen Schlüssel. DMARC verknüpft ein erfolgreiches SPF- oder DKIM-Ergebnis durch Domainübereinstimmung mit der sichtbaren From-Domain und veröffentlicht eine Richtlinie für Fehlschläge. Ein erfolgreiches SPF-Ergebnis für eine nicht zugehörige Domain im Umschlag bestätigt allein nicht den sichtbaren Absender.
Wichtige Erkenntnisse
- SMTP überträgt Nachrichten aktiv über TCP zwischen Mailservern.
- Warteschlangen ermöglichen Servern erneute Versuche, während Nutzergeräte offline sind.
- Der SMTP-Umschlag steuert die Zustellung; Nachrichtenheader bestimmen, was Lesende sehen.
- Die Einlieferung nutzt häufig authentifiziertes SMTP an Port 587 oder 465.
- Vorübergehende und dauerhafte SMTP-Fehler erfordern unterschiedliche Reaktionen.
- DMARC verlangt ein erfolgreiches SPF- oder DKIM-Ergebnis mit passender Domain, nicht bloß ein beliebiges erfolgreiches SPF-Ergebnis.
4.2 Nachrichteninhalt und Lesen eines Postfachs
E-Mail-Übertragung, Nachrichteninhalt und Postfachzugriff sind getrennte Teile von E-Mail. SMTP überträgt eine Nachricht zu einem Mailserver. Die Nachricht hat ihr eigenes Format mit Header und Nachrichtentext; ein Empfänger greift später über ein anderes Protokoll auf das gespeicherte Postfach zu.
Die Nachricht selbst lesen
Eine Nachricht beginnt mit Feldern wie From:, To:, Date:, Subject: und Message-ID:. Eine Leerzeile trennt diese Header vom Nachrichtentext. Sie bleiben Teil der gespeicherten Nachricht; die SMTP-Befehle MAIL FROM und RCPT TO werden nicht zu Nachrichtenheadern.
Das Grundformat nutzt Textzeilen. MIME, Multipurpose Internet Mail Extensions, beschreibt vielfältigere Inhalte mit zusätzlichen Feldern. Content-Type: text/plain; charset=UTF-8 beschreibt reinen Text und seine Zeichencodierung. image/jpeg bezeichnet ein Bild. multipart/mixed beschreibt mehrere Teile, die durch eine Trennzeichenkette voneinander abgegrenzt sind, etwa eine Textnotiz gefolgt von einem Anhang. Jeder Teil kann seinen eigenen Inhaltstyp und seine eigene Übertragungscodierung haben.
Content-Transfer-Encoding beschreibt, wie ein Teil für die Übertragung dargestellt wird. Base64 wandelt jede Gruppe von drei Bytes in vier ASCII-Zeichen um. Bei einem Anhang von 3 MB werden aus 3.000.000 Byte vor Zeilenumbrüchen und Nachrichtenheadern 4.000.000 Zeichen. Die Codierung erhöht die Größe um etwa ein Drittel. Die Gesamtgrößenbeschränkung eines Servers für Nachrichten lässt sich daher nicht allein mit der Rohgröße des Anhangs vergleichen. Quoted-Printable ist eine weitere Codierung, die sich für überwiegend lesbaren Text eignet.
Ein E-Mail-Zugriffsprotokoll wählen
Der Server des Empfängers kann E-Mails empfangen, während dessen Geräte offline sind. Wenn der Empfänger zurückkehrt, ermöglicht ein E-Mail-Zugriffsprotokoll einem Client, gespeicherte Nachrichten abzurufen.
| Zugriffsmethode | Wo der Postfachzustand liegt | Auswirkung auf mehrere Geräte |
|---|---|---|
| IMAP | Nachrichten, Ordner und Kennzeichnungen bleiben auf dem Server. | Geräte können dieselbe Ordnung und denselben Lesestatus nutzen. |
| POP3 | Ein Client lädt Nachrichten herunter und kann sie vom Server löschen. | Herunterladen und Löschen kann E-Mails für ein anderes Gerät unzugänglich machen. |
| Webmail | Ein Browser kommuniziert über HTTPS mit dem E-Mail-Dienst. | Der Dienst verwaltet das Postfach hinter der Weboberfläche. |
IMAP kann die Header oder ausgewählte Teile einer Nachricht abrufen, ohne jeden Anhang herunterzuladen. Es nutzt gewöhnlich Port 143 mit STARTTLS oder Port 993 mit TLS von Anfang an. POP3 nutzt üblicherweise Port 110 oder TLS an Port 995. Seine Löschmarkierungen werden wirksam, wenn die Sitzung normal endet. Beim Herunterladen und Behalten bleiben Kopien auf dem Server, aber POP3 bietet weder die Serverordner noch die gemeinsamen Kennzeichnungen von IMAP.
Angenommen, Bob prüft seine E-Mails auf einem Laptop, bevor er das Haus verlässt, und danach auf einem Smartphone. Nutzt der Laptop POP3 zum Herunterladen und Löschen, findet das Smartphone möglicherweise ein leeres Serverpostfach vor. Bei IMAP ändert das Markieren einer Nachricht als gelesen auf dem Laptop den Serverzustand, den auch das Smartphone sehen kann. Der Unterschied liegt in der Postfachsynchronisation, nicht in der SMTP-Zustellung.
Eine Webmail-Nachricht über den Browser hinaus verfolgen
Ein Browser liefert E-Mails über HTTPS ein oder liest sie darüber. Der Webmail-Anbieter nutzt weiterhin SMTP, um E-Mails zum Server einer anderen Domain zu übertragen. Ein vollständiger Weg kann daher über HTTPS vom Sender zum Anbieter, SMTP zwischen den Anbietern und anschließend IMAP oder HTTPS auf der Empfängerseite führen. Die Bezeichnung Webmail beschreibt die Benutzeroberfläche und die Browserverbindung eines Dienstes, nicht jedes Protokoll auf dem Weg der Nachricht.
Wichtige Erkenntnisse
- Nachrichtenheader gehören zur Nachricht und sind von SMTP-Befehlen getrennt.
- MIME beschreibt Inhaltstypen, Trennzeichen für mehrteilige Inhalte und Übertragungscodierungen.
- Base64 vergrößert Anhangsdaten vor weiterem Zusatzaufwand um etwa ein Drittel.
- IMAP synchronisiert serverseitige Nachrichten, Ordner und Kennzeichnungen.
- POP3 im Modus „Herunterladen und Löschen“ kann Nachrichten entfernen, bevor ein anderes Gerät sie liest.
- Webmail nutzt HTTPS am Browser und ist zwischen Mailservern weiterhin auf SMTP angewiesen.
5Dateien verteilen und Videos streamen
Ein großes Publikum erzeugt unterschiedliche Engpässe für einen einzelnen Server, eine Gruppe von Peers und verteilte Caches. Beginne mit den Upload- und Downloadbeschränkungen bei der Dateiverteilung und untersuche dann, wie BitTorrent diese Arbeit aufteilt. Setze bei Videos die codierte Rate und Segmentdownloads zum Wiedergabepuffer in Beziehung und verfolge, wie ein CDN Inhalte platziert und Nutzer zu Servern leitet, die sie effizient ausliefern können.
5.1 Dateiverteilung und BitTorrent
Eine Datei zu verteilen bedeutet, dass jeder Empfänger eine vollständige Kopie erhalten muss. Der Engpass ist nicht immer der Server: Ein langsamer Empfänger oder eine unzureichende gesamte Uploadkapazität kann die Mindestdauer bestimmen. Das Standardmodell setzt voraus, dass die Zugangsverbindungen die Engpässe sind und der Netzkern genügend Kapazität hat.
Die unteren Schranken vergleichen
Die Datei enthalte Bit und es gebe Empfänger. Der Server lädt mit hoch; Peer lädt mit hoch und mit herunter. Die niedrigste Downloadrate der Peers ist . Verwende zueinander passende Einheiten wie Mbit und Mbps, damit die Division Sekunden ergibt.
Bei der Client-Server-Verteilung muss der Server Bit senden und der langsamste Peer Bit empfangen:
Bei P2P muss der Server jedes Bit mindestens einmal einspeisen. Die Peers müssen weiterhin die Datei herunterladen und das gesamte System muss genügend Daten für alle Kopien hochladen:
Nimm das Maximum, weil während der Verteilung alle Anforderungen erfüllt werden müssen. Die Terme zu addieren würde fälschlich voraussetzen, dass diese Upload- und Downloadvorgänge nacheinander stattfinden. Dies sind untere Schranken; Protokollaufwand, nicht verfügbare Peers und andere Engpässe können reale Übertragungen verlangsamen.
Einen Vergleich durchrechnen
Verwende für eine Datei von 2 Gbit den Wert 2.000 Mbit. Der Server lade mit 100 Mbps hoch, der langsamste Download betrage 20 Mbps und jeder der 100 Peers lade mit 5 Mbps hoch.
Der Serverterm bei Client-Server ist 200.000 Mbit dividiert durch 100 Mbps, also 2.000 s. Der Term für den langsamsten Download beträgt 100 s. Die Schranke beträgt daher 2.000 s.
Bei P2P dauert das Einspeisen der Datei mindestens 20 s. Der langsamste Download dauert weiterhin 100 s. Die gesamte Uploadkapazität beträgt 100 plus 500, also 600 Mbps; die Verteilung von 200.000 Mbit dauert mindestens etwa 333 s. Die P2P-Schranke beträgt etwa 333 s. Bei 1.000 Peers steigt die Client-Server-Schranke auf 20.000 s, während die P2P-Schranke etwa 392 s beträgt. Bei gleichen Uploadraten der Peers nähert sich der Term für die Gesamtkapazität mit wachsender Peerzahl der Dateigröße dividiert durch die Uploadrate eines Peers.
Dateistücke in BitTorrent tauschen
Ein Torrent ist eine Gruppe, die eine Datei teilt. Peers tauschen Dateistücke, finden Nachbarn über einen Tracker oder eine verteilte Hashtabelle und können bereits vor Abschluss des Downloads hochladen. Ein Seeder besitzt die vollständige Datei und teilt sie weiter.
Rarest First wählt ein benötigtes Stück aus, das die wenigsten Nachbarn besitzen. Das hilft, Stücke zu erhalten, die sonst verschwinden könnten, wenn ein Peer ausscheidet. Es entscheidet, was angefordert wird. Das Gegenseitigkeitsprinzip fördert nützlichen Austausch, indem es Nachbarn bevorzugt, die schnell Daten liefern; es entscheidet, für wen hochgeladen wird.
Im ursprünglichen Entwurf ist die Sperre für jeweils vier interessierte Nachbarn aufgehoben, darunter einer durch versuchsweises Aufheben der Sperre. Die reguläre Auswahl wird etwa alle 10 s und der versuchsweise gewählte Peer etwa alle 30 s überprüft. Dieser Platz zum Erkunden gibt neuen Teilnehmern eine Möglichkeit, erste Stücke zu erhalten, und hilft, bessere Partner zu finden. Der Tracker koordiniert die Suche; er ist nicht die Datenquelle für jedes Stück.
Wichtige Erkenntnisse
- Die Client-Server-Verteilung wird durch den Serverupload und den langsamsten Download begrenzt.
- P2P hängt außerdem vom Einspeisen der Datei und der gesamten Uploadkapazität des Systems ab.
- Nimm das Maximum gleichzeitig geltender Beschränkungen, nicht ihre Summe.
- P2P skaliert, weil neue Peers Uploadkapazität beitragen.
- Rarest First wählt Dateistücke; das Gegenseitigkeitsprinzip wählt Uploadpartner.
- Das versuchsweise Aufheben einer Sperre gibt neuen oder noch nicht erprobten Peers eine Chance zum Austausch.
5.2 Adaptives Streaming und Änderungen im Puffer
Ein Video besteht aus Bildern, die über die Zeit angezeigt werden. Kompression entfernt wiederholte Informationen innerhalb eines Bildes (räumliche Redundanz) und zwischen Bildern (zeitliche Redundanz). Das codierte Ergebnis hat eine Bitrate: die Datenmenge, die für jede Sekunde Videowiedergabe benötigt wird.
Rate, Größe und Wiedergabedauer verknüpfen
Ein zweistündiges Video mit 5 Mbps enthält 36.000 Mbit oder 4,5 GB. Multipliziere die Rate mit der Dauer, um Bit zu erhalten, und dividiere dann durch acht für Byte. Liegt der durchschnittliche Durchsatz des Pfades unter der gewählten Videorate, leert sich bei fortgesetzter Wiedergabe irgendwann jeder endliche Puffer.
Ein Wiedergabegerät kann beginnen, bevor das ganze Video heruntergeladen ist. Es speichert kommende Daten in einem Puffer, der hier in Sekunden abspielbaren Videos gemessen wird. Die Wiedergabe verbraucht den Puffer, während Downloads ihn auffüllen. Ein größerer Anfangspuffer schützt vor Durchsatzeinbrüchen, erhöht aber die Startverzögerung.
Jeweils ein Segment anfordern
DASH, Dynamic Adaptive Streaming over HTTP, speichert mehrere codierte Versionen mit unterschiedlichen Raten und teilt jede in Segmente. Ein Manifest führt verfügbare Versionen und Segment-URLs auf. Der Client fordert ein Segment mit HTTP GET an und wählt an der nächsten Segmentgrenze erneut eine Version. HLS nutzt einen ähnlichen Ansatz mit Wiedergabelisten.
Das Wiedergabegerät trifft die Anpassungsentscheidung anhand des gemessenen Durchsatzes und des Pufferfüllstands. Ein hoher aktueller Schätzwert für den Durchsatz spricht für eine höhere Rate; ein niedriger Pufferfüllstand verlangt Vorsicht. Die höchste einmal erreichte Rate zu wählen, kann eine Unterbrechung verursachen, wenn der nächste Download langsamer wird. Wiedergabegeräte versuchen auch, häufige, störende Qualitätswechsel zu vermeiden.
Den Download eines Segments berechnen
Betrachte 4 s lange Segmente, die mit 1, 2,5, 5 und 8 Mbps codiert sind. Bei einem gemessenen Durchsatz von 6 Mbps enthält das Segment mit 5 Mbps 20 Mbit. Es wird in etwa 3,33 s heruntergeladen und fügt 4 s abspielbaren Inhalt hinzu, während die Wiedergabe etwa 3,33 s verbraucht. Bei fortlaufender Wiedergabe wächst der Puffer um etwa 0,67 s.
Ein Segment mit 8 Mbps enthält 32 Mbit und benötigt etwa 5,33 s, sodass der Puffer um etwa 1,33 s schrumpft. Die 6 Mbps des Pfades sind eine Übertragungsrate; sie machen aus einer Codierung mit 8 Mbps keine mit 6 Mbps.
Fällt der Durchsatz auf 3 Mbps, benötigt dasselbe Segment mit 5 Mbps etwa 6,67 s. Der Puffer verliert pro Segment etwa 2,67 s. Der Wechsel zur Version mit 2,5 Mbps ergibt ein Segment von 10 Mbit, das etwa 3,33 s benötigt, sodass der Puffer wieder wachsen kann. Für eine unterbrechungsfreie Wiedergabe während eines Downloads muss der Anfangspuffer außerdem reichen, bis neue abspielbare Daten verfügbar sind.
Gespeicherte Streams und interaktive Anrufe
Das Streaming gespeicherter Videos nutzt gewöhnliche HTTP-Objekte, die Browsercaches und CDN-Server ausliefern können. Es läuft daher je nach HTTP-Version über TCP oder QUIC. Interaktive Anrufe nutzen häufig Medienübertragung auf UDP-Basis, weil das Warten auf ältere Mediendaten schlechter sein kann als deren Verlust.
Ein Liveereignis kann ebenfalls segmentiertes HTTP-Streaming nutzen, aber das Wiedergabegerät wartet darauf, dass jedes Segment erzeugt wird, und hält einen Puffer mit Abstand zum Livegeschehen. Kürzere Segmente können diese Verzögerung verringern, erhöhen aber die Anzahl der Anfragen. Ein Sprung zu einer ungepufferten Stelle erfordert ebenfalls ein erneutes Auffüllen des Puffers, was die Qualität kurzzeitig senken kann.
Wichtige Erkenntnisse
- Die codierte Bitrate misst die pro Wiedergabesekunde benötigten Daten.
- Die Größe eines Segments ist seine Dauer multipliziert mit seiner codierten Rate.
- Die Pufferänderung bei fortlaufender Wiedergabe ist die Segmentdauer abzüglich der Downloadzeit.
- DASH-Clients wählen Versionen anhand von Durchsatzschätzungen und Pufferfüllstand.
- Gespeicherte HTTP-Videos nutzen TCP oder QUIC; interaktive Anrufe haben andere Anforderungen an das Zeitverhalten.
5.3 CDN-Platzierung und Weiterleitung von Anfragen
Ein Content Delivery Network, kurz CDN, liefert Kopien von Inhalten von vielen Standorten aus. Es vermeidet, jeden Zuschauer an ein einziges entferntes Rechenzentrum zu verweisen, und verringert wiederholte Übertragungen über große Entfernungen. Die Verteilung der Dienstkapazität verringert außerdem die Abhängigkeit von einem Standort.
Inhalte nahe bei den Nutzern platzieren
Ein privates CDN gehört einem Anbieter; ein Drittanbieter-CDN bedient viele Kunden. Beide können neben Videos auch Bilder, Skripte, Software und Webseiten ausliefern. Die ursprüngliche Inhaltsquelle ist der Ursprungsserver. CDN-Cluster halten Kopien vor, damit der Ursprungsserver nicht jede Anfrage bearbeiten muss.
Es gibt zwei nützliche Platzierungsstrategien:
| Strategie | Platzierung | Abwägung |
|---|---|---|
| Enter Deep | Viele kleinere Cluster innerhalb der Netze von Zugangsanbietern | Kurze Pfade zu Nutzern, aber viele zu wartende Standorte |
| Bring Home | Weniger große Cluster an Internetaustauschknoten | Einfachere Verwaltung, aber längere Pfade für manche Nutzer |
Platzierung und Befüllung mit Inhalten sind getrennte Entscheidungen. Beim Pull-Verfahren holt ein Cluster ein fehlendes Objekt vom Ursprungsserver oder einem anderen Cluster, speichert es und liefert es aus. Beim Push-Verfahren sendet der Anbieter Objekte im Voraus, häufig zu wenig ausgelasteten Zeiten. Die erste Anfrage an ein Pull-CDN für ein nicht zwischengespeichertes Objekt kann weiterhin vom Ursprungsserver abhängen.
Eine DNS-Übergabe verfolgen
Ein Nutzer fordert https://video.stream.example.com/v/6Y7B23V an:
- Der Resolver des Nutzers fragt nach
video.stream.example.com. - Der autoritative Server des Anbieters gibt einen CNAME in den Namensraum des CDN zurück, etwa
a1105.cdn.example.net. - Der Resolver folgt diesem Namen zum autoritativen DNS-Dienst des CDN.
- Das CDN wählt einen Cluster und gibt eine Adresse wie
198.51.100.17zurück. - Der Client verbindet sich über HTTPS mit diesem Server und fordert den Inhalt an.
Der CNAME verändert, wo die Namensauflösung fortgesetzt wird. DNS gibt Namensinformationen zurück; die Videobytes kommen anschließend über HTTP. Sind die Inhalte segmentiert, folgen viele gewöhnliche Segmentanfragen demselben grundlegenden Pfad zu einem ausgewählten Server.
Einen geeigneten Standort wählen
Der auf einer Karte nächste Cluster kann einen schlechten Netzwerkpfad haben oder überlastet sein. Eine DNS-basierte Entscheidung sieht möglicherweise den Standort des Resolvers, der weit vom Nutzer entfernt sein kann. Eine bessere Auswahl kann gemessene Verzögerung und Verluste, die aktuelle Last und manchmal Informationen über das Netz des Clients berücksichtigen.
IP-Anycast bietet einen weiteren Weg zu einem nahe gelegenen Dienst: Mehrere Standorte geben dieselbe IP-Adresse bekannt und das Internetrouting wählt einen Pfad zu einem von ihnen. Welcher Standort erreicht wird, hängt vom Routing ab und nicht allein von der räumlichen Entfernung. Ein Server nahe am Zuschauer kann trotzdem schlechte Videoqualität liefern, wenn die Zugangsverbindung des Zuschauers selbst der Engpass ist.
Netflix Open Connect platziert Geräte innerhalb der Netze von Internetanbietern und verbindet sie an Austauschstandorten. Inhalte werden vor der Nachfrage bereitgestellt, was den vorgelagerten Datenverkehr zu Spitzenzeiten verringert. Die Anwendungsdienste und die Auslieferung codierter Videos müssen nicht auf derselben Infrastruktur laufen. Andere private CDN-Architekturen können Caches bei Bedarf füllen. In jedem Fall steuert adaptives Streaming, welche Rate das Wiedergabegerät anfordert, während das CDN mitbestimmt, über welchen Pfad und von welchem Server diese Anfragen bedient werden.
Wichtige Erkenntnisse
- Ein CDN verteilt Kopien und Auslieferungskapazität auf mehrere Standorte.
- Enter Deep und Bring Home wägen Pfadlänge gegen den Aufwand für die Standortverwaltung ab.
- Pull befüllt bei Bedarf; Push befüllt vor den Anfragen.
- Ein DNS-CNAME kann die Namensauflösung an ein CDN übergeben.
- Die Clusterauswahl hängt neben der Geografie auch von Netzwerkleistung und Last ab.
- CDNs und adaptives Streaming kümmern sich um unterschiedliche Teile der Videoauslieferung.
6Programmieren mit UDP- und TCP-Sockets
Ein Socket-Programm macht das Transportverhalten sichtbar: Ein Datagramm kommt als eine Nachricht an, während ein TCP-Empfang die jeweils verfügbaren Bytes zurückgibt. Programmiere mit beiden Transportprotokollen einen kleinen Textdienst und verfolge, woher der Server das Ziel seiner Antwort kennt. Ergänze dann die TCP-Version um Nachrichtenabgrenzung und sende eine echte HTTP-Anfrage. So verbindest du Pythons Socket-Aufrufe mit den dahinterliegenden Protokollaustauschen und Fehlerfällen.
6.1 Ein UDP-Dienst in Python
Python-Sockets senden Bytes. Codiere eine Zeichenkette vor dem Senden und decodiere die empfangenen Bytes anschließend; die standardmäßige Textcodierung ist UTF-8. AF_INET wählt IPv4 und SOCK_DGRAM UDP. Beginne mit einem lokalen Dienst, damit beide Prozesse die Loopback-Adresse 127.0.0.1 nutzen können.
Den Empfänger zuerst starten
Dieser Server verarbeitet kurze Textdatagramme und antwortet in Großbuchstaben:
from socket import socket, AF_INET, SOCK_DGRAM
with socket(AF_INET, SOCK_DGRAM) as server:
server.bind(("127.0.0.1", 12000))
while True:
data, client_addr = server.recvfrom(2048)
reply = data.decode().upper().encode()
server.sendto(reply, client_addr)
bind weist dem Socket seine Empfangsadresse und seinen Port zu. Die Bindung an 127.0.0.1 akzeptiert nur lokalen Verkehr. Die leere Adresszeichenkette "" bindet dagegen an alle IPv4-Schnittstellen und macht den Dienst von anderen Hosts aus erreichbar, wenn das Netz es zulässt. Stoppe den laufenden Server, bevor du eine weitere Kopie am selben Endpunkt startest.
recvfrom blockiert, bis ein Datagramm eintrifft. Der Aufruf gibt die Daten und die Adresse des Senders einschließlich seines Ports zurück. Der Server nutzt dieses zurückgegebene Paar als Ziel von sendto und kann so Clients antworten, deren ephemere Ports er nicht im Voraus kannte.
Eine Anfrage senden und die Wartezeit begrenzen
from socket import socket, AF_INET, SOCK_DGRAM
with socket(AF_INET, SOCK_DGRAM) as client:
client.settimeout(2.0)
client.sendto(b"hello network", ("127.0.0.1", 12000))
try:
data, server_addr = client.recvfrom(2048)
print(data.decode())
except TimeoutError:
print("No reply within 2 seconds")
Das Präfix b erzeugt ein Bytes-Literal; "hello network".encode() erzeugt dieselben Bytes. Das Betriebssystem weist den lokalen Port des Clients bei Bedarf zu. Die erwartete Antwort ist HELLO NETWORK. Keines der beiden Programme ruft listen oder accept auf, weil UDP keinen Transportverbindungsaufbau hat.
Eine fehlende Antwort sagt dem Client nicht genau, was fehlgeschlagen ist. Die Anfrage oder Antwort kann verloren gegangen sein oder es lauscht kein Server. Das Zeitlimit ermöglicht der Anwendung, die Kontrolle zurückzugewinnen. Manche Systeme können einen geschlossenen Zielport als Fehler melden; Windows kann beim Empfang ConnectionResetError auslösen.
Datagrammgrenzen beachten
Jeder Empfang verarbeitet ein Datagramm. Zwei Datagramme werden nicht zu einer Nachricht zusammengefasst. Ist der Empfangspuffer zu klein, wird der überstehende Teil des Datagramms auf typischen Unix-Systemen verworfen; Windows kann stattdessen einen Fehler melden. Ein weiterer Empfang stellt den fehlenden Rest nicht wieder her. Wähle einen Puffer, der für die erwarteten Nachrichten der Anwendung groß genug ist.
Die IPv4-UDP-Nutzlast ist bei einem IPv4-Header der Mindestgröße auf 65.507 Byte begrenzt. Das ist ein Protokollmaximum und keine sinnvolle Zielgröße für gewöhnliche Datagramme. Ein Programm, das Verluste erkennen muss, kann Nachrichten nummerieren, Sendezeiten mit time.perf_counter() festhalten und Zeitüberschreitungen zählen. Zwei Zeitüberschreitungen bei zehn Anfragen ergeben eine gemessene Verlustrate von 20 %. Das Wiederholen einer Anfrage kann eine doppelte Verarbeitung verursachen. Ein Entwurf mit Zeitlimit und Wiederholung benötigt daher möglicherweise auch eine Möglichkeit, wiederholte Nachrichtennummern zu erkennen.
Wichtige Erkenntnisse
- SOCK_DGRAM erstellt einen UDP-Socket; encode und decode wandeln zwischen Bytes und Text um.
- bind wählt den Empfangsendpunkt; Loopback beschränkt den Zugriff auf denselben Host.
- recvfrom liefert die für eine Antwort benötigte Absenderadresse.
- Ein Zeitlimit begrenzt das Warten, nennt aber nicht die Ursache fehlender Daten.
- Ein zu kleiner Empfangspuffer kann den Rest eines UDP-Datagramms verlieren.
6.2 Ein TCP-Dienst mit vollständigen Nachrichten
TCP gibt dem Programm einen geordneten Bytestrom. Es erhält die Grenzen von sendall-Aufrufen nicht. Ein vollständiger kurzer Test kann in einem recv ankommen, aber ein korrektes Programm muss auch eine auf mehrere Empfangsvorgänge verteilte Anfrage behandeln.
Eine Textanfrage abgrenzen
Wähle einen Zeilenumbruch als Trennzeichen. Der Client sendet eine UTF-8-Zeile und der Server gibt eine Zeile in Großbuchstaben zurück. Dieser Server liest bis zu diesem Trennzeichen, bevor er decodiert:
from socket import socket, AF_INET, SOCK_STREAM
with socket(AF_INET, SOCK_STREAM) as server:
server.bind(("127.0.0.1", 12000))
server.listen(5)
while True:
conn, client_addr = server.accept()
with conn:
data = b""
while b"\n" not in data:
chunk = conn.recv(1024)
if not chunk:
break
data += chunk
if b"\n" in data:
line = data.split(b"\n", 1)[0]
conn.sendall(line.decode().upper().encode() + b"\n")
listen erstellt einen lauschenden Socket. accept gibt einen neuen Verbindungssocket und die Adresse des Clients zurück. Verwende conn für die Bytes dieses Clients; der ursprüngliche Socket bleibt verfügbar, um weitere Verbindungen anzunehmen. Hier werden Clients einzeln bedient. Der Backlog von fünf betrifft ausstehende Verbindungen, nicht fünf aktive Arbeitsthreads.
Die Clientseite vervollständigen
from socket import create_connection
with create_connection(("127.0.0.1", 12000), timeout=2) as client:
client.sendall(b"hello network\n")
data = b""
while b"\n" not in data:
chunk = client.recv(1024)
if not chunk:
raise EOFError("Reply ended before its newline")
data += chunk
print(data.split(b"\n", 1)[0].decode())
Das erwartete Ergebnis ist HELLO NETWORK. sendall sendet weiter, bis alle übergebenen Bytes übergeben wurden oder ein Fehler auftritt. Ein einzelnes send sendet möglicherweise nur einen Teil und meldet, wie viele Bytes es angenommen hat. Keiner der beiden Aufrufe übermittelt dem Empfänger Nachrichtengrenzen der Anwendung.
Dieser Dienst akzeptiert eine Zeile pro Verbindung. Ein persistenter Dienst mit mehreren Nachrichten würde Bytes nach dem ersten Zeilenumbruch für seine nächste Nachricht behalten. Längenpräfixe und das Schließen der Senderichtung sind weitere Möglichkeiten zur Nachrichtenabgrenzung. Der Empfang von b"" bedeutet, dass der Peer seine Senderichtung beendet hat; es ist kein leerer Datenblock, bei dem weiter versucht werden sollte zu lesen.
Den Code mit realen Protokollen verbinden
Auch eine HTTP/1.1-Anfrage ist eine Folge von Bytes:
from socket import create_connection
request = ("GET / HTTP/1.1\r\n"
"Host: example.com\r\n"
"Connection: close\r\n\r\n")
with create_connection(("example.com", 80), timeout=5) as sock:
sock.sendall(request.encode("ascii"))
chunks = []
while True:
chunk = sock.recv(4096)
if not chunk:
break
chunks.append(chunk)
print(b"".join(chunks).decode(errors="replace")[:200])
Dies zeigt den Anfang der rohen Antwort einschließlich Status und Headern. Ein Server kann einen Fehler oder eine Umleitung zurückgeben; der Code setzt keinen bestimmten Nachrichtentext voraus. HTTPS an Port 443 benötigt eine TLS-Umhüllung mit Zertifikats- und Hostnamenprüfung, nicht nur eine geänderte Portnummer. Beispielsweise umhüllt ssl.create_default_context().wrap_socket(sock, server_hostname="example.com") nach import ssl einen verbundenen Socket. Eine abgelehnte Verbindung bedeutet häufig, dass kein Server lauscht; bei stillschweigend verworfenem Verkehr kann ein Zeitlimit ablaufen. Für schnelle Serverneustarts unter Unix kann das Setzen von SO_REUSEADDR vor bind die Wiederverwendung erlauben, während eine alte Verbindung abgebaut wird; es erlaubt nicht, dass zwei aktive lauschende Sockets denselben Endpunkt belegen. Nebenläufige Server nutzen Threads oder Ereignisschleifen und unterscheiden Verbindungen anhand beider Adress-Port-Paare der Endpunkte.
Wichtige Erkenntnisse
- accept gibt einen Verbindungssocket zurück, der vom lauschenden Socket getrennt ist.
- TCP-Nachrichten benötigen eine Abgrenzung und Empfangsschleifen.
- sendall behandelt partielle Sendevorgänge; recv kann weiterhin Teildaten zurückgeben.
- Ein leerer TCP-Empfang signalisiert das Ende der Senderichtung des Peers.
- Eine HTTP/1.1-Anfrage benötigt CRLF-Zeilenenden und die abschließende Leerzeile.
- HTTPS benötigt neben Port 443 auch TLS.
- Ein Backlog steuert ausstehende Verbindungen, nicht die Nebenläufigkeit der Anwendung.
Anwendungsschicht: Beispiele
1Wähle eine Anwendungsarchitektur und einen Transportdienst
9 Schritte
- 1EinführungBeginne mit den Programmen
Ein Netzwerkdienst besteht aus Programmen an den Enden des Netzes. Stell dir vor, ein Forschungsdatensatz soll an eine wachsende Gruppe verteilt werden: Jemand muss die Daten finden, senden und empfangen. Verfolge diese Aufgaben, um Client-Server- und P2P-Architekturen zu vergleichen, und entscheide dann, was die Prozesse von ihrem Transportdienst benötigen.
- 2ErklärungLege die Inhalte auf eigens vorgesehenen Servern ab
In einer Client-Server-Architektur fordern Clients Daten von einem ständig verfügbaren Dienst unter einer bekannten Adresse an. Der Dienst kann viele Rechner hinter einem Namen nutzen, aber der Anbieter stellt weiterhin diese Auslieferungskapazität bereit. Lädt jeder Forschende eine vollständige Kopie vom Dienst herunter, bedeuten mehr Forschende mehr Uploadarbeit für dessen Server. Router übertragen die Pakete, ohne die Dateiaustauschanwendung auszuführen.
- 3BeispielLass Teilnehmer Uploads beisteuern
In einer P2P-Architektur kann ein Forschender, der einige Stücke erhalten hat, sie an einen anderen senden, bevor die ganze Datei vollständig ist. Ein beitretender Peer bringt zusätzliche Nachfrage, aber auch mögliche Uploadkapazität mit. Darin liegt der Ursprung der Selbstskalierung. Eine langsame Uploadverbindung, ein nicht verbundener Peer oder ein Peer, der nicht teilen möchte, schwächt den Vorteil. Deshalb sind die Suche nach Peers, Verfügbarkeit und Anreize wichtig.
- 4HerausforderungOrdne den Pfad der Dateiübertragung ein
Ein Verzeichnis führt auf, wer einen Datensatz besitzt. Anschließend tauschen Forschende dessen Stücke direkt aus. Ist jede Dateiübertragung Client-Server und wer ist der Client, wenn ein Peer ein Stück anfordert?
---reveal---
Der Gesamtentwurf ist hybrid: serverbasierte Suche und Datenübertragung zwischen Peers. Der Peer, der die Anfrage nach dem Stück stellt, ist bei diesem Austausch der Client; der antwortende Peer übernimmt die Serverrolle.
- 5ErklärungFinde einen Empfangsendpunkt
Ein Prozess nutzt einen Socket, um auf die Transportschicht zuzugreifen. Das Ziel benötigt sowohl eine Host-IP-Adresse als auch einen Port: Die IP-Adresse erreicht den Host und der Port unterscheidet den empfangenden Dienst. Für einen HTTPS-Dienst unter
203.0.113.10ist Port 443 üblich. Der Client kann einen vom Betriebssystem zugewiesenen ephemeren Quellport nutzen, sodass die beiden Enden nicht dieselbe Portnummer verwenden müssen. - 6BeispielEntscheide, welche Verzögerung zählt
Ein Spiel sendet 30-mal pro Sekunde eine neue Position, etwa alle 33 ms. Die Wiederherstellung einer alten Aktualisierung kann weniger nützlich sein als das Reagieren auf die nächste, sodass UDP zu diesem Verkehr passen kann. Eine heruntergeladene Konfigurationsdatei muss vollständig sein und benötigt daher zuverlässige Übertragung. Diese Entscheidung betrifft Bedeutung und Zeitverhalten der Daten; die Wahl von UDP beseitigt für sich genommen weder Überlastung auf dem Pfad noch reserviert sie Bandbreite.
- 7VerbindungErgänze die fehlenden Dienste
TCP liefert zuverlässige, geordnete Bytes, Flusskontrolle und Überlastkontrolle, aber weder Verschlüsselung noch eine Frist. TLS kann seinen Verkehr schützen. UDP liefert Datagramme und erhält deren Grenzen, überlässt aber Verluste und Reihenfolge höheren Schichten. HTTP/3 erhält zuverlässige Datenströme und TLS 1.3 durch QUIC über UDP. Bestimme den vollständigen Protokollstapel, bevor du den Dienst anhand seines niedrigsten sichtbaren Protokolls beurteilst.
- 8HerausforderungEntwirf einen sicheren Austausch zwischen Peers
Zwei Peers müssen ein vollständiges vertrauliches Dokument austauschen. Einer nimmt Kontakt auf und die Übertragung nutzt UDP ohne zusätzliche Dienste. Welche Rollen haben sie bei diesem Austausch und welche Dienste benötigt dieser Entwurf noch?
---reveal---
Der Kontakt aufnehmende Peer ist der Client und der antwortende Peer der Server dieses Austauschs. UDP allein bietet weder vollständige geordnete Übertragung noch Vertraulichkeit. Der Entwurf benötigt Zuverlässigkeit und Sicherheit oberhalb von UDP oder einen Protokollstapel, der diese bietet.
- 9ZusammenfassungVerfolge die Rollen, bevor du den Transport wählst
Wenn du einen Entwurf beurteilst, verfolge zuerst, wer den Inhalt sendet und wer nur dabei hilft, ihn zu finden. Bestimme dann den Empfangsendpunkt und die Dienste, die der Inhalt benötigt: korrekte Übertragung, ausreichenden Durchsatz, rechtzeitiges Eintreffen und Schutz. Diese Entscheidungen erklären sowohl die Anwendungsarchitektur als auch die Eignung eines Transportstapels. Ein Socket verbindet den Prozess mit diesem gewählten Dienst.
2Lies und verbessere einen HTTP-Austausch
15 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungVerfolge das Laden einer Seite
- 2BeispielLies den Aufbau der Anfrage
- 3ErklärungTrenne Aufbau und Übertragung
- 4BeispielSchließe die Zeitberechnung ab
- 5HerausforderungZähle die voneinander abhängigen Schritte
- 6ErklärungErkenne einen wiederkehrenden Browser
- 7BeispielWähle den Pfad bei Treffer oder Fehlzugriff
- 8ErklärungPrüfe ohne erneute Übertragung des Objekts
- 9HerausforderungSage die zweite Anfrage voraus
- 10ErklärungVerschachtle Antwort-Frames
- 11KernaussageFinde die Blockierung unterhalb von HTTP
- 12BeispielVergleiche den Aufbau neuer sicherer Verbindungen
- 13TippHalte Bedeutung und Transport auseinander
- 14HerausforderungUntersuche eine HTTP/3-Anfrage mit Cache
- 15ZusammenfassungBestimme, welcher Aufwand entfällt
3Verfolge und lies eine DNS-Abfrage
11 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungFinde einen Dienst vor der Kontaktaufnahme
- 2ErklärungBeginne beim lokalen Resolver
- 3BeispielFolge jedem Verweis
- 4BeispielAddiere die Wartezeiten
- 5HerausforderungSage die Wirkung einer Adressänderung voraus
- 6ErklärungWähle die Frage nach dem richtigen Eintrag
- 7BeispielLies die Abschnitte der Antwort
- 8VerbindungHalte Schutzziele auseinander
- 9HerausforderungInterpretiere einen Mailverweis
- 10HerausforderungVerbinde Caching mit dem richtigen Eintrag
- 11ZusammenfassungPrüfe, was jeder Name bezeichnet
4Verfolge eine E-Mail von der Einlieferung bis zum Lesen
11 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungTrenne Übertragung und Lesen
- 2ErklärungÜbergib die Arbeit an einen Ausgangsserver
- 3BeispielGib SMTP seinen Umschlag
- 4KernaussageUnterscheide die angezeigten Adressen
- 5HerausforderungErkläre den verborgenen Empfänger
- 6VerbindungAuthentifiziere die richtige Domain
- 7ErklärungStelle einen Anhang dar
- 8BeispielHalte den Postfachzustand auf dem Server
- 9HerausforderungWähle den Zugriff für zwei Geräte
- 10HerausforderungVerfolge eine Webmail-Nachricht von Ende zu Ende
- 11ZusammenfassungOrdne jedes Symptom seinem Schritt zu
5Analysiere die Auslieferung von Dateien und Videos
16 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungFinde die begrenzende Ressource
- 2ErklärungZähle die Kopien, die ein Server hochlädt
- 3ErklärungAddiere die Beiträge der Peers
- 4BeispielBerechne die verfügbare Kapazität
- 5BeispielVergleiche alle gleichzeitig geltenden Beschränkungen
- 6HerausforderungBeseitige den richtigen Engpass
- 7VerbindungWähle Dateistücke und Uploadpartner
- 8ErklärungMiss abspielbare Sekunden
- 9BeispielRechne ein Segment in Bit um
- 10BeispielReagiere auf sinkenden Durchsatz
- 11HerausforderungPrüfe den Puffer vor der Ankunft
- 12ErklärungPlatziere Kopien entlang kürzerer Pfade
- 13BeispielÜbergib die Namensauflösung an ein CDN
- 14HerausforderungWähle nach Leistung, nicht nur nach Karte
- 15HerausforderungVerbinde einen CDN-Treffer mit Anpassung
- 16ZusammenfassungOrdne Verbesserungen den Beschränkungen zu
6Programmiere und untersuche einen Socket-Austausch
14 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungMache das Transportverhalten sichtbar
- 2BeispielErstelle und binde einen UDP-Socket
- 3BeispielEmpfange ein Datagramm und sende es zurück
- 4TippBegrenze das Warten auf eine Antwort
- 5HerausforderungSage die Folge eines zu kleinen Empfangspuffers voraus
- 6ErklärungNimm eine TCP-Verbindung an
- 7BeispielBeobachte eine aufgeteilte Nachricht
- 8BeispielSammle Bytes bis zum Trennzeichen
- 9HerausforderungBehalte Bytes für die nächste Nachricht
- 10TippSende jedes Antwortbyte
- 11VerbindungSchreibe eine HTTP-Anfrage als Bytes
- 12ErklärungTrenne wartende Verbindungen von Arbeitsthreads
- 13HerausforderungUntersuche zwei wartende Programme
- 14ZusammenfassungPrüfe Endpunkte, Bytes und Vollständigkeit
Anwendungsschicht: Übungsaufgaben
Set 1: DNS-Einträge und der Weg einer E-Mail10 Übungsfragen
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Frage 2 von 10
assets.example.net CNAME edge.cdn.example.org. Der Resolver hat keine Adresse für das Ziel. Welche Information muss er beschaffen, bevor der Client eine Verbindung über IPv4 herstellen kann?Antwort zeigenAntwort ausblenden
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Frage 7 von 10
RCPT TO:<archive@example.net> angenommen, aber ihr sichtbares To:-Feld nennt team@example.net. Welche Adresse steuert diese angenommene Zustellung?Antwort zeigenAntwort ausblenden
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Frage 9 von 10
From: help@example.org, nutzt einen Absender im Umschlag bei mailer.example.net, besteht SPF für example.net und hat keine gültige DKIM-Signatur. Warum führt der SPF-Erfolg nicht zu einer erfolgreichen DMARC-Prüfung für die angezeigte Domain?Antwort zeigenAntwort ausblenden
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Set 2: Prozesse, HTTP und Entscheidungen bei der Namensauflösung10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
/handbook.pdf 404 Not Found zurück. Was hat dieser Austausch ergeben?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Cache-Control: no-cache, bevor eine gespeicherte Antwort wiederverwendet wird?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 3: Inhaltsauslieferung und Socket-Verhalten10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
192.0.2.44, 53018). Wohin sollte er die Antwort auf diese Anfrage senden?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
recv(1024)-Operation einer durch Zeilenumbruch begrenzten Anfrage b"part". Was muss er tun, bevor er diese Anfrage als vollständig behandelt?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 4: Verfolge Fehler und korrigiere Überlegungen zu Protokollen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
accept() an einen lauschenden TCP-Server zurück?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
If-None-Match: "r9" und der Ursprungsserver gibt 304 Not Modified zurück. Wie sollte ein Cache die Anfrage bedienen?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
b"red\nblu" und dann b"e\n". Welche Verarbeitung erhält beide Anfragen korrekt?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 5: Engpässe, Abhängigkeiten und Entwurfsentscheidungen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
example.org NS ns.example.org und einen zusätzlichen A-Eintrag mit der Adresse dieses Nameservers, aber keinen A-Eintrag für lab.example.org. Was muss er tun, um den Lab-Host zu finden, und warum?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
sendall eine durch Zeilenumbruch begrenzte Anfrage und wartet dann bei offener Verbindung auf eine Antwort. Der Server wartet vor seiner Antwort auf EOF. Warum können beide Programme unbegrenzt warten und welche dazu passende Änderung behebt das?Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe
Schlüsselbegriffe
A
A-Eintrag
AAAA-Eintrag
Anwendungsschichtprotokoll
Autoritativer Nameserver
B
Backlog
Base64
Bedingte GET-Anfrage
Binden
Bitrate
Bring Home
C
Cache-Control
Cache-Poisoning
Cachetreffer
Caching-Proxy
CDN
Client-Server-Architektur
CNAME-Eintrag
Cookie
D
DASH
Datagramm
Datenstrom
DKIM
DMARC
DNS
DNSSEC
E
E-Mail-Warteschlange
Elastische Anwendung
Endsystem
Enter Deep
ETag
G
Gültigkeitsdauer (TTL)
H
Head-of-Line-Blocking
HTTP-Frame
HTTP-Methode
HTTP-Objekt
HTTP/2
HTTP/3
HttpOnly
Hybride Architektur
I
IMAP
IP-Anycast
L
Lauschender Socket
Loopback-Adresse
M
Manifest
MIME
MX-Eintrag
N
Nachpuffern
Nachrichtenabgrenzung
NS-Eintrag
O
Optimistic Unchoke
P
Partieller Sendevorgang
Peer-to-Peer-Architektur
Persistente Verbindung
POP3
Portnummer
Prozess
Pull-Verfahren
Q
QUIC
R
Rarest First
Resolver
Ressourceneintrag
Root-Nameserver
S
Seeder
Selbstskalierung
SMTP
SMTP-Umschlag
Socket
SPF
STARTTLS
Statuscode
T
TCP
TLD-Nameserver
TLS
Torrent
U
UDP
Umlaufzeit
Untere Schranke
Ursprungsserver
UTF-8
V
Verbindungssocket
Verteilungsdauer
Videosegment
W
Webcache
Webmail
Wiedergabepuffer
Z
Zeitüberschreitung
Zustandslosigkeit
#
0-RTT-Daten
Über diese Einheit
Erstelle deine eigenen Lernmaterialien
Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.