--- marp: true theme: gaia paginate: true backgroundColor: #fff header: "Grundlagen IT- und Internettechnik (223015c)" footer: "Michael Czechowski – HdM Stuttgart – SoSe 2026" title: "Kapitel 2: Netzwerke, Protokolle & CSS" --- ![bg fit opacity:0.2](./assets/background-termin-2.png) # Grundlagen IT- und Internettechnik **223015c** · Modul "Technik 1" · 1. Semester Digital- und Medienwirtschaft Hochschule der Medien Stuttgart **Sommersemester 2026** [https://librete.ch/hdm/223015c/](https://librete.ch/hdm/223015c/) --- ![bg fit](./assets/qr/slides-223015c.png) --- # Kapitel 2 ## Netzwerke, Protokolle & CSS --- # Agenda **Teil 1: Netzwerke & Protokolle** - Glossar: Die wichtigsten Begriffe - Das Schichtenmodell: Wie das Internet organisiert ist - Die Reise eines Klicks: Was passiert bei einem Seitenaufruf? **Teil 2: CSS** - Grundlagen, Selektoren, Spezifität - Box-Modell, Farben, Einheiten --- # Ressourcen zum Selbstlernen * **CODE CRISPIES: https://codecrispi.es/** * Online Code-Editor: https://codepen.io/pen/ * MDN (Mozilla Developer Network): https://developer.mozilla.org/de/ * Flexbox-Spiel: https://flexboxfroggy.com/ * Grid-Spiel: https://cssgridgarden.com/ --- # Teil 1: Netzwerke & Protokolle ## Die Infrastruktur des Webs --- # Glossar: Die Landkarte Das Web folgt dem **Client-Server-Modell**: Ein Client (Browser) sendet einen **Request**, ein Server liefert eine **Response** – nach den Regeln eines **Protokolls**. | Begriff | Was ist das? | |---------------|--------------------------------------------------------------------------| | **Host** | Ein netzwerkfähiger Rechner (Laptop, Smartphone, Display in S-Bahn etc.) | | **Client** | Host bzw. Anwendung mit einer Anfrage (bspw. Browser) | | **Server** | Host bzw. Anwendung mit der Antwort (bspw. Webserver) | | **Request** | Die Anfrage des Clients | | **Response** | Die Antwort des Servers | | **Protokoll** | Regeln für Kommunikation (z. B. TCP, HTTP) | --- # Glossar: Adressen & Identitäten Jedes Gerät im Netz braucht Adressen: eine **IP** (Internet Protocol) für das globale Routing, eine **MAC** (Media Access Control) für das lokale Netz und einen **Port** für das richtige Programm. | Begriff | Was ist das? | Beispiel | |---------|--------------|----------| | **IP-Adresse** | Globale Adresse im Internet | `212.132.79.37` | | **MAC-Adresse** | Hardware-Adresse der Netzwerkkarte | `aa:bb:cc:dd:ee:ff` | | **Port** | Nummer eines Programms bzw. Dienstes | `80`, `443`, `22` | | **DNS** | Telefonbuch: Name → IP | hdm-stuttgart.de → IP | | **Domain** | Menschenlesbarer Name | `hdm-stuttgart.de` | --- # Glossar: Daten unterwegs Daten werden Schicht für Schicht verpackt — jede Schicht fügt einen eigenen **Header** hinzu und erzeugt so eine neue Dateneinheit. | Begriff | Was ist das? | Schicht | |-------------|-------------------------------------------------------|--------------------------| | **Payload** | Die eigentlichen Nutzdaten (bspw. Request, Response) | Anwendung | | **Header** | Metadaten vor und nach dem Payload | Jedes Layer | | **Segment** | Payload + TCP-Header (Anwendungsport) | Transport (Layer 3) | | **Paket** | Payload + IP-Header (WLAN-Router) | Internet (Layer 2) | | **Frame** | Payload + MAC-Header (Netzwerkkarte) | Netzzugang (Layer 1) | | **Bit** | Abfolge von Signalen (Licht, Strom, Kabel, Mobilfunk) | Netzzugang (Layer 1) | --- # Glossar: Netzwerk-Eigenschaften **Latenz** und **Bandbreite** bestimmen, wie schnell Daten ankommen — Latenz misst die Verzögerung, Bandbreite die Kapazität. | Begriff | Was ist das? | Einheit | |----------------|-------------------------------------------------|--------------------| | **Latenz** | Verzögerung (hin + zurück) | Millisekunden (ms) | | **Bandbreite** | Datenmenge pro Zeiteinheit | Mbit/s | | **Hop** | Ein Sprung zum nächsten Router (im Internet) | – | | **Round-Trip** | Hin- und Rückweg | – | | **Ping** | Client sendet "ping", bekommt von Server "pong" | ms | --- # Glossar: Protokolle Protokolle regeln die Kommunikation auf jeder Schicht — von der Anwendung (HTTP) über den Transport (TCP/UDP) bis zum Routing (IP). | Protokoll | Wofür? | Port | Schicht | |-----------|--------------------------------|------|---------------------| | **HTTP** | Webseiten + Inhalte übertragen | 80 | Anwendung (Layer 4) | | **HTTPS** | HTTP + Verschlüsselung | 443 | Anwendung (Layer 4) | | **DNS** | Namen → IP-Adressen | 53 | Anwendung (Layer 4) | | **TCP** | Zuverlässige Übertragung | – | Transport (Layer 3) | | **UDP** | Schnelle Übertragung | – | Transport (Layer 3) | | **IP** | Routing durchs Internet | – | Internet (Layer 2) | HTTP(S) = Hypertext Transfer Protocol (Secure) · DNS = Domain Name System · TCP = Transmission Control Protocol · UDP = User Datagram Protocol · IP = Internet Protocol --- # Das Schichtenmodell ## Warum ist Netzwerk-Kommunikation in Schichten organisiert? --- # Das Problem: Komplexität ![bg right:40% fit](./assets/demos/network-chain.png) Zwischen Klick und fertiger Webseite liegen viele Stationen. Jede Schicht spricht eine andere Sprache: - Browser → **HTTP** - Netzwerkkarte → **Bit und Signale** - Router → **IP-Pakete** - Provider → **Routing** Diese Sprachen müssen zusammenspielen. --- # Die Lösung: Arbeitsteilung Statt dass jedes Programm alles können muss, teilen sich mehrere Schichten die Aufgaben. | Wer? | Aufgabe | Typische Geräte | |------|---------|-----------------| | **Browser/Anwendung** | Was will ich? | Laptop, Handy, Server | | **TCP/UDP** | Kommt alles an? | – (Software) | | **IP** | Welcher Rechner? | Router, Firewall | | **Ethernet/WLAN** | Nächstes Gerät? | Switch, Access Point | | **Physik** | Signale übertragen | Kabel, Glasfaser, Antenne | --- # Das TCP/IP-Modell | Schicht | Name | Aufgabe | Protokolle | |---------|------|------------------------------------------|-------------------| | **4** | Anwendung | Dienste steuern, Daten austauschen etc. | HTTP, DNS, SMTP | | **3** | Transport | Zuverlässige Verbindung aufbauen (Ports) | TCP, UDP | | **2** | Internet | Routing, global eindeutige Adressen | IP | | **1** | Netzzugang | Lokale Übertragung | Ethernet, WLAN | Jede Schicht hat genau eine Aufgabe und nutzt nur die Schicht direkt darunter. Die oberste Schicht ist die **Anwendungsschicht** — die Ebene eurer Programme (Browser, Mail). Sie nutzt die unteren Schichten, ohne deren Details zu kennen: genau die Abstraktion, die ihr bereits kennt. SMTP = Simple Mail Transfer Protocol --- # TCP/IP-Modell – Vertiefung Das TCP/IP-Modell entstand praktisch aus dem ARPANET (1970er), im Gegensatz zum theoretischen OSI-Modell (Open Systems Interconnection, 7 Schichten, 1984). TCP/IP hat sich durchgesetzt, weil es das reale Internet beschreibt. **Schicht-Aufgaben im Detail:** | Schicht | Frage | Protokolle | Geräte | |---------|-------|------------|--------| | 4 Anwendung | Was will ich? | HTTP, DNS, SMTP, FTP | – (Software) | | 3 Transport | Kommt es an? Welches Programm? | TCP, UDP | – (Software) | | 2 Internet | Welcher Rechner weltweit? | IP, ICMP | Router | | 1 Netzzugang | Wie zum Nachbarn? | Ethernet, WLAN, PPP | Switch, Access Point | **OSI vs. TCP/IP:** - OSI Schicht 5–7 (Session, Presentation, Application) → TCP/IP Schicht 4 - OSI Schicht 1–2 (Physical, Data Link) → TCP/IP Schicht 1 **Warum Schichten?** Abstraktion. HTTP muss nicht wissen, ob Ethernet oder WLAN verwendet wird. Änderungen in einer Schicht betreffen andere nicht. FTP = File Transfer Protocol · ICMP = Internet Control Message Protocol · PPP = Point-to-Point Protocol --- # Schichten verpacken Daten ![bg right:52% fit](./assets/demos/encap-layers.png) **Encapsulation:** Jede Schicht verpackt die Daten der darüberliegenden Schicht. **Decapsulation:** Beim Empfang packt jede Schicht ihren Teil wieder aus. --- # Dateneinheiten pro Schicht | Schicht | Name | Dateneinheit | Was kommt hinzu? | |---------|------|--------------|------------------| | Anwendung | HTTP, DNS | **Daten** | – | | Transport | TCP, UDP | **Segment** | Ports, Sequenznummern | | Internet | IP | **Paket** | IP-Adressen | | Netzzugang | Ethernet | **Frame** | MAC-Adressen, Prüfsumme | Beim Senden wandern Daten von oben nach unten — jede Schicht verpackt die darüberliegende Einheit mit einem eigenen Header. --- # Dateneinheiten & Encapsulation – Vertiefung **Encapsulation** (Verkapselung): Jede Schicht fügt ihren Header hinzu, ohne den Inhalt der oberen Schicht zu verändern. **Was jeder Header enthält:** | Schicht | Einheit | Header-Inhalte | |---------|---------|----------------| | Anwendung | Daten | HTTP-Header, Cookies, Content-Type | | Transport | Segment | Quell-/Zielport, Sequenznummer, Flags (SYN = Synchronize, ACK = Acknowledge) | | Internet | Paket | Quell-/Ziel-IP, TTL (Time To Live), Protokoll (TCP=6, UDP=17) | | Netzzugang | Frame | Quell-/Ziel-MAC, EtherType, CRC-Prüfsumme (Cyclic Redundancy Check) | **Overhead-Rechnung (1 Byte HTTP-Body):** - Ethernet: 14 + 4 Byte (Header + Trailer) - IP: 20 Byte (ohne Optionen) - TCP: 20 Byte (ohne Optionen) - **Minimum: 58 Byte für 1 Byte Nutzlast** **Decapsulation:** Empfänger packt in umgekehrter Reihenfolge aus. Jede Schicht prüft ihren Header (z.B. CRC) und reicht Nutzdaten nach oben. --- # Vorteile der Schichtung **Ohne Schichten:** Jede Anwendung müsste wissen, wie Ethernet-Frames gebaut werden, wie WLAN funktioniert und wie Router Pakete weiterleiten. **Mit Schichten:** Die Anwendungsschicht (z.B. der Browser) fordert nur die Seite an. Alles Weitere übernehmen die Schichten darunter. **Austauschbarkeit:** Wechselt WLAN zu Ethernet, ändert sich nur Schicht 1. Löst HTTP/2 die Version HTTP/1 ab, ändert sich nur Schicht 4. --- # OSI vs. TCP/IP ![bg right:48% fit](./assets/demos/osi-tcpip-diagram.png) OSI (7 Schichten) ist ein theoretisches Referenzmodell — TCP/IP (4 Schichten) beschreibt das reale Internet. --- # Die drei Adressen ## IP, MAC und Port im Zusammenspiel --- # IP-Adresse: Das Endziel ``` 212.132.79.37 ``` - **Global eindeutig** (im gesamten Internet) - Identifiziert einen **Rechner** - **Bleibt gleich** auf dem gesamten Weg Router lesen die Ziel-IP und leiten das Paket in die passende Richtung weiter. --- # MAC-Adresse: Der nächste Schritt ``` aa:bb:cc:dd:ee:ff ``` - **Lokal eindeutig** (nur im lokalen Netzwerk relevant) - Identifiziert eine **Netzwerkkarte** - **Ändert sich bei jedem Hop** Sie funktioniert nur innerhalb eines Netzwerksegments. --- # Port: Das richtige Programm ![bg right:35% fit](./assets/demos/port-highlight.png) Ein Port identifiziert ein bestimmtes **Programm** (bzw. einen Dienst) auf einem Rechner. - **80** → HTTP - **443** → HTTPS - **22** → SSH (Secure Shell) - **53** → DNS --- # IP vs. MAC vs. Port Drei Adresstypen arbeiten zusammen — nur die **MAC-Adresse** ändert sich unterwegs, IP und Port bleiben auf dem gesamten Weg gleich. | | IP-Adresse | MAC-Adresse | Port | |---|-----------|-------------|------| | **Frage** | Welcher Rechner? | Welches Gerät nebenan? | Welches Programm? | | **Reichweite** | Global | Lokal (1 Hop) | Auf einem Rechner | | **Ändert sich?** | Nein | Ja, bei jedem Hop | Nein | | **Schicht** | Internet (IP) | Netzzugang (Ethernet) | Transport (TCP/UDP) | | **Beispiel** | 212.132.79.37 | aa:bb:cc:dd:ee | 443 | --- # IP, MAC, Port – Vertiefung Drei Adressebenen lösen drei verschiedene Probleme: **Port (Schicht 3 – Transport):** - 16 Bit → 65.535 mögliche Ports - Well-Known Ports (0–1023): HTTP=80, HTTPS=443, SSH=22 - Ephemeral Ports (49152–65535): Dynamisch für Client-Verbindungen **IP-Adresse (Schicht 2 – Internet):** - Hierarchisch aufgebaut: Netzwerk-Teil + Host-Teil - Router lesen nur den Netzwerk-Teil für Routing-Entscheidungen - IPv4: 32 Bit (z.B. 192.168.1.1), IPv6: 128 Bit **MAC-Adresse (Schicht 1 – Netzzugang):** - 48 Bit, vom Hersteller fest vergeben (theoretisch) - Erste 24 Bit = OUI (Organizationally Unique Identifier) = Hersteller - Nur relevant für den **nächsten Hop** – wird bei jedem Router ersetzt - ARP (Address Resolution Protocol) übersetzt IP → MAC **Nur die MAC-Adresse ändert sich unterwegs:** Die IP bezeichnet das Endziel und bleibt konstant, die MAC nur den jeweils nächsten Hop und wird an jedem Router ersetzt. --- # Die Reise eines Klicks ## Was passiert, wenn ihr `www.hdm-stuttgart.de` aufruft? --- # Das Szenario Ihr seid im WLAN der HdM und ruft auf: ``` https://www.hdm-stuttgart.de ``` Zwischen Enter und fertiger Seite vergehen rund 200 Millisekunden. In dieser Zeit passieren hunderte Operationen. --- # Die Zeitlinie ![h:560 center](./assets/demos/timeline.png) --- # Schritt 1: DNS ## "Wo wohnt hdm-stuttgart.de?" --- # DNS: Das Telefonbuch des Internets **D**omain **N**ame **S**ystem ``` www.hdm-stuttgart.de → 212.132.79.37 ``` Euer Laptop arbeitet die Quellen der Reihe nach ab: 1. **Browser-Cache** prüfen → kein Eintrag 2. **OS-Cache** prüfen → kein Eintrag 3. **Router/Provider:** DNS-Server anfragen --- # Die DNS-Hierarchie ![bg right:45% fit](./assets/demos/dns-tree.png) DNS ist **dezentral** organisiert: Kein Server kennt alle Namen. Jede Ebene verweist nur auf die Ebene darunter: - Root → TLDs (Top-Level-Domains: .de, .com, .org) - .de → autoritative Server jeder .de-Domain - hdm-stuttgart.de → www, mail, … --- ![bg fit](./assets/demos/dns-lookup.png) --- # DNS ist selbst Netzwerk Die DNS-Anfrage ist ein gewöhnliches Paket: | Eigenschaft | Wert | |-------------|------| | **Protokoll** | UDP (meistens) | | **Port** | 53 | | **Inhalt** | "A-Record für www.hdm-stuttgart.de?" | DNS durchläuft alle Schichten – genau wie später HTTP. --- # Nach dem DNS-Lookup **Ergebnis:** ``` www.hdm-stuttgart.de = 212.132.79.37 ``` Diese Information wird gecached (für Minuten bis Stunden). Der nächste Schritt ist der Verbindungsaufbau. --- # Schritt 2: TCP-Handshake ## "Hallo Server, bist du da?" --- # Zweck des Handshakes TCP ist **verbindungsorientiert**: - Beide Seiten müssen bereit sein - Beide kennen die Sequenznummern des anderen - Verlorene Pakete können erkannt und neu angefordert werden **Analogie:** Telefonat: Klingeln → Abheben → Gespräch beginnt --- ![bg fit](./assets/demos/tcp-handshake.png) --- # 3-Way-Handshake – Vertiefung Der Handshake synchronisiert **Sequenznummern** – essenziell für TCPs Zuverlässigkeit. **Warum zufällige Startwerte (ISN)?** - Sicherheit: Verhindert Session-Hijacking durch Raten - Eindeutigkeit: Unterscheidet alte von neuen Verbindungen - ISN = Initial Sequence Number, vom OS zufällig gewählt **TCP-Flags im Handshake:** | Paket | Flags | Bedeutung | |-------|-------|-----------| | 1 | SYN | Client will Verbindung, sendet seine ISN | | 2 | SYN+ACK | Server akzeptiert, sendet seine ISN, bestätigt Client-ISN+1 | | 3 | ACK | Client bestätigt Server-ISN+1 | **Was passiert bei Problemen?** - Kein SYN-ACK → Client wiederholt SYN (Timeout) - SYN-Flood-Attacke: Millionen SYNs ohne ACK → Server-Ressourcen erschöpft - Schutz: SYN-Cookies (Server speichert keinen State bis ACK kommt) **Verbindungsabbau:** 4-Way-Handshake (FIN = Finish → ACK → FIN → ACK) oder RST (Reset) für sofortigen Abbruch. --- # Nach dem Handshake **Status:** Die TCP-Verbindung steht. ![bg right:42% fit](./assets/demos/client-server-ports.png) Erst jetzt kann HTTP übertragen werden. --- # Schritt 3: HTTP-Request ## "Gib mir die Startseite" --- # Was euer Browser sendet ```http GET / HTTP/2.0 Host: www.hdm-stuttgart.de User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept: text/html Accept-Language: de-DE Connection: keep-alive ``` Der Request umfasst rund 200 Byte Text. **GET** ruft Daten ab (im Gegensatz zu **POST**, das Daten sendet). **/** bezeichnet die Startseite. --- # Encapsulation in Aktion ## Der Request wird verpackt --- # Layer 4: Transport (TCP) HTTP-Request wird zum **Segment**: ![w:900 center](./assets/demos/tcp-segment.png) **Neu:** Ports + Sequenznummer --- # Layer 3: Network (IP) Segment wird zum **Paket**: ![w:900 center](./assets/demos/ip-packet.png) **Neu:** IP-Adressen --- # Layer 2: Data Link (Ethernet) Paket wird zum **Frame**: ![w:900 center](./assets/demos/ethernet-frame.png) **Wichtig:** Destination MAC = **Router**, nicht Server! --- # Router-MAC per ARP ermitteln **ARP** – Address Resolution Protocol ![w:900 center](./assets/demos/arp-lookup.png) Das geschieht automatisch. Die Information wird gecached. --- # Layer 1: Physical Frame wird zu **Bit** – Bit werden zu Signalen: | Medium | Signal | |--------|--------| | Kupferkabel | Spannung: High/Low | | Glasfaser | Licht: An/Aus | | WLAN | Funkwellen | ``` 01001000 01010100 01010100 01010000 ... ``` Ab Schicht 1 erfolgt die Übertragung physikalisch. --- # Die Reise durch das Netz ## Hop für Hop --- # Der erste Hop: Euer Router **Laptop** → [Frame] → **Router** Der Router verarbeitet das Frame in drei Schritten: 1. **Layer 1:** Signale werden zu Bit. 2. **Layer 2:** Frame und MAC-Adresse werden geprüft, dann ausgepackt. 3. **Layer 3:** Die Ziel-IP liegt außerhalb des lokalen Netzes. **Routing-Entscheidung:** Das Paket geht Richtung Internet weiter. --- # Der Router verpackt neu ![w:900 center](./assets/demos/ethernet-rehop.png) **IP bleibt gleich. MAC ändert sich.** --- # Mehrere Hops ![bg right:35% fit](./assets/demos/hop-chain.png) Bei jedem Hop laufen drei Schritte ab: 1. Auspacken bis Layer 3 (IP) 2. Routing-Entscheidung 3. Neu verpacken mit nächster MAC IP bleibt gleich · MAC ändert sich jedes Mal. --- # Die Ankunft ## Der Server empfängt und antwortet --- # Decapsulation am Server ![bg right:42% fit](./assets/demos/server-decap.png) Jede Schicht prüft, ob das Paket für sie bestimmt ist, und packt dann die nächste aus. Am Ende erkennt der Webserver die Anfrage nach der Startseite. --- # Der Server antwortet ```http HTTP/2.0 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 45231 HdM Stuttgart ... ``` Rund 45 KB HTML müssen nun zu euch übertragen werden. --- # Encapsulation beim Server Der Server durchläuft dieselben Schritte – nur in umgekehrter Richtung: ![bg right:40% fit](./assets/demos/encap-stack.png) --- # Die Antwort reist zurück ![bg right:38% fit](./assets/demos/response-hops.png) Der Rückweg funktioniert wie der Hinweg: - Hop für Hop durchs Internet - **IP bleibt gleich** (Start/Ziel) - **MAC ändert sich** bei jedem Router --- # Decapsulation bei euch ![bg right:42% fit](./assets/demos/decap-stack.png) Der Rückweg ist die umgekehrte Encapsulation. Jede Schicht prüft, ob das Paket für sie bestimmt ist, und packt dann die nächste aus. --- # Exkurse ## TCP vs. UDP, MTU, HTTP-Methoden --- # TCP vs. UDP TCP und UDP sind beides Transport-Protokolle — TCP garantiert Vollständigkeit, UDP setzt auf Geschwindigkeit. | | TCP | UDP | |---|-----|-----| | **Verbindung** | Ja (Handshake) | Nein | | **Reihenfolge** | Garantiert | Nicht garantiert | | **Verlorene Pakete** | Werden nachgefordert | Gehen verloren | | **Overhead** | Höher | Niedriger | | **Use Cases** | Web, Email, Downloads | Video-Calls, Gaming, DNS | --- # TCP vs. UDP – Vertiefung Beide sind Transport-Protokolle (Schicht 3), aber mit fundamental unterschiedlichen Garantien. **TCP (Transmission Control Protocol):** - Verbindungsorientiert (Handshake vor Daten) - Sequenznummern → Reihenfolge garantiert - ACKs + Retransmission → Kein Datenverlust - Flow Control (Sliding Window) → Empfänger nicht überlasten - Congestion Control → Netzwerk nicht überlasten **UDP (User Datagram Protocol):** - Verbindungslos (Fire-and-Forget) - Keine Sequenznummern, keine ACKs - Header nur 8 Byte (TCP: 20+ Byte) - Anwendung muss selbst für Zuverlässigkeit sorgen | Anwendung | Protokoll | Grund | |-----------|-----------|-------| | HTTP/HTTPS | TCP | Vollständigkeit kritisch | | DNS | UDP | Kleine Pakete, schnelle Antwort | | Video-Streaming | UDP/QUIC | Latenz wichtiger als Perfektion | | Online-Gaming | UDP | Echtzeit, veraltete Daten nutzlos | **QUIC:** Googles Protokoll kombiniert UDP-Geschwindigkeit mit TCP-ähnlicher Zuverlässigkeit (HTTP/3). --- # UDP bei Video-Calls **Szenario:** Ein Paket geht verloren. | TCP | UDP | |-----|-----| | Warten... neu anfordern... warten... | Ignorieren, nächstes Frame zeigen | | Video friert ein | Kurzes Artefakt | Bei **Echtzeit** ist Verzögerung schlimmer als Verlust. --- # MTU & Fragmentierung **MTU** = Maximum Transmission Unit Ein Ethernet-Frame kann maximal **1500 Byte** Nutzdaten transportieren. **Problem:** Ein Foto hat 3.000.000 Byte. **Lösung:** TCP zerschneidet die Daten in ~2000 Segmente. Jedes Segment hat eine Sequenznummer. Der Empfänger setzt sie zusammen. --- # HTTP-Methoden HTTP-Methoden beschreiben, **was** der Client mit einer Ressource tun will. | Methode | Bedeutung | Beispiel | |---------|-----------|-----------------------------------------------| | **GET** | Daten abrufen | Seite laden `GET /index.html HTTP/2.0` | | **POST** | Daten senden | Formular absenden `POST /login HTTP/2.0` | | **PUT** | Daten ersetzen | Profil aktualisieren `PUT /users/42 HTTP/2.0` | | **DELETE** | Daten löschen | Account löschen `DELETE /users/42 HTTP/2.0` | CRUD = Create, Read, Update, Delete --- # HTTP-Methoden – Vertiefung HTTP-Methoden definieren die **Semantik** der Anfrage – was der Client vom Server erwartet. **CRUD-Mapping (Create, Read, Update, Delete):** | Methode | CRUD | Idempotent | Safe | Typischer Einsatz | |---------|------|------------|------|-------------------| | GET | Read | Ja | Ja | Ressource abrufen | | POST | Create | Nein | Nein | Formular, neue Ressource | | PUT | Update | Ja | Nein | Ressource vollständig ersetzen | | PATCH | Update | Nein | Nein | Ressource teilweise ändern | | DELETE | Delete | Ja | Nein | Ressource löschen | **Idempotent:** Mehrfaches Ausführen hat denselben Effekt wie einmaliges (GET, PUT, DELETE). **Safe:** Ändert nichts am Server (nur GET, HEAD, OPTIONS). **REST-Prinzip** (Representational State Transfer): URLs identifizieren Ressourcen, Methoden definieren Aktionen. ``` GET /users/42 → Benutzer 42 abrufen PUT /users/42 → Benutzer 42 vollständig ersetzen DELETE /users/42 → Benutzer 42 löschen POST /users → Neuen Benutzer erstellen ``` --- # HTTP Status-Codes Jede HTTP-Response enthält einen dreistelligen Status-Code — die erste Ziffer verrät die Kategorie. ```http HTTP/2.0 200 OK HTTP/2.0 404 Not Found HTTP/2.0 500 Internal Server Error ``` | Code-Bereich | Bedeutung | |--------------|-----------| | **2xx** | Erfolg (200 OK, 201 Created) | | **3xx** | Umleitung (301 Moved, 304 Not Modified) | | **4xx** | Client-Fehler (400 Bad Request, 404 Not Found) | | **5xx** | Server-Fehler (500 Internal Error, 503 Unavailable) | --- # HTTP Status-Codes – Vertiefung Die erste Ziffer kategorisiert die Antwort: | Bereich | Kategorie | Häufige Codes | |---------|-----------|---------------| | 1xx | Informational | 100 Continue, 101 Switching Protocols | | 2xx | Success | 200 OK, 201 Created, 204 No Content | | 3xx | Redirection | 301 Moved Permanently, 302 Found, 304 Not Modified | | 4xx | Client Error | 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found | | 5xx | Server Error | 500 Internal Error, 502 Bad Gateway, 503 Unavailable | **Wichtige Unterscheidungen:** - **401 vs. 403:** 401 = nicht authentifiziert (wer bist du?), 403 = nicht autorisiert (du darfst nicht) - **301 vs. 302:** 301 = permanent umgezogen (Cache-fähig), 302 = temporär (nicht cachen) - **304 Not Modified:** Browser hat Cache, Server bestätigt: noch aktuell → spart Bandbreite **API-Design** (Application Programming Interface): Korrekte Status-Codes sind wichtig für Clients. `200` bei Fehler mit `{"error": "..."}` im Body ist schlechtes Design. --- # Zusammenfassung Teil 1 **Der Ablauf:** 1. DNS (UDP:53) → Name zu IP 2. TCP-Handshake (SYN → SYN-ACK → ACK) 3. HTTP-Request (GET /...) 4. HTTP-Response (200 OK + HTML) **Die Konzepte:** - 4 Schichten: Anwendung → Transport → Internet → Netzzugang - IP bleibt gleich, MAC ändert sich pro Hop - Ports identifizieren Programme - Encapsulation: Jede Schicht verpackt die darüberliegende --- # Netzwerk-Grundlagen – Vertiefung Die vier Kernkonzepte für Web-Entwickelnde: **1. DNS-Auflösung:** - Browser fragt DNS-Resolver (z.B. 8.8.8.8) - Rekursive Abfrage: Root → TLD → Authoritative - Caching auf jeder Ebene (TTL = Time To Live) **2. TCP-Verbindungsaufbau:** - 3-Way-Handshake vor jeder HTTP(S)-Anfrage (HTTP/2.0) - Keep-Alive: Verbindung bleibt offen für mehrere Requests - HTTP/2: Multiplexing – viele Requests über eine Verbindung **3. HTTP(S) Request/Response:** ``` Request: Methode + URL + Header + (Body) Response: Status + Header + Body ``` **4. Schichten & Adressen:** | Was bleibt gleich? | Was ändert sich? | |-------------------|------------------| | Ziel-IP | MAC-Adressen (bei jedem Hop) | | Ports | – | **Debugging:** Browser DevTools (F12 → Network) zeigt alle Requests, Timing, Header. --- # Werkzeuge zum Selbst-Erkunden **Im Browser (F12 → Network-Tab):** - Jeder Request sichtbar - Timing, Headers, Response **Im Terminal:** ```bash ping hdm-stuttgart.de # Latenz messen traceroute hdm-stuttgart.de # Route anzeigen (Mac/Linux) tracert hdm-stuttgart.de # Route anzeigen (Windows) nslookup hdm-stuttgart.de # DNS abfragen curl -I hdm-stuttgart.de # HTTP-Header abrufen ``` --- # Teil 2: CSS ## Webseiten gestalten --- # CSS im Überblick ![bg right:35%](./assets/demos/css-anatomie.png) **C**ascading **S**tyle **S**heets ```css p { color: blue; font-size: 16px; } ``` - Trennt **Inhalt** (HTML – Hypertext Markup Language) von **Darstellung** (CSS) - "Cascading" = Regeln können überschrieben werden - Eine CSS-Datei kann viele HTML-Seiten stylen --- # CSS einbinden **Option 1: Externe Datei** (empfohlen) ```html ``` **Option 2: Style-Tag** ```html ``` **Option 3: Inline** (vermeiden) ```html

...

``` --- # CSS-Anatomie ```css selector { property: value; } ``` **Beispiel:** ```css h1 { color: #333333; font-size: 2rem; margin-bottom: 1rem; } ``` Selektor → was wird gestylt Property → welche Eigenschaft Value → welcher Wert --- # Selektoren: Element ![bg right:35%](./assets/demos/css-selector-element.png) ```css /* Alle

-Elemente */ p { color: gray; } /* Mehrere Elemente gleichzeitig */ h1, h2, h3 { font-family: sans-serif; } ``` Element-Selektoren sind die einfachsten. --- # Selektoren: Klasse ![bg right:35%](./assets/demos/css-selector-class.png) ```html

Dieser Text ist wichtig.

Dieser nicht.

``` ```css .wichtig { color: red; font-weight: bold; } ``` **Punkt** vor dem Namen = Klasse --- # Selektoren: ID ![bg right:35%](./assets/demos/css-selector-id.png) ```html ``` ```css #hauptnavigation { background: #333; padding: 1rem; } ``` **Raute** vor dem Namen = ID **Achtung:** IDs sollten **einmalig** pro Seite sein. --- # Selektoren: Kombinationen ![bg right:35%](./assets/demos/css-combinators.png) ```css /* Nachfahre (beliebig tief verschachtelt) */ article p { line-height: 1.6; } /* Direktes Kind (nur eine Ebene) */ nav > a { text-decoration: none; } /* Nächstes Geschwister */ h2 + p { font-size: 1.2rem; } /* Element mit Klasse */ p.wichtig { color: red; } ``` --- # Spezifität von Selektoren ![bg right:35%](./assets/demos/css-specificity.png) | Selektor | Spezifität | |----------|------------| | Element (`p`) | 0,0,0,1 | | Klasse (`.wichtig`) | 0,0,1,0 | | ID (`#header`) | 0,1,0,0 | | Inline (`style="..."`) | 1,0,0,0 | ```css p { color: blue; } /* 0,0,0,1 */ .text { color: green; } /* 0,0,1,0 → gewinnt */ #intro { color: red; } /* 0,1,0,0 → gewinnt über beide */ ``` --- # CSS Spezifität – Vertiefung Spezifität bestimmt, welche CSS-Regel gewinnt, wenn mehrere auf dasselbe Element zutreffen. Sie wird als 4-stellige Zahl berechnet: **(Inline, IDs, Klassen, Elemente)**. **Berechnung:** | Selektor | Inline | IDs | Klassen | Elemente | Gesamt | |----------|--------|-----|---------|----------|--------| | `p` | 0 | 0 | 0 | 1 | 0,0,0,1 | | `.info` | 0 | 0 | 1 | 0 | 0,0,1,0 | | `p.info` | 0 | 0 | 1 | 1 | 0,0,1,1 | | `#header` | 0 | 1 | 0 | 0 | 0,1,0,0 | | `#header .nav a` | 0 | 1 | 1 | 1 | 0,1,1,1 | **Wichtige Regeln:** - Eine Klasse (0,0,1,0) schlägt **jede Anzahl** von Elementen (0,0,0,99) - Eine ID schlägt jede Anzahl von Klassen - `!important` bricht alles → vermeiden, da schwer zu überschreiben **Best Practice:** Flache Spezifität anstreben. BEM-Methodik (Block Element Modifier, `.block__element--modifier`) hält Spezifität gleichmäßig niedrig. --- # Box-Modell ![bg right:42% fit](./assets/demos/box-model-diagram.png) Jedes HTML-Element ist eine rechteckige **Box**. **Schichten innen → außen:** - **content** – Inhalt (Text, Bild) - **padding** – Innenabstand - **border** – Rahmen - **margin** – Außenabstand Gesamt-Breite = `width + padding + border + margin`. Tipp: `box-sizing: border-box` rechnet padding + border mit ein. --- # Box-Modell: CSS ![bg right:35%](./assets/demos/css-box-model.png) ```css .box { width: 200px; height: 100px; padding: 20px; border: 2px solid black; margin: 10px; } ``` **Wichtig:** ```css box-sizing: border-box; ``` → width/height inkludiert padding + border --- # Farben ![bg right:35%](./assets/demos/css-colors.png) CSS kennt fünf Farb-Notationen: **Keyword**, **Hex**, **RGB**, **RGBA** und **HSL**. ```css /* Keyword */ color: red; color: rebeccapurple; /* Hex */ color: #FF0000; color: #F00; /* RGB = Red Green Blue, RGBA mit Alpha */ color: rgb(255, 0, 0); color: rgba(255, 0, 0, 0.5); /* HSL = Hue, Saturation, Lightness */ color: hsl(0, 100%, 50%); ``` MDN-Referenz: [CSS ``](https://developer.mozilla.org/de/docs/Web/CSS/Reference/Values/color_value) --- # Einheiten CSS-Einheiten bestimmen, ob Größen **absolut** (px) oder **relativ** zum Kontext (rem, %, vw) berechnet werden. | Einheit | Bedeutung | |---------|-----------| | `px` | Pixel (absolut) | | `%` | Prozent vom Elternelement | | `em` | Relativ zur Schriftgröße des Elements | | `rem` | Relativ zur Schriftgröße des Root-Elements | | `vw` / `vh` | Prozent der Viewport-Breite/-Höhe | **Empfehlung:** `rem` für Schrift, `%` oder `vw/vh` für Layout --- # Pseudo-Klassen ![bg right:35%](./assets/demos/css-pseudo-classes.png) ```css /* Hover – Maus drüber */ a:hover { color: red; } /* Besuchter Link */ a:visited { color: purple; } /* Fokussiertes Element */ input:focus { border-color: blue; } /* Erstes/n-tes Kind */ li:first-child { font-weight: bold; } li:nth-child(odd) { background: #eee; } ``` `:` vor dem Namen = Pseudo-Klasse --- # Pseudo-Elemente ![bg right:35%](./assets/demos/css-pseudo-elements.png) ```css /* Vor dem Inhalt einfügen */ .required::before { content: "* "; color: red; } /* Erster Buchstabe */ p::first-letter { font-size: 2em; } ``` `::` = Pseudo-Element (erzeugt "virtuelles" Element) `:` = Pseudo-Klasse (wählt existierendes Element im Zustand) --- # Responsive Design ![bg right:35%](./assets/demos/css-responsive.png) ```css /* Mobile First: Basis-Styles */ .container { padding: 1rem; background: white; } /* Ab 768px (Tablet): Anpassungen */ @media (min-width: 768px) { .container { padding: 2rem; background: red; } } /* Ab 1024px (Desktop): Weitere Anpassungen */ @media (min-width: 1024px) { .container { background: green; } } ``` --- # Responsive Design – Vertiefung **Mobile First** ist der Standard: Basis-CSS für kleine Screens, dann Erweiterungen für größere. **Breakpoints (gängige Werte):** | Breakpoint | Gerät | Media Query | |------------|-------|-------------| | < 576px | Smartphone (Portrait) | Basis (kein Query) | | ≥ 576px | Smartphone (Landscape) | `@media (min-width: 576px)` | | ≥ 768px | Tablet | `@media (min-width: 768px)` | | ≥ 992px | Desktop | `@media (min-width: 992px)` | | ≥ 1200px | Large Desktop | `@media (min-width: 1200px)` | **Viewport-Meta-Tag (kritisch!):** ```html ``` Ohne diesen Tag ignorieren mobile Browser eure Media Queries und rendern die Desktop-Version verkleinert. **Moderne Alternativen zu Media Queries:** - `clamp()`: `font-size: clamp(1rem, 2vw, 2rem);` - Container Queries: Reagieren auf Container-Größe statt Viewport - CSS Grid `auto-fit`/`auto-fill`: Automatisches Responsive Layout --- # Zusammenfassung CSS **Selektoren:** - Element: `p` - Klasse: `.wichtig` - ID: `#header` - Kombinationen: `nav > a`, `h2 + p` **Box-Modell:** content → padding → border → margin **Spezifität:** Inline > ID > Klasse > Element **Einheiten:** rem für Text, %, vw/vh für Layout --- # Fragen & Diskussion **Nächstes Thema:** JavaScript **Kontakt:** lb-czechowski@hdm-stuttgart.de --- # Lizenz Diese Präsentation ist lizenziert unter **Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)** Basiert auf Material von: - Markus Thamm / Wolfgang Gruel (HdM Stuttgart) - Michael Czechowski Vollständige Lizenz: https://creativecommons.org/licenses/by-sa/4.0/