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č.
- t = 0 → odesláno
Regulátor pošle žádanou hodnotu. Perioda smyčky je 1 ms, takže na odpověď je milisekunda.
- 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í.
- 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.
- 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.
- 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éž.
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.
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
| TCP | UDP | ||
|---|---|---|---|
| ztracený paket | pošle znovu | je pryč | |
| zpoždění při ztrátě | 1 okruh až 200 ms+ | žádné | |
| pořadí | zaručené | není | |
| hlavička | 20 B | 8 B | |
| vhodné pro | soubor, stránku, konfiguraci | periodická 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.
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.