Počítačové sítě 1 Přednáška č.6 – Transportní vrstva
Osnova = Základní vlastnosti transportní vrstvy = Zodpovědnosti transportní vrstvy = Vlastnosti transportní vrstvy
= Protokoly transportní vrstvy = TCP - Transmission Control Protocol = UDP – User Datagram Protocol
= Srovnání ostatních technologií transportní vrstvy
ISO/OSI 7.Aplikační 6.Prezentační 5.Relační 4.Transportní 3.Síťová 2.Datová 1.Fyzická
Základní vlastnosti transportní vrstvy
Vlastnosti transportní vrstvy = Segmentace – dělení aplikačních dat na menší díly (segmenty, datagramy) na straně odesílatele dat = Reassembling – zpětné složení dat na straně příjemce dat = Identifikace aplikace pro kterou jsou data určena = Multiplexing - Umožňuje používat více aplikací komunikujících po síti v jednom časovém okamžiku = Zapoudření dat a přidání hlavičky s řídícími a kontrolními informacemi
Segmentace a reassembling = Před odesláním dělí souvislý datový tok (data flow) z aplikace do segmentů (segmentace) a po přijetí je opět sestavuje (reassembling) Segmentace
ISO/OSI 7.Aplikační
Souvislý tok dat (data flow)
6.Prezentační 5.Relační 4.Transportní 3.Síťová 2.Datová 1.Fyzická
H H
DATA DATA
H H
DATA DATA
Segmentovaná data
Segmentace a reassembling = Před odesláním dělí souvislý datový tok (data flow) z aplikace do segmentů (segmentace) a po přijetí je opět sestavuje (reassembling) Reassembling
ISO/OSI 7.Aplikační
Souvislý tok dat (data flow)
6.Prezentační 5.Relační 4.Transportní
H
DATA
3.Síťová
H
DATA
2.Datová 1.Fyzická
H H
DATA DATA
Segmentovaná data
Identifikace aplikace = Úkolem transportní vrstvy je identifikovat komunikace jednotlivých aplikací a předávat doručená data příslušné aplikaci = Adresace na transportní vrstvě pomocí čísel portů identifikuje jednotlivé konverzace = Číslo portu je 16-bitové - <0; 65535> = V hlavičce segmentu/datagramu transportní vrstvy se vždy nachází číslo zdrojového a cílového portu = Zdrojové číslo portu je spojeno se zdrojovou aplikací na vysílajícím počítači =
Je při prvním požadavku komunikace náhodně vygenerováno z čísel portů, které jsou větší než 1023
= Cílové číslo portu je potom spojeno s cílovou aplikací, které data přijímá =
Je pevně přiděleno dané aplikaci (službě, procesu, daemonu) a klientská stanice ho musí dopředu znát
Adresace pomocí portů = Přidělování portů je řízeno doporučeními organizace IANA =
http://www.iana.org/assignments/service-names-port-numbers/service-names-portnumbers.xml
Název skupiny portů
Rozsah hodnot
Přidělováno
Well-known (dobře známe porty)
<0;1023>
Pro nejprivilegovanější procesy, přidělené tak, že je znají klientské stanice
Registered (registrované porty)
<1024;49151>
Přidělované dynamicky, nyní již nedoporučované, ale přesto stále používané
Private / Dynamic (privátní / dynamické porty)
<49152;65535>
Dynamicky přidělované pouze jako zdrojové porty
Cílový port
Zdrojový port
Příklady well-known portů = Příklady některých služeb využívající well-known porty Číslo portu
Použitý protokol transportní vrstvy
Služba / Aplikace
20
TCP
FTP (data)
21
TCP
FTP (řízení přenosu)
22
TCP
SSH – zabezpečené vzdálené připojení do systému
23
TCP
Telnet – emulace terminálu vzdáleného systému
25
TCP
SMTP – Simple Mail Transfer Protocol
53
TCP, UDP
DNS – Domain Name System
69
UDP
TFTP – Trivial File Transfer Protocol
80
TCP
HTTP – Hyper Text Transfer Protocol
443
TCP
HTTPS – HTTP Secured
520
UDP
RIP (Routing Information Protocol)
Sockety = Sockety = = = =
Určují jednu konkrétní komunikaci konkrétních aplikací mezi konkrétními uzly Jsou tvořeny IP adresou uzlu a číslem portu na kterém naslouchá komunikující aplikace (zdrojového portu) Např. 192.168.100.124:80 V OS Windows je možné zobrazit aktuálně použité sockety příkazem netstat
socket
Stavy socketů = Socket se může nacházet v několika možných stavech Název stavu
Popis stavu
LISTEN
Lokální zařízení čeká na požadavek na připojení (spojení) nějakého vzdáleného zařízení
ESTABLISHED
Socket je otevřen, data mohou být vyměňována pomocí tohoto spojení. Toto je normální stav socketu ve fázi přenosu dat.
TIME_WAIT
Lokální socket čeká implicitní časovou periodu, potom co odeslalo požadavek na ukončení, před tím než se uzavře. V normálním stavu bude trvat mezi 30 – 120 sekundami.
CLOSE_WAIT
Socket je uzavřen, ale čeká na požadavek na ukončení od lokálního uživatele.
SYN_SENT
Lokální socket čeká na odpověď po odeslání požadavku na vzdálený socket. Socket by měl přejít přes tento přechodový stav velmi rychle.
SYN_RECEIVED
Lokální socket čeká na požadované potvrzení vzdáleného socketu. Mnohonásobné sockety ve stavu SYN_RECEIVED mohou indikovat útok typu SYN Flooding.
Protokoly transportní vrstvy
Protokoly transportní vrstvy = Existuje množství protokolů transportní vrstvy = =
Jsou rozdílné zejména v různých poskytovaných vlastnostech Využití konkrétního protokolu závisí na potřebách provozované aplikace
= Mezi nejpoužívanější protokoly patří = = =
TCP – funguje spojovaně a spolehlivě, pozměňuje původní vlastnosti IP protokolu (vhodné pro typ služeb vyžadující vysokou spolehlivost přenosu) UDP – funguje nespojovaně a nespolehlivě (vhodné pro datově náročné přenosy s tolerancí nespolehlivosti) Další možné protokoly RTP, RTCP, SCTP, RTSP, RVSP – zajišťující obvykle specifické požadavky aplikací na přenos v reálném čase (multimédia, videokonference, VoIP...)
Transmission Control Protocol
Transmission Control Protocol
= TCP – Transmission Control Protocol = =
PDU jednotka je označována jako segment Definován v dokumentu RFC 793 (v roce 1981) =
=
=
=
http://www.ietf.org/rfc/rfc793.txt
Spojový protokol – před samotným odesláním dat je navázáno spojení (three way handshake) s transportní vrstvou na cílové stanici. Spojení je také před finálním ukončením komunikace ukončeno „dohodou“. Spolehlivý protokol – do hlavičky každého segmentu vkládá pořadové číslo segmentu a příjemce pak zpětně potvrzuje (acknowledment) přijetí určitého bloku těchto segmentů. Nepotvrzené segmenty jsou odeslány znovu. Spojovost a spolehlivost však zvyšuje režii tohoto protokolu = = =
Je potřeba více řídících informací (= větší hlavička segmentu, více dat na síti) Před spojením je potřeba „dohodnout“ spojení a to zpomaluje komunikaci Potvrzování segmentů zatěžuje síť a snižuje tak její propustnost
Hlavička TCP protokolu
Hlavička TCP protokolu
= Source port – zdrojový port, 16-bitů = Destination port – cílový port, 16-bitů =
Identifikuje cílovou aplikaci nebo protokol vyšší vrstvy
= Sequence number – 32 bitů = = =
Je pořadové číslo prvního bajtu TCP segmentu v toku dat od odesílatele k příjemci 32-bitů, <0; 232 - 1>, pokud překročí horní hranici pokračuje cyklicky od 0 Počáteční hodnota je náhodně vygenerovaná z uvedeného intervalu
= Acknowledgement number – 32 bitů =
=
Potvrzuje přenos bajtů. Obsahuje pořadové číslo prvního bajtu očekávaných aplikačních dat v dalším segmentu. Dopředné potvrzování. Pokud dostanu ACK=32, znamená to, že očekávám segment se sekvenčním číslem 32.
= Data offset – 4 bity =
Délka hlavičky v čtyřbajtech (32-bitových slov)
Hlavička TCP protokolu
= Reserved =
Rezervováno pro budoucí využití
= Flags – příznaky, které řídí správu relace (jednobitová pole) = = = = = =
SYN – požadavek na synchronizaci nebo vytvoření relace před přenesením aplikačních dat ACK – potvrzení přijatých dat od příštího očekávaného bajtu FIN – ukončení spojení RST – odmítnutí požadovaného spojení nebo reset stávajícího spojení URG – urgentní, prioritní PSH – označení, že segment nese aplikační data, která mají být předána aplikaci. Použití tohoto příznaku není ustáleno.
= Window size – 16 bitů = =
Kolik bajtů je posíláno na jedno potvrzení Zároveň určuje minimální velikost vstupní vyrovnávací paměti na straně příjemce
= Checksum – 16 bitů =
Kontrolní součet hlavičky a aplikačních dat
= Urgent pointer – 16 bitů =
Ukazuje na první bajt prioritních dat
Spojovost protokolu TCP
= Před prvním odesláním dat je nejprve navázáno spojení s transportní vrstvou cílového uzlu metodou Three-way handshake Server 2) takésegmentem vygeneruje číslo 1) Klient vygeneruje náhodnésnáhodné číslo (361), 3) SERVER odpoví nastaveným (1281), kterénapoužije jako startovací které použije jako startovací ACK bitem 1 (ACK=1), sesekvenční svým původním sekvenční pořadové číslo (SEQ=1281) pořadové číslo (SEQ=361) odesílaného sekvenčním číslem +1 (SEQ=362) a s bajtu; odesílaného bajtu; vytvoření startovacího vytvoření startovacího pořadového Acknowledgement number jako se čísla pořadového bajtu označí odesílaného bajtuodesílaného označí v TCP segmentu sekvenčním čísla číslem serveru navýšeným o v TCP segmentu nastavením nastavením příznaku SYN=1příznaku SYN=1 jedničku (ACKN=1282). příznak ACK nastaví na 1 (ACK=1) a jako Acknowledgement number použije sekvenční číslo přijaté od klienta inkrementované Tímto je navázáno spojení a stanice o jedničku (ACKN=362) můžou posílat aplikační data.
port 80
Klient port 1485 SYN_SENT
ESTABLISHED
LISTEN SYN=1 SEQ=361
SYN=1 ACK=1 SEQ=1281 ACKN=362
SYN_RCVD
ACK=1 SEQ=362 ACKN=1282
ESTABLISHED
Spojovost protokolu TCP
= Pro ukončení spojení (pro každý jeho směr) se používá FOUR WAY HANDSHAKE – v poli Flags je nastaven příznak FIN (Finish), Server který musí být druhou stranou potvrzen (ACK). port 80
Klient
1) Server Klient potvrdí odešle na server segment sbitem FIN port 1485 2) odpoví segmentem s sACK 3) také odešle segment FIN bitem 4) Klient ukončení spojení segmentem na 1. (FIN=1) 1 (ACK=1). nastaveným 1, aby oznámil sbitem ACK nastaveným bitem na nastaveným na 1. ukončení (ACK=1) FIN_SENT spojení.
FIN=1 SEQ=361
ESTABLISHED
FIN_RCVD ACK=1
FIN=1
FIN_SENT
FIN_RCVD ACK=1
CLOSED
CLOSED
TCP – spolehlivý protokol
= Jednou z funkcí TCP protokolu je zajištění, že veškeré odeslané segmenty dorazí do cíle. = = =
Každý odeslaný segment obsahuje v hlavičce pole SN (Sequence Number) – což je pořadové číslo prvního bajtu v daném segmentu. Příjemce potvrzuje přijetí segmentu pomoci pole Acknowledgment number – což je číslo následujícího očekávaného bajtu. Ppříjemce potvrzuje správné přijetí všech bajtů do hodnoty tohoto pole mínus 1. Hodnota pole Acknowledgment number je pak obsažena v poli SN následujícího odeslaného segmentu
TCP – spolehlivý protokol
= Aby se nemuselo potvrzovat přijetí každého segmentu zvlášť – což by způsobovalo nárůst přenášených řídících dat přes síť – existuje možnost odeslat několik segmentů, bez čekání na jejich potvrzení = Množství odeslaných dat v segmentech (bez nutnosti potvrzení) je dáno hodnotou pole WINDOWS SIZE = Optimalizací této hodnoty pro každé konkrétní spojení, je možné zvýšit rychlost přenosu = Hodnota Windows size je měněna příjemcem (serverem), podle aktuálních parametrů přenosu = =
Pokud jsou časté výpadky je zmenšena Pokud se výpadky téměř nevyskytují, je možné ji zvětšit
= Tato vlastnost se nazývá řízení toku dat (flow control)
User Datagram Protocol
User Datagram Protocol
= UDP – User Datagram Protocol = =
PDU jednotka je označována jako datagram Definován v dokumentu RFC 768 (v roce 1980) =
=
=
=
http://www.ietf.org/rfc/rfc768.txt
Nespojový protokol – před odesláním dat nevytváří žádné spojení, neřídí ho ani neukončuje. Pokud přijme od aplikační vrstvy data k odeslání, segmentuje je a odesílá Nespolehlivý protokol – nepoužívá sekvenční čísla ani potvrzování. To vede k možné ztrátě dat. Tento problém neřeší, ale přenechává protokolům vyšší vrstvy (pokud je to potřebné). Nespojovost a nespolehlivost velmi snižuje režii tohoto protokolu = = =
Ke svému fungování potřebuje minimální množství řídících informací (= malá hlavička a menší objem dat vyslaných na síť) Tím, že se nezdržuje vytvářením spojení, doručí data rychleji Nepotvrzováním snižuje velikost dat putující sítí a tím zvyšuje její propustnost
Hlavička UDP protokolu
= Source port – zdrojový port, 16-bitů = Destination port – cílový port, 16-bitů =
Identifikuje cílovou aplikaci nebo protokol vyšší vrstvy
= Length – 16-bitů =
Vyjadřuje délku datagramu (UDP hlavičky + aplikačních dat)
= Checksum – 16 bitů =
Kontrolní součet hlavičky a aplikačních dat
Vlastnosti UDP protokolu
= UDP hlavička neobsahuje informaci o pořadí datagramu, tudíž na straně příjemce nedochází ke znovusložení dat ve správném pořadí (reassembling) =
=
Využití má pro služby a protokoly, které preferují rychlost komunikace na úkor ztráty části dat nebo nedodržení pořadí složení datagramů do výstupního proudu dat například u IP telefonie (VoIP) nebo u streamování videa Mezi aplikační protokoly, využívající UDP patří např. = = = =
DNS (Domain Name Systém) DHCP (Dynamic Host Configuration Protocol) RIP (Routing Information Protocol) TFTP (Trivial File Tranfer Protocol)
Srovnání ostatních technologií transportní vrstvy
Ostatní L4 protokoly
= Existují i další protokoly procující na transportní vrstvě, většinou používané pouze úkzkou skupinou aplikací =
UDP Lite = = = =
=
SCTP - Stream Control Transmission Protocol = =
=
Kombinace vlastností TCP (spolehlivost) a UDP (nespojovost) RFC 4960 - http://tools.ietf.org/html/rfc4960
DCCP - Datagram Congestion Control Protocol = =
=
UDP ochuzené o checksum kontrolu Raději doručí poškozená data než žádná Využívají ho moderní aplikační protokoly a kodeky pro VoIP RFC 3828 - http://tools.ietf.org/html/rfc3828
Obecně podobný protokolu UDP doplněný o jednoduché potvrzování a kontrolu přehlcení síťe RFC 4340 - http://tools.ietf.org/html/rfc4340
RUDP - Reliable User Datagram Protocol = = =
Obecně podobný protokolu UDP doplněný o znovuodesílání nedoručených datagramů a ochranu proti overbufferingu Verze 1 RFC 908 - http://tools.ietf.org/html/rfc908 Verze 2 RFC 1151 - http://tools.ietf.org/html/rfc1151
Děkuji za pozornost