NetLab jak pomalé to může být

Tohle je statická kopie kapitoly pro vyhledávače. Interaktivní verze má animované obrázky, kontrolní otázky a tlačítka, která příklad načtou do kalkulačky.

TCP a UDP: spolehlivost, která stojí čas

Nad IP, které neslibuje nic, se dá postavit dvojí. TCP doplní všechno, co IP nemá: pořadí, potvrzení, opakování, řízení toku. UDP nedoplní skoro nic — přidá jen čísla portů a kontrolní součet.

Reflexivní odpověď zní „spolehlivost je lepší“. V regulační smyčce je to obráceně, a stojí za to rozumět proč.

cykly smyčky po 1 msodeslánozahozeno…a takhle dál ještě 188×200 ms = 200 zmeškaných cyklůRegulátor mezitím neřídil. Data dorazila správná a k ničemu.
  1. t = 0  →  odesláno

    Regulátor pošle žádanou hodnotu. Perioda smyčky je 1 ms, takže na odpověď je milisekunda.

  2. ztraceno  ·  nikdo nic neví

    Přepínač měl plnou frontu a zahodil ho. Nikomu to neřekl — zahození JE způsob, jak síť řídí zahlcení.

  3. t = 1 × RTT  →  poslat znovu

    Ve šťastném případě přijdou tři duplicitní potvrzení a odesílatel pošle znovu hned. To je jeden okruh navíc.

  4. t = 200 ms  =  200 zmeškaných cyklů

    Když se ztratí i ta potvrzení, nezbývá než timeout. Linux ho má zespodu omezený na 200 ms.

  5. spolehlivě  ≠  včas

    Data nakonec dorazí. Jenže regulátor je nepotřeboval správně — potřeboval je VČAS, a ta dvě slova nejsou totéž.

Co udělá TCP, když se paket ztratí — a co to udělá se smyčkou, která běží každou milisekundu.

Opakování je pomalejší než celý cyklus

Nejlepší případ: odesílatel pozná ztrátu z duplicitních potvrzení a pošle znovu za jeden okruh. Nejhorší případ je timeout, a ten má v Linuxu spodní mez 200 ms.

200 ms  =  200 zmeškaných cyklů smyčky s periodou 1 msa to je nejlepší z těch špatných čísel

A teď to podstatné: ta data už stejně nikoho nezajímají. Vzorek polohy z doby před dvěma sty milisekundami je pro regulátor bezcenný — nejenže je zastaralý, ale zasáhnout podle něj je horší než nezasáhnout vůbec. TCP se snaží doručit něco, co má mezitím nulovou hodnotu, a blokuje přitom všechno, co přišlo po tom (head-of-line blocking).

Proto se v regulaci jezdí na UDP

TCPUDP
ztracený paketpošle znovuje pryč
zpoždění při ztrátě1 okruh až 200 ms+žádné
pořadízaručenénení
hlavička20 B8 B
vhodné prosoubor, stránku, konfiguraciperiodická data, zvuk, video

U periodických dat je ztráta jednoho vzorku samoopravná: za milisekundu přijde další, novější. Aplikace si počítá čísla vzorků sama a pozná, že jeden chybí — a rozhodne se, co s tím, protože to ví líp než transportní vrstva.

A jedno číslo pro zbytek světa: Mathisova mez

Mimo regulaci má TCP jinou nepříjemnost, kterou stojí za to znát: jeden tok TCP nedokáže využít rychlou linku s dlouhým okruhem, když na ní byť jen občas mizí pakety.

rychlost ≈ MSS · √1,5 / (RTT · √ztrátovost)Mathisova mez

Při okruhu 100 ms a ztrátovosti 0,01 % je strop kolem 14 Mb/s — na lince libovolné rychlosti. Odtud pochází to, že desetigigabitová linka přes oceán „nefunguje“, dokud se nezvětší okna a nepoužije se víc toků naráz.

Vzorce v této kapitole

Mathis — mez propustnosti jednoho toku TCP
v ≈ MSS·√1,5 / (RTT·√p) [bit/s] Mathis 1997