From f3d8779c96a32074e56b8878d6a3ac03b5ab4de2 Mon Sep 17 00:00:00 2001 From: Christoph Emsenhuber Date: Thu, 20 Aug 2026 10:49:05 +0200 Subject: [PATCH] TP6-Messung ausfuehrbar machen: Skript + Anleitung fuer den Messenden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Messrunbook beschreibt die Methode, war aber nichts, das man jemandem in die Hand druecken kann. Dazu jetzt zwei Artefakte: - tp6-bufferbloat-messung.sh reproduziert die Methode von 2026-06-16 (3 Flows Saettigung, 24 Pings idle/Last) und misst zusaetzlich die Download-Richtung, die damals nie gemessen wurde. Es prueft vorab die zwei Vorbedingungen, an denen die Messung sonst still scheitert: Default-Route ueber utun* = WARP-Verdacht, und mehr als eine 10.40er-Adresse = dual-homed. Beides nur als Warnung -- die definitive WARP-Kontrolle ist das Menueleisten-Icon, das kein Skript sehen kann. Es misst ausschliesslich und aendert nichts am Netz. - tp6-messung-tutorial.md ist die Anleitung fuer die Person am Kabel (Geli), getrennt in den einfachen Browser-Weg und den exakten Skript-Weg. Das Warum bleibt im Runbook, hier steht nur das Machen. Beide verweisen fuer die Auswertung auf tp6-praemisse-messrunbook.md §3/§5, damit das Abbruchkriterium an genau einer Stelle steht. Co-Authored-By: Claude Opus 5 --- docs/tp6-bufferbloat-messung.sh | 87 +++++++++++++++++++++++++++++++++ docs/tp6-messung-tutorial.md | 79 ++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100755 docs/tp6-bufferbloat-messung.sh create mode 100644 docs/tp6-messung-tutorial.md diff --git a/docs/tp6-bufferbloat-messung.sh b/docs/tp6-bufferbloat-messung.sh new file mode 100755 index 0000000..5ef111b --- /dev/null +++ b/docs/tp6-bufferbloat-messung.sh @@ -0,0 +1,87 @@ +#!/usr/bin/env bash +# +# TP6 — Bufferbloat-Messung (reproduziert die Methode von 2026-06-16) +# +# Misst NUR. Ändert NICHTS am Netz. Läuft auf einem kabelgebundenen Client in VLAN10. +# +# Vorbedingungen (unten geprüft; die definitive WARP-Kontrolle ist das Menüleisten-Icon, +# das kann kein Skript sehen): +# 1. WARP AUS (sonst misst du den Cloudflare-Tunnel, nicht die Liwest-Leitung) +# 2. genau EIN Interface (nicht dual-homed in VLAN10 UND VLAN20) +# 3. kabelgebunden, VLAN10 (IP 10.40.10.x) +# +# Aufruf: bash tp6-bufferbloat-messung.sh +# Ergebnis: Linerate-Probe + drei Ping-Reihen (idle / Upload-Last / Download-Last). + +set -uo pipefail + +TARGET="1.1.1.1" +PINGS=24 +SETTLE=30 # Sekunden, die die Sättigung stabil läuft, bevor gepingt wird +UPLOAD_RATE_KB=430 # ~430 KB/s je Flow × 3 = ~10,3 Mbit (wie 2026-06-16) +UPLOAD_FILE="$(mktemp -t tp6-upload).bin" + +say() { printf '\n\033[1;36m== %s ==\033[0m\n' "$*"; } +warn() { printf '\033[1;33m⚠️ %s\033[0m\n' "$*"; } + +say "0. Vorbedingungen" + +# WARP / Default-Route: physisch (en*) = ok, utun* = VPN/WARP-Verdacht +DEFAULT_IF="$(route -n get default 2>/dev/null | awk '/interface:/{print $2}')" +if [[ "$DEFAULT_IF" == utun* ]]; then + warn "Default-Route über '$DEFAULT_IF' (utun = VPN/WARP). WARP AUSSCHALTEN, dann neu starten." +else + echo "Default-Route über '$DEFAULT_IF' — ok (physisch)." +fi + +# Dual-Homing / VLAN10: genau eine 10.40.x.x-Adresse, und die muss 10.40.10.x sein +BF_IPS="$(ifconfig 2>/dev/null | grep -oE 'inet 10\.40\.[0-9]+\.[0-9]+' | awk '{print $2}')" +BF_COUNT="$(printf '%s\n' "$BF_IPS" | grep -c . || true)" +echo "BF-Adressen (10.40.x.x):"; printf '%s\n' "$BF_IPS" | sed 's/^/ /' +if [[ "$BF_COUNT" -ne 1 ]]; then + warn "$BF_COUNT BF-Adressen aktiv — dual-homed? Genau EIN Interface behalten (VLAN10)." +fi +if ! printf '%s\n' "$BF_IPS" | grep -q '^10\.40\.10\.'; then + warn "Keine 10.40.10.x-Adresse (VLAN10) — kabelgebunden in VLAN10 messen." +fi + +# Upload-Datei (200 MB) anlegen +mkfile 200M "$UPLOAD_FILE" 2>/dev/null || dd if=/dev/zero of="$UPLOAD_FILE" bs=1m count=200 2>/dev/null + +# Linerate-Probe: wie schnell ist der Upload wirklich? (Runbook §2.3/§5.4) +say "Linerate-Probe (10 s voller Upload)" +curl -s -o /dev/null --max-time 10 \ + -w " Upload-Linerate: %{speed_upload} B/s\n" \ + --data-binary @"$UPLOAD_FILE" "https://speed.cloudflare.com/__up" || true +echo " (Referenz 2026-06-16: ~1,28 MB/s = 10,3 Mbit. Deutlich mehr = Tarif geändert → Rate unten anpassen.)" + +# 1. Idle-Baseline +say "1. Idle-Baseline (Netz ruhig)" +ping -c "$PINGS" "$TARGET" + +# 2. Upload-Sättigung + Ping unter Last +say "2. Upload-Sättigung (3 Flows × ${UPLOAD_RATE_KB} KB/s) — ${SETTLE}s stabilisieren" +curl -s -o /dev/null --limit-rate "${UPLOAD_RATE_KB}K" --data-binary @"$UPLOAD_FILE" "https://speed.cloudflare.com/__up" & UP1=$! +curl -s -o /dev/null --limit-rate "${UPLOAD_RATE_KB}K" --data-binary @"$UPLOAD_FILE" "https://speed.cloudflare.com/__up" & UP2=$! +curl -s -o /dev/null --limit-rate "${UPLOAD_RATE_KB}K" --data-binary @"$UPLOAD_FILE" "https://speed.cloudflare.com/__up" & UP3=$! +sleep "$SETTLE" +say "2a. Ping unter Upload-Last" +ping -c "$PINGS" "$TARGET" +kill "$UP1" "$UP2" "$UP3" 2>/dev/null; wait 2>/dev/null + +# 3. Download-Sättigung + Ping unter Last +say "3. Download-Sättigung (3 parallele Downloads) — ${SETTLE}s stabilisieren" +curl -s -o /dev/null "https://speed.cloudflare.com/__down?bytes=2000000000" & DL1=$! +curl -s -o /dev/null "https://speed.cloudflare.com/__down?bytes=2000000000" & DL2=$! +curl -s -o /dev/null "https://speed.cloudflare.com/__down?bytes=2000000000" & DL3=$! +sleep "$SETTLE" +say "3a. Ping unter Download-Last" +ping -c "$PINGS" "$TARGET" +kill "$DL1" "$DL2" "$DL3" 2>/dev/null; wait 2>/dev/null + +rm -f "$UPLOAD_FILE" + +say "Fertig" +echo "Notiere die drei min/avg/max-Zeilen (idle / Upload / Download)." +echo "Gegenprobe im Browser: https://www.waveform.com/tools/bufferbloat" +echo "Ergebnis eintragen in docs/tp6-praemisse-messrunbook.md §5." diff --git a/docs/tp6-messung-tutorial.md b/docs/tp6-messung-tutorial.md new file mode 100644 index 0000000..ada8bfe --- /dev/null +++ b/docs/tp6-messung-tutorial.md @@ -0,0 +1,79 @@ +# TP6-Messung — Schritt für Schritt (für Geli) + +> Das ist die **Anleitung zum Ausführen**. Warum gemessen wird und was das Ergebnis bedeutet, +> steht in [`tp6-praemisse-messrunbook.md`](tp6-praemisse-messrunbook.md). Hier geht es nur ums +> **Machen** — in ~15 Minuten. + +--- + +## Vorher: 3 Dinge, sonst ist die Messung wertlos + +1. **WARP aus.** Menüleiste → Cloudflare-WARP-Icon → **Disconnect**. Ohne das misst du den + Cloudflare-Tunnel statt der Liwest-Leitung, und Ping geht gar nicht erst durch. +2. **Ein Kabel, ein Netz.** Laptop per **Ethernet-Kabel** anstecken, **WLAN aus**. Der Laptop darf + nur **eine** 10.40-Adresse haben — und die muss **10.40.10.x** (VLAN10) sein. Nicht gleichzeitig + in VLAN10 und VLAN20 hängen. +3. **Netz ruhig.** Keine großen Downloads, Backups oder Streams laufen lassen, während gemessen wird. + +--- + +## Weg A — der einfache (5 min, Browser) + +1. Browser öffnen → **https://www.waveform.com/tools/bufferbloat** +2. „Start" drücken, warten bis fertig. +3. **Notieren: den Buchstaben-Grade** (A / A+ / B / C / D) für Upload und Download. + +Das ist die Gegenprobe. Die vergleichbare Zahl kommt aus Weg B. + +--- + +## Weg B — der exakte (reproduziert 2026-06-16) + +Im Ordner `docs/` dieses Repos liegt das Skript. Es prüft die Vorbedingungen, misst die Linerate +und liefert **drei Ping-Reihen**: + +```bash +bash tp6-bufferbloat-messung.sh +``` + +Die drei Reihen, die du am Ende notierst: + +| # | Messung | Bedeutung | +|---|---|---| +| 1 | **idle** | Netz ruhig — die Baseline | +| 2 | **unter Upload-Last** | 3 Flows × ~430 KB/s = ~10,3 Mbit sättigen den Upload | +| 3 | **unter Download-Last** | 3 parallele Downloads sättigen den Download | + +Jede Reihe endet mit einer Zeile `min/avg/max` — **die drei avg-Werte sind die Zahl, auf die es +ankommt.** + +--- + +## Was notieren + +| Messung | min | avg | max | +|---|---|---|---| +| idle | | | | +| Upload-Last | | | | +| Download-Last | | | | + +Plus den **waveform-Grade** aus Weg A. + +--- + +## Was NICHT tun + +- **Nichts am Router ändern.** Die Messung ist read-only. Keine Queues, keine Firewall-Regeln, + keine „nur kurz"-Eingriffe. +- **Nicht über WLAN messen** — Funk-Jitter verfälscht alles. +- **Nicht mit aktivem WARP messen.** + +--- + +## Danach + +Die Zahlen an Christoph schicken. Er trägt sie in `tp6-praemisse-messrunbook.md` §5 ein und +entscheidet anhand der Tabelle in §3: + +- **A/A+ in beide Richtungen** → TP6 wird geschlossen statt gebaut. +- **B oder schlechter** → CAKE ist die Antwort, mit der Zahl als Begründung.