--- marp: true theme: gaia paginate: true backgroundColor: #fff header: "Grundlagen IT- und Internettechnik" footer: "Michael Czechowski – HdM Stuttgart – WS 2025/26" title: "Termin 2: Netzwerke, Protokolle & CSS" ---  # Grundlagen IT- und Internettechnik **223015c** · Modul "Technik 1" · 1. Semester Digital- und Medienwirtschaft Hochschule der Medien Stuttgart **Wintersemester 2025/26** --- # Termin 2 – 10.01.2026 ## Netzwerke, Protokolle & CSS --- # Rückblick Termin 1 **Was wir gelernt haben:** - Geschichte: Hollerith → IBM → Von Neumann → ARPANET - Von-Neumann-Architektur (5 Komponenten) - Bits, Bytes, Hexadezimal - HTML-Grundlagen & semantische Tags **Fragen? Probleme bei der Fleißaufgabe?** --- # Heute **Vormittag:** - Netzwerke vertieft (OSI, TCP/IP) - DNS: Wie funktionieren Domain-Namen? - HTTP im Detail **Nachmittag:** - CSS-Grundlagen - Selektoren & Spezifität - Layouts mit Flexbox - Hands-On: Eure Seite stylen --- # Teil 1: Netzwerke ## Wie Daten reisen --- # Wiederholung: OSI-Modell **Merksatz:** "**A**lle **d**eutschen **S**tudenten **t**rinken **v**erschiedene **S**orten **B**ier" | Schicht | Name | Merksatz | |---------|------|----------| | 7 | **A**nwendung | **A**lle | | 6 | **D**arstellung | **d**eutschen | | 5 | **S**itzung | **S**tudenten | | 4 | **T**ransport | **t**rinken | | 3 | **V**ermittlung | **v**erschiedene | | 2 | **S**icherung | **S**orten | | 1 | **B**itübertragung | **B**ier | --- # OSI vs. TCP/IP ``` OSI-Modell TCP/IP-Modell ┌─────────────────┐ ┌─────────────────┐ │ 7. Anwendung │ │ │ ├─────────────────┤ │ Anwendung │ │ 6. Darstellung │ │ (HTTP, DNS, │ ├─────────────────┤ │ SMTP, FTP) │ │ 5. Sitzung │ │ │ ├─────────────────┤ ├─────────────────┤ │ 4. Transport │ │ Transport │ │ │ │ (TCP, UDP) │ ├─────────────────┤ ├─────────────────┤ │ 3. Vermittlung │ │ Internet │ │ │ │ (IP) │ ├─────────────────┤ ├─────────────────┤ │ 2. Sicherung │ │ │ ├─────────────────┤ │ Netzzugang │ │ 1. Bitübertrag │ │ │ └─────────────────┘ └─────────────────┘ ``` --- # Schicht 1: Bitübertragung **Physikalische Übertragung von Bits** | Medium | Beschreibung | |--------|--------------| | **Kupferkabel** | Elektrische Signale (Ethernet) | | **Glasfaser** | Lichtimpulse (schnell, weit) | | **Funk** | Elektromagnetische Wellen (WLAN, 5G) | **Einheiten:** - Bit/s, kbit/s, Mbit/s, Gbit/s - **Achtung:** 100 Mbit/s ≠ 100 MB/s! --- # Schicht 2: Sicherung **MAC-Adressen: Hardware-Identifikation** ``` 00:1A:2B:3C:4D:5E ``` - 48 Bit = 6 Bytes - **Weltweit eindeutig** (in Theorie) - In Netzwerkkarte "eingebrannt" **Ethernet-Frame:** ``` ┌────────┬────────┬──────┬─────────┬─────┐ │Präambel│Ziel-MAC│Src-MAC│ Daten │ FCS │ └────────┴────────┴──────┴─────────┴─────┘ ``` --- # Schicht 3: Vermittlung (IP) **IP-Adressen: Logische Adressierung** ``` IPv4: 192.168.1.100 (32 Bit) IPv6: 2001:db8::1 (128 Bit) ``` **Subnetzmaske:** Trennt Netzwerk von Host ``` IP: 192.168. 1.100 Maske: 255.255.255. 0 └─Netzwerk─┘└Host┘ ``` **Router** arbeiten auf Layer 3 (IP-Routing) --- # Schicht 4: Transport **TCP vs. UDP** | Eigenschaft | TCP | UDP | |-------------|-----|-----| | Verbindung | Ja (3-Way-Handshake) | Nein | | Zuverlässig | Ja (Bestätigung) | Nein | | Reihenfolge | Garantiert | Nicht garantiert | | Geschwindigkeit | Langsamer | Schneller | | Anwendung | Web, E-Mail | Streaming, Gaming | --- # TCP: 3-Way-Handshake ``` Client Server │ │ │──── SYN (Seq=100) ──────────>│ │ │ │<─── SYN-ACK (Seq=300, Ack=101)│ │ │ │──── ACK (Seq=101, Ack=301) ──>│ │ │ │ Verbindung hergestellt │ ``` **SYN** = Synchronize **ACK** = Acknowledge --- # Schicht 7: Anwendung **Protokolle, die wir täglich nutzen:** | Protokoll | Port | Funktion | |-----------|------|----------| | **HTTP** | 80 | Webseiten (unverschlüsselt) | | **HTTPS** | 443 | Webseiten (TLS-verschlüsselt) | | **DNS** | 53 | Namensauflösung | | **SMTP** | 25/587 | E-Mail senden | | **IMAP** | 993 | E-Mail abrufen | | **SSH** | 22 | Sichere Fernsteuerung | --- # DNS: Das Telefonbuch des Internets --- # Das Problem **Menschen:** `www.hdm-stuttgart.de` **Computer:** `212.132.79.37` **DNS** = Domain Name System → Übersetzt Namen in IP-Adressen --- # DNS-Hierarchie ``` . (Root) /|\ / | \ .de .com .org / \ hdm-stuttgart google | | www mail ``` **FQDN:** `www.hdm-stuttgart.de.` (mit Punkt am Ende!) --- # DNS-Auflösung ``` 1. Browser fragt lokalen DNS-Resolver 2. Resolver fragt Root-Server → ".de ist bei..." 3. Resolver fragt .de-Server → "hdm-stuttgart bei..." 4. Resolver fragt hdm-Server → "www = 212.132.79.37" 5. Resolver cached Antwort 6. Browser verbindet zu 212.132.79.37 ``` **Caching:** Antworten werden gespeichert → Schneller bei wiederholten Anfragen --- # DNS-Records | Typ | Bedeutung | Beispiel | |-----|-----------|----------| | **A** | IPv4-Adresse | `www → 212.132.79.37` | | **AAAA** | IPv6-Adresse | `www → 2001:db8::1` | | **CNAME** | Alias | `blog → www.example.com` | | **MX** | Mail-Server | `@ → mail.example.com` | | **TXT** | Text (Verifikation) | `"v=spf1..."` | --- # Hands-On: DNS erkunden (15 Min) **Terminal öffnen:** ```bash # DNS-Auflösung nslookup hdm-stuttgart.de nslookup google.com # Detaillierter (Linux/Mac) dig hdm-stuttgart.de dig google.com MX # Weg verfolgen traceroute hdm-stuttgart.de # Mac/Linux tracert hdm-stuttgart.de # Windows ``` **Online-Tool:** https://toolbox.googleapps.com/apps/dig/ --- # HTTP im Detail --- # HTTP-Request ```http GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept: text/html,application/xhtml+xml Accept-Language: de-DE,de;q=0.9,en;q=0.8 Connection: keep-alive ``` | Teil | Bedeutung | |------|-----------| | `GET` | Methode (was will ich?) | | `/index.html` | Pfad (welche Ressource?) | | `HTTP/1.1` | Protokoll-Version | | `Host:` | Ziel-Server | --- # HTTP-Response ```http HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 1234 ... ``` **Status-Codes:** 2xx Erfolg · 3xx Umleitung · 4xx Client-Fehler · 5xx Server-Fehler --- # HTTP-Methoden | Methode | Zweck | Beispiel | |---------|-------|----------| | **GET** | Daten abrufen | Seite laden | | **POST** | Daten senden | Formular absenden | | **PUT** | Daten ersetzen | Profil aktualisieren | | **PATCH** | Daten teilweise ändern | Einzelnes Feld | | **DELETE** | Daten löschen | Account löschen | **CRUD:** Create, Read, Update, Delete → POST, GET, PUT/PATCH, DELETE --- # Hands-On: HTTP beobachten (20 Min) **DevTools öffnen:** `F12` (Win/Linux) · `Cmd+Option+I` (Mac) **Tab "Netzwerk" (Network):** 1. Beliebige Webseite öffnen 2. Requests beobachten 3. Auf Request klicken → Headers & Response analysieren **Beobachtet:** Anzahl Requests, Dateitypen (JS, CSS, Bilder...) --- # Pause ## 15 Minuten --- # Teil 2: CSS ## Webseiten gestalten --- # Was ist CSS? **C**ascading **S**tyle **S**heets - Trennt **Inhalt** (HTML) von **Darstellung** (CSS) - "Cascading" = Regeln können überschrieben werden - Eine CSS-Datei für viele HTML-Seiten ```css p { color: blue; font-size: 16px; } ``` --- # CSS einbinden **Option 1: Externe Datei** (empfohlen!) ```html ``` **Option 2: Style-Tag** ```html ``` **Option 3: Inline** (vermeiden!) ```html
...
``` --- # CSS-Anatomie ```css selector { property: value; property: value; } ``` **Beispiel:** ```css h1 { color: #333333; font-size: 2rem; margin-bottom: 1rem; } ``` --- # Selektoren: Element ```css /* Alle-Elemente */ p { color: gray; } /* Alle
Dieser Text ist wichtig.
Dieser nicht.
``` ```css /* Alle Elemente mit class="wichtig" */ .wichtig { color: red; font-weight: bold; } ``` **Punkt** vor dem Namen = Klasse --- # Selektoren: ID ```html ``` ```css /* Element mit id="hauptnavigation" */ #hauptnavigation { background: #333; padding: 1rem; } ``` **Raute** vor dem Namen = ID ⚠️ IDs sollten **einmalig** pro Seite sein! --- # Selektoren: Kombinationen ```css /* Nachfahre (irgendwo drin) */ article p { line-height: 1.6; } /* Direktes Kind */ nav > a { text-decoration: none; } /* Nächstes Geschwister */ h2 + p { font-size: 1.2rem; } /* Element mit Klasse */ p.wichtig { color: red; } ``` --- # Spezifität: Wer gewinnt? **Wenn mehrere Regeln auf ein Element zutreffen:** | 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 | **Höhere Spezifität gewinnt!** ```css p { color: blue; } /* 0,0,0,1 */ .text { color: green; } /* 0,0,1,0 → gewinnt! */ ``` --- # Box-Modell ``` ┌─────────────────────────────────────┐ │ margin │ │ ┌─────────────────────────────┐ │ │ │ border │ │ │ │ ┌─────────────────────┐ │ │ │ │ │ padding │ │ │ │ │ │ ┌─────────────┐ │ │ │ │ │ │ │ content │ │ │ │ │ │ │ └─────────────┘ │ │ │ │ │ └─────────────────────┘ │ │ │ └─────────────────────────────┘ │ └─────────────────────────────────────┘ ``` --- # Box-Modell: CSS ```css .box { /* Inhalt */ width: 200px; height: 100px; /* Innenabstand */ padding: 20px; /* Rahmen */ border: 2px solid black; /* Außenabstand */ margin: 10px; /* Berechnung vereinfachen */ box-sizing: border-box; } ``` --- # Farben in CSS ```css /* Keyword */ color: red; color: rebeccapurple; /* Hex (RGB) */ color: #FF0000; color: #F00; /* Kurzform */ /* RGB/RGBA */ color: rgb(255, 0, 0); color: rgba(255, 0, 0, 0.5); /* 50% transparent */ /* HSL */ color: hsl(0, 100%, 50%); /* Hue, Saturation, Lightness */ ``` --- # Einheiten | Einheit | Bedeutung | Beispiel | |---------|-----------|----------| | `px` | Pixel (absolut) | `font-size: 16px` | | `%` | Prozent vom Parent | `width: 50%` | | `em` | Relativ zur Schriftgröße | `padding: 1em` | | `rem` | Relativ zur Root-Schriftgröße | `font-size: 1.5rem` | | `vw/vh` | Viewport-Breite/-Höhe | `height: 100vh` | **Empfehlung:** `rem` für Schrift, `%` oder `vw/vh` für Layout --- # Hands-On: Erste Styles (30 Min) **Erstellt `style.css` für eure HTML-Seite:** 1. CSS-Datei im `` verlinken 2. Grundschrift setzen (`font-family`, `line-height`, `color`) 3. Überschriften, Links, Listen stylen 4. Mit Farben und Abständen experimentieren **Ressource:** https://codescripsi.es/ - **Basics:** Alle machen - **Advanced:** Wer möchte --- # Mittagspause ## 60 Minuten --- # Teil 3: Layouts ## Flexbox & mehr --- # Das Layout-Problem **Früher:** - `float: left` (Hack!) - Tabellen für Layout (Horror!) - Absolute Positionierung **Heute:** - **Flexbox** – Eindimensional (Zeile ODER Spalte) - **Grid** – Zweidimensional (Zeilen UND Spalten) --- # Flexbox: Grundlagen ```css .container { display: flex; } ``` ```html