Transportní vrstva
Poskytuje transportní služby pro kontrolu celistvosti dat: kontrolované spojení spolehlivým protokolem TCP (transmission control protocol) nebo nekontrolované spojení nespolehlivým protokolem UDP (user datagram protocol). Transportní vrstva je implementována až v koncových zařízeních (počítačích) a umožňuje přizpůsobit chování sítě potřebám aplikace.
![]()
Technický přehled
TCP je spojově orientovaný protokol pro přenos toku bajtů na transportní vrstvě se spolehlivým doručováním. V současnosti je zdokumentován v IETF RFC 793.
V sadě protokolů Internetu je TCP prostřední vrstvou mezi IP protokolem pod ním a aplikací nad ním. Aplikace ke vzájemné komunikaci využívají spolehlivé spojení na způsob roury, zatímco IP protokol neposkytuje takové streamy, ale jen nespolehlivé pakety. TCP používá služby protokolu IP; opakovaným odesíláním ztracených nebo poškozených paketů přes nespolehlivou síť zajišťuje spolehlivost a přeuspořádáváním přijatých paketů zajišťuje jejich správné pořadí. Tím TCP plní úlohu transportní vrstvy ve zjednodušeném modelu ISO/OSI počítačové sítě.
| Bity | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | zdrojový port | cílový port | ||||||||||||||||||||||||||||||
| 32 | pořadové číslo | |||||||||||||||||||||||||||||||
| 64 | potvrzovací číslo | |||||||||||||||||||||||||||||||
| 96 | offset dat | rezervováno | příznaky | okénko | ||||||||||||||||||||||||||||
| 128 | kontrolní součet | Urgent Pointer | ||||||||||||||||||||||||||||||
| 160 | volby (volitelné) | |||||||||||||||||||||||||||||||
| 192 | volby (pokračování) | výplň (do 32) | ||||||||||||||||||||||||||||||
| 224 | data | |||||||||||||||||||||||||||||||
Aplikace posílá proud (stream) bajtů TCP protokolu k doručení sítí, TCP rozděluje proud bajtů do přiměřeně velkých segmentů. (Velikost segmentů je určena parametrem MTU (maximum transmission unit) linkové vrstvy sítě, ke které je počítač připojen.) TCP pak předá takto vzniklé pakety IP protokolu k přepravě internetem do TCP modulu na druhé straně TCP spojení. TCP ověří, že se pakety neztratily tím, že každému paketu přidělil pořadové číslo, které se také použije k ověření, že data byla přijata ve správném pořadí.
TCP modul na straně příjemce posílá zpět potvrzení pro pakety které byly úspěšně přijaty. Pokud by se odesilateli potvrzení nevrátilo do rozumné doby (dané obousměrným zpožděním, anglicky round-trip time, RTT), vypršel by odesilatelův časovač a (pravděpodobně ztracená) data by vyslal znovu.
TCP protokol ověřuje, zda přenesená data nebyla poškozena šumem tím, že před odesláním spočte kontrolní součet, uloží jej do odesílaného paketu a příjemce kontrolní součet vypočte znovu a ověří, že se shodují.
TCP porty
K rozlišení komunikujících aplikací používá TCP protokol čísla portů. Každá strana TCP spojení má přidruženo 16bitové bezznaménkové číslo portu (existuje 65535 portů) přidělené aplikaci. Porty jsou rozčleněny do třech skupin: dobře známé, registrované a dynamické/privátní. Seznam dobře známých portů je přiřazován organizací Internet Assigned Numbers Authority (IANA) a jsou typicky používané systémovými procesy. Dobře známé aplikace běžící jako servery a pasivně přijímající spojení typicky používají tyto porty. Několik příkladů: FTP (port 21 a 20), SMTP (port 25), DNS (port 53) a HTTP (port 80). Registrované porty jsou typicky používané aplikacemi koncových uživatelů při otevírání spojení k serverům jako libovolná čísla zdrojových portů, ale také mohou identifikovat služby. Dynamické/privátní porty mohou být také používány koncovými aplikacemi, ale není to obvyklé.
Číslování bytů
Pro zajištění spolehlivého přenosu proudu dat v obou směrech, bez výpadků, opakování nebo přehazování dat, TCP používá zpětnou vazbu s automatickým opakováním, pro jejíž podporu jsou v TCP hlavičce dvě 32bitová pole a příznak ACK. Na rozdíl od jiných protokolů, které číslují datagramy, TCP čísluje jednotlivé byty. V poli pořadové číslo (anglicky sequence number) je číslo prvního bytu v poli data (příp. číslo následujícího bytu, pokud je pole data prázdné). Pokud je nastaven příznak ACK, je v poli potvrzovací číslo (anglicky acknowledgment number) číslo dalšího bytu, který potvrzující strana očekává od protistrany; jeho odesláním jsou potvrzena všechna přijatá předchozí data v proudu.
Protože TCP je spojovaná transportní služba, musí se před odesíláním dat navázat spojení mezi klientem a serverem. K tomu slouží trojcestný handshaking (anglicky three-way handshake). V průběhu navazování spojení si každá z obou komunikujících stran náhodně zvolí pořadové číslo (anglicky sequence number), od kterého (zvětšeného o 1) bude číslovat odesílané byty. Úplně první datagram, který odesílá každá strana při navazování spojení, má nastaven příznak SYN.
Navázání spojení probíhá ve třech krocích:
- Klient odešle na server datagram s nastaveným příznakem SYN a náhodně vygenerovaným pořadovým číslem (x), potvrzovací číslo=0.
- Server odešle klientovi datagram s nastavenými příznaky SYN a ACK, potvrzovací číslo=x+1, pořadové číslo je náhodně vygenerované (y)
- Klient odešle datagram s nastaveným příznakem ACK, pořadové číslo=x+1, číslo odpovědi=y+1.
Obě strany si pamatují pořadové číslo vlastní i protistrany.
Používají se totiž i pro další komunikaci a určují pořadí paketů. Když
úspěšně proběhne trojcestný handshaking, je spojení navázáno a zůstane
tak až do ukončení spojení. To se může zneužít na SYN flood útok.
Ukončení spojení probíhá podobně jako jeho navázání. Používá se k tomu příznaků FIN a ACK:
- Strana, která nechce posílat další data, odešle datagram s nastaveným příznakem FIN
- Protistrana odpoví datagramem s nastaveným příznakem ACK s potvrzovacím číslem o jedničku větším, než bylo pořadové číslo v datagramu s příznakem FIN (jako kdyby protistrana poslala místo FIN jeden byte dat)
- Druhá strana, která ukončuje posílání dat, odešle datagram s nastaveným příznakem FIN
- Protistrana odpoví datagramem s nastaveným příznakem ACK
Po prvních dvou krocích může druhá strana pokračovat v posílání dat. Pokud žádná data posílat nebude, mohou být kroky 2 a 3 sloučeny. Teprve po těchto čtyřech krocích je spojení ukončeno. Z hlediska číslování potvrzovaných bytů se příznaky SYN a FIN chovají jako jeden byte dat.
UDP (User Datagram Protocol) je jeden ze sady protokolů internetu. O protokolu UDP říkáme, že nedává záruky na datagramy, které přenáší mezi počítači v síti. Někdy je označován jako nespojovaný nespolehlivý, ale správněji by mělo být bez záruky doručení, což je hlavní rozdíl proti protokolu TCP.
Protokol UDP je vhodný pro nasazení, které vyžaduje jednoduchost, malá režie nebo pro aplikace pracující systémem otázka-odpověď (např. DNS, sdílení souborů v LAN). Jeho bezstavovost je užitečná pro servery, které obsluhují mnoho klientů nebo pro nasazení, kde se počítá se ztrátami datagramů a není vhodné, aby se ztrácel čas novým odesíláním (starých) nedoručených zpráv (např. VoIP, online hry).
UDP protokol je protokol transportní vrstvy orientovaný na zprávy a byl uveden v RFC 768.
V sadě protokolů Internetu poskytuje UDP velmi jednoduché rozhraní mezi síťovou vrstvou pod a aplikační vrstvou nad. UDP neposkytuje žádné záruky doručení a odesilatelova UDP vrstva si u jednou už odeslaných zpráv neudržuje žádný stav. UDP pouze přidává kontrolní součty a schopnost roztřiďovat UDP pakety mezi více aplikací běžících na stejném počítači.
| + | bity 0 - 15 | 16 - 31 | ||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | zdrojový port | cílový port | ||||||||||||||||||||||||||||||
| 32 | délka | kontrolní součet | ||||||||||||||||||||||||||||||
| 64 | data | |||||||||||||||||||||||||||||||
UDP hlavička se skládá jen ze 4 políček, z nichž 2 jsou volitelná. Políčka zdrojového a cílového portu jsou šestnáctibitová a identifikují odesílající a přijímající proces. Protože UDP je bezestavový a odesilatel nemusí vyžadovat odpověď, zdrojový port je volitelný. Pokud není použit, zdrojový port by měl být nastaven na nulu. Po číslech portů následuje povinná délka UDP paketu včetně dat, v bytech. Minimální hodnota činí 8 bajtů. Zbývající políčko hlavičky tvoří šestnáctibitový kontrolní součet pokrývající hlavičku i data. Tento součet je možné vynechat, ale v praxi se téměř vždy používá.
Kvůli chybějícím zárukám se UDP aplikace musí smířit s nějakými ztrátami, chybami nebo duplikacemi. Některé aplikace (jako třeba TFTP) mohou podle potřeby přidávat jednoduchý mechanismus spolehlivosti do aplikační vrstvy. Aplikace používající UDP nejčastěji opravný mechanismus nepotřebují, a dokonce jím mohou být zdržovány. Pokud aplikace vyžaduje vysoký stupeň spolehlivosti, může se místo něj použít TCP nebo opravné kódy.
Protože UDP postrádá mechanismus předcházení a regulace zahlcení sítě, je nutné nadbytečné UDP datagramy na routerech zahazovat. Jako částečné řešení tohoto problému je navrhován protokol DCCP (Datagram Congestion Control Protocol).
Ačkoliv je celkové množství UDP provozu na typické síti jen v řádu procent, je UDP používán řadou klíčových služeb včetně DNS, SNMP, DHCP a RIP.
Porty
UDP používá porty, aby bylo možné rozlišit v počítači jednotlivé aplikace a správně jim doručit data, i když jich komunikuje v počítači více. Port je 16bitová hodnota, která umožňuje používat porty z rozsahu 0-65535. Port 0 je rezervován, ale je možné ho použít, pokud odesílající proces neočekává žádnou odpověď.
Porty 1-1023 jsou tzv. dobře známé (anglicky well known ports) a na Unixech a odvozených operačních systémech jsou potřeba práva uživatele root, aby je bylo možné použít. Porty 1024-49151 jsou registrované porty. Porty 49152-65535 jsou používány pro komunikaci klienta se serverem.
Rozdíl mezi TCP a UDP
TCP je spojově orientovaný protokol což znamená, že k navázání "end-to-end" komunikace potřebuje, aby proběhl mezi klientem a serverem tzv. "handshaking". Poté, co bylo spojení navázáno, data mohou být posíláná oběma směry. Charakteristické vlastnosti TCP protokolu jsou:
- spolehlivost – TCP používá potvrzování o přijetí, opětovné posílání a překročení časového limitu. Pokud se jakákoliv data ztratí po cestě, server si je opětovně vyžádá. U TCP nejsou žádná ztracená data, jen pokud několikrát po sobě vyprší časový limit, tak je celé spojení ukončeno.
- zachování pořadí – Pokud pakety dorazí ve špatném pořadí, TCP vrstva příjemce se postará o to, aby se některá data pozdržela a finálně je předala správně seřazená.
- vyšší režie – TCP protokol potřebuje např. tři pakety pro otevření spojení, umožňuje to však zaručit spolehlivost celého spojení.
UDP je jednodušší protokol založený na odesílání nezávislých zpráv. Charakteristika protokolu:
- bez záruky – Protokol neumožňuje ověřit, jestli data došla zamýšlenému příjemci. Datagram se může po cestě ztratit. UDP nemá žádné potvrzování, přeposílání ani časové limity. V případě potřeby musí uvedené problémy řešit vyšší vrstva.
- nezachovává pořadí – Při odeslání dvou zpráv jednomu příjemci nelze předvídat, v jakém pořadí budou doručeny.
- jednoduchost – Nižší režie než u TCP (není zde řazení, žádné sledování spojení atd.).
zdroj: cs.wikipedia.org