# ═══════════════════════════════════════════════════════════════
# RECHNERNETZE – KLAUSUR-MERKZETTEL (Prof. Graffi, HS RheinMain WS2025)
# ═══════════════════════════════════════════════════════════════
## 1. OSI 7-SCHICHTEN-MODELL
```
| Nr | Schicht | Aufgabe | Protokolle/Bsp | Adressierung | Dateneinheit| Geräte |
|----|---------------|--------------------------------------|-----------------------|----------------|-------------|-----------------|
| 7 | Application | Anwendungskommunikation | HTTP,DNS,SMTP,FTP,DHCP| – | APDU | – |
| 6 | Presentation | Kodierung, Kompression, Verschl. | SSL(alt), JPEG, ASCII | – | PPDU | – |
| 5 | Session | Sitzungsverwaltung, Dialoge | NetBIOS, RPC | – | SPDU | – |
| 4 | Transport | Ende-zu-Ende, Prozess-zu-Prozess | TCP, UDP | **Port-Nr** | Segment/TPDU| – |
| 3 | Network | Routing, Wegewahl, log. Adressierung | IP, ICMP, OSPF, BGP | **IP-Adresse** | Packet | **Router** |
| 2 | Data Link | 1-Hop-Zustellung, Medienzugriff | Ethernet, 802.11, PPP | **MAC-Adresse**| Frame |**Switch/Bridge**|
| 1 | Physical | Bitübertragung auf Medium | Kabel, Funk, Glasfaser| – | Bit | **Hub/Repeater**|
- **Kapselung:** App-Daten → +TCP-Header → +IP-Header → +Ethernet-Header+Trailer → Bits
- **TCP/IP-Stack (4 Schichten):** Application → Transport → Internet → Network Access
- **Router:** Entpackt bis Schicht 3 (IP), leitet weiter, verpackt neu (neue Schicht 2 Header!)
- **Switch:** Entpackt bis Schicht 2 (MAC), leitet weiter basierend auf MAC-Tabelle
```
## 2. LEITUNGS- vs. PAKETVERMITTLUNG
```
Leitungsvermittlung (z.B. Telefonnetz/ISDN):
- Dedizierte Leitung wird vor Kommunikation Ende-zu-Ende reserviert
- Bandbreite + Latenz garantiert, aber verschwendet wenn nicht genutzt
- Feste Nutzeranzahl (z.B. 1Gbit/s, 100Mbit/User → max 10 User)
- Aufteilung: FDM (jeder eigene Frequenz) oder TDM (jeder Zeitschlitze)
Paketvermittlung (z.B. Internet/IP):
- Daten in Pakete zerlegt, teilen sich Ressourcen (statist. Multiplexing)
- Keine Bandbreite-/Latenzgarantie, aber VIEL bessere Auslastung
- Mehr Nutzer möglich (35 statt 10 bei 10% Aktivität, P(Überlast)<0.04%)
- Store and Forward: Router empfängt ganzes Paket bevor er weiterleitet
- Probleme: Warteschlangen, Paketverlust, Umordnung, Überlast
```
## 3. KENNZAHLEN & FORMELN
```
Gesamtverzögerung = d_proc + d_queue + d_trans + d_prop
d_proc = Verarbeitungsverzögerung (Header prüfen, Routing, ~µs)
d_queue = Warteschlangenverzögerung (warten auf Leitung, variabel)
d_trans = L / R (Übertragungsverzögerung: Paketlänge L [Bit] / Bitrate R [Bit/s])
d_prop = d / s (Ausbreitungsverzögerung: Distanz d [m] / Lichtgeschw. s [~2·10⁸ m/s])
Durchsatz = min(R_Server, R_Client, alle R_Links auf dem Pfad) → Flaschenhals!
Auslastung ρ = L·a / R (a = Paketankunftsrate [Pakete/s])
ρ → 1: Verzögerung → ∞ | ρ > 1: Paketverlust!
RTT = Round Trip Time (Hin + Rück)
Bandbreite-Verzögerungs-Produkt = R × d_prop (Bits "unterwegs")
```
## 4. IPv4 ADRESSIERUNG & SUBNETTING
```IPv4: 32 Bit = 4 Bytes, Punkt-Dezimal (z.B. 192.168.1.1)
Klassen: A=1-127(8+24) B=128-191(16+16) C=192-223(24+8) D=224-239(MC) E=240+(res.)
Private: 10.0.0.0/8 | 172.16.0.0/12 | 192.168.0.0/16
══ NETZMASKE-TABELLE (auswendig!) ══
128=1 192=2 224=3 240=4 248=5 252=6 254=7 255=8 0=0
(Dezimalwert = Anzahl Einsen in dem Byte)
══ Dezimal → Binär: Stellenwerte ══
128 64 32 16 | 8 4 2 1
Bsp: 192=128+64=11000000 172=128+32+8+4=10101100 23=16+4+2+1=00010111
══ REZEPTE ══
Netzmaske→CIDR: Einsen pro Byte zählen (Tabelle!), addieren
255.255.128.0 → 8+8+1+0 = /17 | 255.255.255.192 → 8+8+8+2 = /26
CIDR→Netzmaske: /n Einsen, Rest Nullen, je 8 Bit → Dezimal
/20 → 11111111.11111111.11110000.00000000 → 255.255.240.0
Netz/Host-Teil: IP binär schreiben, Strich nach n-tem Bit
172.30.24.23/17 → 10101100.00011110.0|0011000.00010111
←── Netzteil 17 ──→|←── Host 15 ──→
Netzadresse: Hostbits (rechts vom Strich) alle auf 0
→ 10101100.00011110.0|0000000.00000000 = 172.30.0.0
Broadcast: Hostbits alle auf 1
→ 10101100.00011110.0|1111111.11111111 = 172.30.127.255
Hosts: 2^(32-n) - 2
/17→2^15-2=32766 /24→2^8-2=254 /26→2^6-2=62
Subnetz-Test: IP L_AND Maske == Netzadresse? → gehört dazu
Longest Prefix: Mehrere Treffer → längster (spezifischster) gewinnt
Netz aufteilen: Größtes Subnetz zuerst! Hosts→nächste 2er-Potenz→CIDR
1500 Hosts→2^11=2048→/21 | 700 Hosts→2^10=1024→/22
Nacheinander vergeben: 10.0.240.0/21 + 10.0.248.0/22 + 10.0.252.0/22
```
## 5. IP-HEADER, FRAGMENTIERUNG, IPv6
```
IPv4-Header (20 Bytes min):
Version(4)|IHL(4)|ToS(8)|Total Length(16)
Identification(16)|Flags(3)|Fragment Offset(13)
TTL(8)|Protocol(8)|Header Checksum(16)
Source IP(32)|Destination IP(32)|[Options]
TTL: -1 pro Hop, bei 0 → verworfen + ICMP "Time Exceeded"
Protocol: 6=TCP, 17=UDP, 1=ICMP
Flags: DF (Don't Fragment), MF (More Fragments)
Fragment Offset = Byte-Position / 8
IPv6: 128 Bit, kein Fragmentieren im Router (nur Endhost!)
Tunnelbau: IPv6 in IPv4 kapseln (Src/Dst = Tunnelendpunkte)
Kein Header-Checksum, kein Options-Feld → einfacher/schneller
══ Ergänzung zu #5: ICMP ══
ICMP: Fehlermeldungen + Diagnose auf Schicht 3 (kein Port, kein TCP/UDP)
Ping = ICMP Echo Request/Reply → RTT messen
Traceroute = TTL schrittweise erhöhen → ICMP Time Exceeded pro Hop
Weitere: Destination Unreachable, Redirect
```
## 6. NAT & DHCP
```
NAT (Network Address Translation):
Private IP:Port ←→ Öffentliche IP:Port (NAT-Tabelle im Router)
Alle ausgehenden Pakete: gleiche öffentliche IP, verschiedene Ports
Eingehend: Port bestimmt internen Host → kein Mapping = verworfen!
→ "Zufällig" sicherheitsfördernd (Paketfilter-Effekt)
DHCP (Dynamic Host Configuration Protocol):
Automatische IP-Vergabe, UDP (Client Port 68, Server Port 67)
DORA: Discover → Offer → Request → ACK
Client startet mit 0.0.0.0 und sendet Broadcast an 255.255.255.255
Server bietet IP, Subnetzmaske, Gateway, DNS-Server an
```
## 7. TCP
```
Eigenschaften: verbindungsorientiert, zuverlässig, Vollduplex, Bytestream
Ports: 0-1023 Well-Known, 1024-65535 frei
Socket = (Src-IP, Src-Port, Dst-IP, Dst-Port)
Header (20B min): SrcPort|DstPort|SeqNr(Bytes!)|ACKnr(nächstes erw. Byte, kumulativ)
DataOff|Flags(C,E,U,A,P,R,S,F)|Window|Checksum|UrgPtr|[Options]
SYN=Aufbau ACK=Bestätigung FIN=Abbau RST=Reset PSH=Push URG=Urgent
3-Way-Handshake: Bsp (InitSeq A=42, B=3141):
1) C→S: SYN, Seq=x SYNSENT A→B: SYN, Seq=42
2) S→C: SYN+ACK,Seq=y,ACK=x+1 SYN RCVD B→A: SYN+ACK, Seq=3141, ACK=43
3) C→S: ACK, Seq=x+1,ACK=y+1 ESTAB A→B: ACK, Seq=43, ACK=3142
Abbau: FIN→ACK→FIN→ACK (4-Way, TIME_WAIT beim Initiator)
Daten nach Handshake (Seq zählt Bytes!):
A sendet 500B: Seq=x+1, Len=500 → B: ACK=x+501
A sendet 300B: Seq=x+501, Len=300 → B: ACK=x+801
Regel: ACK = Seq + Datenlänge = nächstes erwartetes Byte
Flusskontrolle: RWND = freier Empfangspuffer, in jedem ACK mitgeteilt
Sender darf max RWND Bytes unbestätigt "in flight" haben (Sliding Window)
Staukontrolle (AIMD): CWND = geschätzte Netzkapazität, Senderate=min(CWND,RWND)
Slow Start: CWND ×2 pro RTT (exponent.) bis ssthresh
Cong. Avoidance: CWND +1 MSS pro RTT (linear) ab ssthresh
3 Dup-ACKs (Reno): ssthresh=CWND/2, CWND=ssthresh → Fast Retransmit
Timeout (Tahoe): ssthresh=CWND/2, CWND=1 MSS → Slow Start (drastisch!)
CWND-Graph ablesen:
Exponentiell (1→2→4→8) = Slow Start | Linear (+1/RTT) = Cong. Avoidance
CWND halbiert, bleibt hoch = 3 Dup-ACKs | CWND→1 = Timeout
ssthresh ändert sich NUR bei Verlust: neuer ssthresh = CWND_vor_Verlust/2
TCP vs UDP:
Nur TCP: SeqNr, Überlast-/Flusskontrolle, Fairness, verbindungsor., zuverlässig
Nur UDP: verbindungslos
Beide: Multiplexing, Prüfsumme, Transportschicht
Keins: Sicherungsschicht (!)
```
## 8. UDP (User Datagram Protocol)
```
Verbindungslos, unzuverlässig, schnell, kein Handshake
Header (8 Bytes): Src Port(16)|Dst Port(16)|Length(16)|Checksum(16)
Kein: Seq-Nr, ACK, RWND, CWND, Flusskontrolle, Überlastkontrolle
Nutzen: DNS(53), DHCP(67/68), NTP, RIP, Streaming, VoIP, Gaming
══ INTERNET CHECKSUM (TCP/UDP/IP) ══
1. 16-Bit-Blöcke summieren, bei Übertrag: Wraparound addieren (+0001)
2. Einerkomplement von Summe(Bits flippen) = Prüfsumme
Empfänger: alle Blöcke + Prüfsumme = 1111...1? → OK, sonst Fehler
```
## 9. ROUTING
```
Routingtabelle: (Zielnetz/Maske, Next-Hop/Interface)
AS = Autonomes System | IGP = innerhalb AS (RIP,OSPF) | EGP = zwischen AS (BGP)
══ LINK STATE (OSPF) – Dijkstra ══
Jeder Router kennt GESAMTE Topologie (Flooding)
Dijkstra: N'=besucht, D(v)=Kosten zu v, p(v)=Vorgänger
1. N'={Start}, D(Nachbarn)=direkte Kosten, D(Rest)=∞
2. Nimm w∉N' mit kleinstem D(w), füge zu N' hinzu
3. Für Nachbarn v von w: D(v)=min(D(v), D(w)+c(w,v)), merke p(v)
4. Wiederhole bis alle in N'
Bsp (Start B): N' |D(A),p|D(C),p|D(D),p|D(E),p|D(F),p
B |2,B |∞ |∞ |4,B |∞
B,A | |3,A |∞ |4,B |∞
B,A,C | | |6,C |4,B |∞ ...
OSPF: IGP, Bandbreite als Metrik, Areas (Area 0=Backbone)
══ DISTANCE VECTOR (RIP) – Bellman-Ford ══
Nur Nachbarn bekannt, KEIN globales Wissen
D(x,y) = min über Nachbarn v { c(x,v) + D(v,y) }
Periodischer Austausch der DV-Tabellen, bei Änderung neu berechnen
Probleme: Count-to-Infinity, Routing-Loops
Lösungen: Split Horizon, Poison Reverse, Hold-Down Timer
RIP: Hop-Count max 15 (16=∞), Updates 30s, UDP 520
BGP: EGP, Path Vector, TCP 179, Policy-basiert (nicht kürzester Weg!)
```
## 10. ETHERNET & SICHERUNGSSCHICHT (Schicht 2)
```
MAC: 48 Bit (6B), z.B. AA:BB:CC:DD:EE:FF, Broadcast=FF:FF:FF:FF:FF:FF
Erste 3B = Hersteller (OUI), letzte 3B = Geräte-ID
Frame: Preamble(7)|SFD(1)|DstMAC(6)|SrcMAC(6)|Type(2)|Data(46-1500)|FCS(4)
FCS=CRC-32, min 64B, max 1518B (mit VLAN-Tag: 1522B)
CSMA/CD: 1.Höre ob frei → 2.Sende → 3.Kollision? Abbruch+JAM
Backoff: warte 0..2^n-1 × Slotzeit (n=Kollisionszähler, max 10)
Nur Halbduplex! Vollduplex = keine Kollisionen
ARP: IP → MAC auflösen
Request=Broadcast("Wer hat IP x?") → Reply=Unicast("Meine MAC ist...")
Cache mit TTL ~20min
ARP-Spoofing: falsche Replies → Man-in-the-Middle!
══ Ergänzung zu #10: CRC (Ethernet, WiFi) ══
Stärker als Checksum! Erkennt alle Burstfehler < r+1 Bit
D=Datenbits, G=Generator (r+1 Bit), gesucht: r CRC-Bits R
R = Rest von (D · 2^r) ÷ G (XOR-Division/Polynomdivision)
Sende <D,R>, Empfänger teilt <D,R> durch G → Rest=0? OK
```
## 11. SWITCHES, STP, VLANs
```
Switch (Schicht 2): selbstlernend, transparent, jeder Port=eigene Kollisionsdomäne
MAC-Tabelle: lernt Src-MAC→Port | Bekannt→weiterleiten | Unbekannt→Flooding
Hub (Schicht 1): alles an alle → eine Kollisionsdomäne
STP (802.1D): Verhindert Schleifen bei redundanten Switches
1. Root-Bridge: niedrigste Bridge-ID (Prio 2B + MAC 6B, niedrig=beste)
2. Root-Port/Switch: günstigster Pfad zur Root (niedrigste Pfadkosten)
3. Designated Port/Segment: günstigster Port zur Root pro LAN
4. Rest → BLOCKING
Zustände: Blocking→Listening→Learning→Forwarding (je ~15s)
BPDUs: Austausch-Pakete (Multicast 01:80:C2:00:00:00)
VLAN: logische Trennung auf Switch (eigene Broadcast-Domänen)
Port-basiert: Port → VLAN-ID zugeordnet
Trunk: 802.1Q Tag (4B nach SrcMAC): EthType(0x8100)|Prio(3)|CFI(1)|VID(12)
Inter-VLAN: braucht Router / Layer-3-Switch
```
## 12. DNS
```
Domain Name System: Domainname → IP-Adresse
Transport: UDP Port 53 (TCP für Zonentransfers)
Hierarchie: Root-Server → TLD-Server (.de,.com,.org) → Autoritative Server
Auflösung:
Iterativ: Lokaler DNS fragt Root → bekommt Verweis auf TLD → fragt TLD → ...
Rekursiv: Lokaler DNS delegiert gesamte Auflösung (Root-Server erlauben das selten!)
Record-Typen:
A = Hostname → IPv4 AAAA = Hostname → IPv6
MX = Domain → Mailserver CNAME = Alias → kanonischer Name
NS = Domain → zuständiger Nameserver PTR = IP → Hostname (Reverse)
Caching: DNS-Antworten werden mit TTL gecacht → beschleunigt weitere Anfragen
```
## 13. HTTP & WEB
```
HTTP: Hypertext Transfer Protocol, TCP Port 80, HTTPS = Port 443
Zustandslos (Server merkt sich nichts) → Cookies für Zustand
Request-Methoden:
GET: Ressource anfordern (Header + Body)
POST: Daten an Server senden (z.B. Formulardaten)
HEAD: Nur Header anfordern (kein Body)
Statuscodes: 200 OK | 301 Moved Permanently | 304 Not Modified
400 Bad Request | 404 Not Found | 500 Internal Server Error
Persistent vs Non-Persistent:
Non-persistent: Neue TCP-Verbindung pro Objekt → 2 RTT pro Objekt
Persistent: TCP-Verbindung bleibt offen → nur 1 RTT pro Objekt nach Aufbau
Pipelining: Mehrere Requests ohne auf Antwort zu warten
RTT-Berechnung (persistent + Pipelining):
1 RTT (TCP Aufbau) + 1 RTT (Index-Seite) + min{1, N} RTT (N Objekte)
= 2 RTT (wenn N=0) oder 3 RTT (wenn N≥1)
Optional: +1 RTT für Verbindungsabbau
Non-persistent HTTP: 2 RTT + Übertragungszeit pro Objekt
(1 RTT TCP-Aufbau + 1 RTT Request/Response)
```
## 14. KRYPTOGRAPHIE
```
## 14. KRYPTOGRAPHIE
4 Ziele: Vertraulichkeit, Integrität, Authentizität, Verbindlichkeit
Symmetrisch (1 Key, schnell): AES 128/192/256, Blockchiffre
ECB(unsicher!) CBC(+IV) CFB CTR(parallel) GCM(AES+MAC→Standard)
Asymmetrisch (Pub/Priv, langsam): RSA, DH, ECDHE
Pub=verschl./Sig.prüfen | Priv=entschl./signieren
Hybrid: Asym.→Keyaustausch, dann Sym.→Daten (=TLS-Prinzip)
Hash: SHA-256/384, Einweg, feste Länge → Integrität
HMAC: Hash(Msg|Key) → Auth+Integrität (nur mit Key erzeugbar)
══ RSA REZEPT ══
1. Wähle Primzahlen p, q → n = p·q
2. z = (p-1)·(q-1)
3. Wähle e mit ggT(e,z) = 1 (teilerfremd)
4. Finde d mit (e·d) mod z = 1
Trick: Prüfe k·z+1 ob durch e teilbar → d = (k·z+1)/e
Bsp: p=11,q=5 → n=55, z=40, e=7 → 1·40+1=41/7? nein
2·40+1=81? nein, 3·40+1=121? nein, 4·40+1=161/7=23 ✓ → d=23
Public=(e,n)=(7,55) | Private=(d,n)=(23,55)
Verschlüsseln: c = m^e mod n (18^7 mod 55 = 17)
Entschlüsseln: m = c^d mod n (17^23 mod 55 = 18)
Signieren: s = m^d mod n | Prüfen: m = s^e mod n
══ DIFFIE-HELLMAN REZEPT ══
Öffentlich: Primzahl p, Primitivwurzel g
1. Alice wählt geheim a, berechnet A = g^a mod p, sendet A
2. Bob wählt geheim b, berechnet B = g^b mod p, sendet B
3. Alice: K = B^a mod p | Bob: K = A^b mod p → gleicher Key!
Bsp: p=13, g=2, a=5, b=8
A = 2^5 mod 13 = 6 | B = 2^8 mod 13 = 9
Alice: K = 9^5 mod 13 = 3 | Bob: K = 6^8 mod 13 = 3 ✓
Zertifikat: CA bestätigt PubKey↔Server | PKI: RootCA→ZwischenCA→End | CRL=Widerruf
Kerberos: Client→AuthSrv(→TGT)→TGS(→Ticket)→Ressource
Challenge-Response: Nonce R senden→mit SharedKey verschlüsseln→prüfen
```
## 15. TLS / SSL
```
TLS: oberhalb TCP, Vertraulichkeit+Integrität+Auth, HTTPS=HTTP+TLS(Port 443)
Handshake (1 RTT, TLS 1.3):
1) Client Hello: Cipher Suites, DH-Params, (opt. Client-Zert.)
2) Server Hello: gewählte Suite, DH-Params, Server-Zertifikat
3) Client prüft Zert., erzeugt Schlüssel, sendet sofort Daten
4 Schlüssel aus Master Secret (KDF):
Kc,Mc (Client→Server) | Ks,Ms (Server→Client) | je Verschl.+MAC
Records: Datenstrom in Blöcke, jeder mit eigenem MAC+TLS-SeqNr
→ Schutz vor Replay+Reorder, verschlüsselt an TCP übergeben
0-RTT Resumption: schnell aber Replay-anfällig!
Cipher Suite z.B. TLS_AES_256_GCM_SHA384 (AES-Verschl, GCM+MAC, SHA-HMAC)
TLS 1.3: nur 5 Suites, DH Pflicht (kein RSA-Schlüsselaustausch mehr)
```
## 16. VPN & IPSec
```
VPN (Virtual Private Network):
Virtuelles privates Netz über öffentliches Internet
Site-to-Site: Gateway ↔ Gateway (zwei Standorte verbinden)
End-to-Site: Laptop ↔ Gateway (Fernzugriff auf Firmennetz)
Gewährleistet: Vertraulichkeit, Authentifizierung, Integrität
IPSec (Schicht 3):
Bei IPv6 Pflicht (bei IPv4 optional)
IKE (Internet Key Exchange): Handelt Algorithmen + Keys aus
AH (Authentication Header): Auth + Integrität, KEINE Verschlüsselung
ESP (Encapsulating Security Payload): Auth + Integrität + Verschlüsselung
Transportmodus: nur Payload verschlüsselt (Original-IP-Header bleibt)
Tunnelmodus: GANZES Paket verschlüsselt + neuer IP-Header (für VPN Gateway)
SSL-VPN: nutzt HTTPS → funktioniert auch wenn alles außer Web gesperrt ist!
```
## 17. FIREWALL, ACL, IDS
```
Paketfilter (Firewall):
Regeln basierend auf: Src-IP, Dst-IP, Src-Port, Dst-Port, Protokoll
Aktionen: Accept (weiterleiten) | Drop (verwerfen) | Log (aufzeichnen)
Stateless: jedes Paket einzeln geprüft
Stateful: merkt sich Verbindungszustand (z.B. TCP-Verbindung aufgebaut?)
ACL (Access Control List) auf Cisco-Routern:
Standard ACL: filtert nur nach Source-IP
Extended ACL: filtert nach Src/Dst-IP + Src/Dst-Port + Protokoll
IDS (Intrusion Detection System): erkennt Angriffe
Signaturbasiert: bekannte Angriffsmuster
Anomaliebasiert: Abweichung vom Normalverhalten
NAT als Sicherheit: eingehende Pakete ohne Port-Mapping → verworfen
```
## 18. SOCKET-PROGRAMMIERUNG
```
TCP-Server: socket() → bind() → listen() → accept() → recv/send → close()
TCP-Client: socket() → connect() → send/recv → close()
UDP: socket() → bind() → sendto()/recvfrom() (keine Verbindung!)
Well-Known Ports: HTTP=80, HTTPS=443, DNS=53, SMTP=25, FTP=20/21,
SSH=22, DHCP=67/68, RIP=520, BGP=179, POP3=110, IMAP=143
```