English version is HERE
V této sekci si projdeme rozdíly mezi dvěma běžnými protokoly – TCP a UDP. TCP (Transmission Control Protocol) je nejběžněji používaný protokol. To je do značné míry proto, že zatímco je zpravidla pomalejší než UDP, TCP je spolehlivější a umožňuje korekci chyb. Díky tomu je ideální pro načítání webových stránek a dalších citlivých aplikací, kde chybu nelze tolerovat. UDP (User Ddatagram Protocol) je snazší a rychlý, což je dobré například pro audio, video streamování a hraní her. Podívejme se tedy detailně na každý faktor, který ovlivňuje přenosovou rychlost při použití TCP a UDP.
Protokol TCP je složitější protokol. UDP posílá zprávy, aniž by byly zatěžovány funkcemi, jako jsou možnosti obnovení. To vede k rozdílné velikosti záhlaví. Standardní velikost záhlaví paketu TCP má velikost 20 až 60 bajtů. Záhlaví paketu UDP se skládá pouze z 8 bajtů pro každý paket (Obr.1).
Možná jste si všimli, že jsme TCP i UDP pojmenovali jako „pakety“, ačkoli na ilustraci se objevily termíny „TCP segment“ a „UDP datagram“. Tyto termíny jsou převzaty z přesné terminologie, zatímco v dnešní době se termín „TCP / UDP paket“ také objevuje formálně i neformálně. V našem případě přesné pojmenování není hlavním bodem, ani neovlivňuje porozumění problematiky, takže dále budeme také používat termín „paket“, i když máme na mysli TCP segment nebo UDP datagram.
Jedním z principů UDP je to, že předpokládáme, že všechny pakety odeslané jsou přijaty druhou stranou.
Teoreticky nebo pro nějaké specifické protokoly (kde není kontrola prováděna na jiné vrstvě apod.) platí, že rychlost, kterou mohou být pakety odesílány odesílatelem, není ovlivněna časem vyžadovaným na doručení daných paketů cílovému bodu. (= Latencí). Nehledě na zpoždění odesílatel pošle určité množství paketů za vteřinu v závislosti na jiných faktorech (aplikace, operační systém apod.)
TCP je složitější protokol, protože integruje mechanismus, který kontroluje, zda jsou všechny pakety správně doručeny. Tento mechanismus se nazývá acknowledgment (potvrzení): spočívá v tom, že přijímač vysílá konkrétní paket nebo flag (příznak) odesílateli, aby potvrdil správný příjem paketu. To znamená, že v nejjednodušším scénáři odesílatel nebude odesílat další paket, dokud nebude přijato potvrzení z dříve odeslaného paketu.
Z důvodu efektivity se nepotvrzuje každý paket jeden po druhém; odesílatel nečeká na každé potvrzení před odesláním nového paketu. Počet paketů, které lze odeslat před přijetím odpovídajícího potvrzovacího paketu, je skutečně řízen hodnotou nazvanou TCP Congestion Window (Okno Přetížení TCP).
V ideálním prostředí odešle odesílatel první dávku paketů (odpovídající TCP Congestion Window) a po přijetí potvrzovacího paketu zvětší TCP Congestion Window; postupně se zvýší počet paketů, které lze odeslat v daném časovém období, čímž se zvýší propustnost (obr. 2). Latence (=Zpoždění před přijetím potvrzovacích paketů) bude mít dopad na to, jak rychle se zvýší TCP Congestion Window.
Mechanismus TCP Congestion Window řeší chybějící potvrzovací pakety následovně: pokud chybí potvrzovací paket po určité době, která se nazývá Retransmission Timeout (RTO), paket se považuje za ztracený a TCP Congestion Window se sníží na polovinu (odtud také propustnost); velikost TCP Congestion Window se pak může znovu spustit, pokud jsou acknowledgment pakety přijaty správně (Obr.3.).
Ztráta paketů bude mít na rychlost přenosu dat dva účinky:
Dalším významným rozdílem mezi TCP a UDP je to, že TCP hlídá, zda data dorazí ve správném pořadí od uživatele k serveru (a naopak), zatímco UDP nekomunikuje mezi koncovými body, ani nekontroluje připravenost přijímače. Když přijímající část získá data založená na protokolu TCP ve špatném pořadí, dojde k chybám (out-of-order error).
Na obr. 5 můžete vidět vliv latence a ztráty rámců na propustnost TCP.
Kde FLR (Frame Loss Ratio) = ztrátovost rámců; RTT (Round-Trip Time) = obousměrné zpoždění. Z grafu jste si mohli všimnout, že propustnost téměř není ovlivněna latencí, pokud nejsou žádné ztráty. Může to znít kontroverzně, ale neznamená to, že latence neovlivňuje propustnost TCP, ale spíše ukazuje, jak efektivní může být škálování oken TCP. Podívejme se na obrázek. 6, kde jsou hodnoty propustnosti a velikosti TCP okna sloučeny do jednoho grafu.
Testy byly provedeny na síti v laboratoři PROFiber s využitím 2 měřících přístrojů EXFO Power Blazer (zapojených v režimu Dual Test Set) a generátoru poruch Albedo NetStorm . Zpoždění bylo nastaveno na pevnou hodnotu bez přítomnosti wanderu nebo jitteru, aby se demonstroval vliv konkrétních parametrů na propustnost. Výsledky by tedy neměly být srovnávány s výsledky ze skutečné sítě, kde obvykle existuje určité kolísání latence (jitter).