Nätverk — grunderna
Kunna förklara IP, DNS, TLS och latens — och varför en labbcontainer utan nät är säker.
Förkunskaper
- DAPI:er och HTTPkrävs
Intuition
Vad som händer vid ett API-anrop:
- DNS:
api.example.com→93.184.216.34. Ett uppslag, ofta cachat. - TCP: trevägshandskakning med servern (1 rundtur).
- TLS: certifikat verifieras, nycklar utbyts (1–2 rundturer). Nu är trafiken krypterad.
- HTTP: förfrågan skickas, svaret kommer.
Latens = summan av rundturerna plus serverns tid. En rundtur Stockholm–Frankfurt är ~25 ms; Stockholm–Kalifornien ~150 ms. En ny anslutning kostar 3–4 rundturer — därför återanvänder man anslutningar (httpx.AsyncClient som lever, keep-alive). Det är ofta den enskilt största latensvinsten i en klient.
Bandbredd ≠ latens. Mer bandbredd hjälper stora filer; latens sätts av avstånd och ljusets hastighet.
Formellt
Isolering av nätverk som säkerhetsåtgärd. AI-grafens labbcontainrar körs med --network none. Vad det betyder konkret:
| Utan nät kan koden inte | Följd |
|---|---|
| slå upp DNS | ingen kontakt med namngivna tjänster |
| öppna TCP/UDP-anslutningar | ingen exfiltrering av data |
| nå metadatatjänster (169.254.169.254) | inga molnnycklar kan stjälas |
| nå andra containrar | ingen sidledsrörelse |
| hämta paket | inget kan installeras vid körning |
Det är den enskilt starkaste åtgärden mot skadlig kod i en sandlåda, eftersom nästan all skada kräver att något lämnar maskinen eller att något extra hämtas in.
Övriga lager i plattformen (ADR-003): läsbart rotfilsystem, tmpfs för skrivbart, uid 65534, cap-drop ALL, no-new-privileges, cpu-/minnes-/pid-tak och timeout. Nätisoleringen är den som tools/isolation_check.py verifierar vid varje CI-körning — just för att den är så central.
Kod
import socket, time, httpx
print(socket.gethostbyname("example.com")) # DNS-uppslag
# Återanvänd anslutning: mät skillnaden
with httpx.Client() as c:
for i in range(3):
t = time.perf_counter(); c.get("https://example.com"); print(i, round((time.perf_counter()-t)*1000))
# 0 210 ← DNS + TCP + TLS
# 1 35 ← återanvänd anslutning
# 2 34
# Verifiera isolering i en sandlåda
docker run --rm --network none python:3.12-slim \
python -c "import socket; socket.create_connection(('1.1.1.1', 443), timeout=3)"
# OSError: [Errno 101] Network is unreachable ← precis vad som ska hända
Behärskning innebär
- Förklarar IP, DNS, TLS och latens
- Motiverar varför en labbcontainer utan nät är säker
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Wikipedia — Transport Layer Security (CC BY-SA 4.0) — CC BY-SA 4.0
- Docker — network drivers (Apache-2.0) — Apache-2.0