Poˇ c´ıtaˇ cov´ e s´ıtˇ e pˇredn´aˇsky
Jan Outrata ˇr´ıjen–listopad 2008
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
1 / 34
Transportn´ı vrstva
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
2 / 34
Transportn´ı protokoly “proˇc dva protokoly?” s´ıt’ov´e protokoly pˇrepravuj´ı data mezi libovoln´ymi uzly (poˇc´ıtaˇci) v s´ıti, adresuj´ı s´ıt’ov´a rozhran´ı uzlu transportn´ı protokoly pˇrepravuj´ı data mezi dvˇema aplikacemi bˇez´ıc´ımi na poˇc´ıtaˇc´ıch, adresuj´ı aplikaci na poˇc´ıtaˇci zprostˇredkov´avaj´ı transparentn´ı spojen´ı s poˇzadovanou kvalitou mezi aplikacemi (klienty) v r´amci jednoho s´ıt’ov´eho zaˇr´ızen´ı (poˇc´ıtaˇce)
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
3 / 34
Transportn´ı protokoly Sluˇ zby spojovan´ a (connection oriented): mezi aplikacemi nav´az´ano spojen´ı (vytvoˇren virtu´aln´ı okruh), plnˇ e duplexn´ı ztracen´a nebo poˇskozen´a znovu vyˇz´ad´ana – “spolehliv´ a” sluˇ zba integrita dat zabezpeˇcena kontroln´ım souˇctem zpracov´av´a souvisl´ y proud/tok (uspoˇr´ adan´ ych) dat od vyˇsˇs´ı vrstvy (stream)
nespojovan´ a (connectionless): nenavazuje spojen´ı data odesl´ana, nezaruˇcuje se doruˇcen´ı ani znovuzas´ıl´an´ı ztracen´ych nebo poˇskozen´ych dat (ponech´ano na vyˇsˇs´ım protokolu) – “nespolehliv´ a” (datagramov´ a) sluˇ zba integrita dat zabezpeˇcena kontroln´ım souˇctem zpracov´av´a ˇ c´ asti dat od vyˇsˇs´ı vrstvy (datagramy), rozdˇelen´ı toku dat na datagramy ˇreˇs´ı vyˇsˇs´ı vrstva Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
4 / 34
Transportn´ı protokoly Port identifik´ator aplikace (aplikace jich m˚ uˇze pouˇz´ıvat v´ıc), transportn´ı adresa ˇc´ıslo d´elky 2 B, 0 aˇz 65535 porty 0 – 1023 jsou tzv. privilegovan´ e (m˚ uˇze je pouˇz´ıt pouze privilegovan´a aplikace, napˇr. privilegovan´eho uˇzivatele), ostatn´ı neprivilegovan´ e (m˚ uˇze pouˇz´ıt kdokoliv, pokud je voln´y) pro bˇeˇzn´e sluˇzby (aplikaˇcn´ı protokoly) Internetu vˇseobecnˇe zn´am´a “standarn´ı” (well-known) ˇc´ısla port˚ u pˇridˇelovan´a IANA, privilegovan´ych (aplikace typicky spouˇstˇena jako syst´emov´a sluˇzba privilegovan´eho uˇzivatele) i neprivilegovan´ych ˇ ´I: zjiˇstˇen´ı ˇc´ısel port˚ CVICEN u nejzn´amˇejˇs´ıch sluˇzeb Internetu, napˇr. jmenn´e (aplikaˇcn´ı protokol DNS), vzd´alen´eho pˇrihl´aˇsen´ı (Telnet, SSH), pˇrenosu dat (FTP(S), SMB), poˇstovn´ı (SMTP, POP3(S), IMAP(S)), webov´e (HTTP(S)), a LAN (DHCP, SNMP) Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
5 / 34
Transportn´ı protokoly aplikace jednoznaˇcnˇe urˇcena: s´ıt’ovou (IP) adresou, ˇc´ıslem portu a transportn´ım protokolem (TCP/UDP), tzv. adresa socketu (s´ıt’ov´eho rozhran´ı Socket API) Datagram/Segment z´akladn´ı jednotka pˇrenosu, transportn´ı paket/datagram/segment, vkl´ad´an do s´ıt’ov´eho (IP) paketu obsahuje ˇc´ast toku dat od odes´ılatele k pˇr´ıjemci segmentace: rozdˇelen´ı toku dat na ˇc´asti “zabalen´e” do segmentu Obr´azek: Obr´azek pr˚ uvodce 219
max. d´elka = max. d´elka IP paketu (64 kB) - d´elka IP z´ahlav´ı z´ahlav´ı s porty pˇr´ıjemce a odes´ılatele, data Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
6 / 34
Transmission Control Protocol (TCP) RFC 962 IP protokol poskytuje datagramovou (nespojovanou) “nespolehlivou” sluˇzbu, bez vyˇzadov´an´ı opakov´an´ı pˇrenosu paket˚ u, nanejv´yˇs signalizace nemoˇznosti doruˇcen´ı (ICMP, nepovinn´a, potlaˇcovan´a) poskytuje spojovanou “spolehlivou” sluˇzbu, ˇreˇs´ı: nav´az´an´ı, udrˇzov´an´ı a ukonˇcen´ı spojen´ı potvrzov´an´ı pˇrijet´ı dat (tzv. pozitivn´ı potvrzov´ an´ı) vyˇz´ad´an´ı opakov´ an´ı pˇrenosu ztracen´ych nebo poˇskozen´ych dat, zaruˇcen´ı spr´avn´eho poˇrad´ı byt˚ u dat adaptivn´ı pˇrizp˚ usoben´ı parametr˚ u protokolu podle stavu spojen´ı ˇr´ızen´ı toku dat pomoc´ı buffer˚ u a posuvn´eho okna a pr˚ uchodnost pˇrenosov´e cesty (zahlcen´ı s´ıtˇe)
nez´avisl´y rozsah port˚ u pro TCP a UDP, TCP porty oznaˇceny ˇ c´ıslo/tcp
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
7 / 34
TCP segment Obr´azek: Obr´azek pr˚ uvodce 219
z´ahlav´ı 20 B povinn´ych poloˇzek + voliteln´e poloˇzky identifikace spojen´ı (v Internetu): zdrojov´y a c´ılov´y port, zdrojov´a a c´ılov´a IP adresa, transportn´ı protokol (TCP) poˇradov´ eˇ c´ıslo odes´ılan´ eho bytu: poˇradov´e ˇc´ıslo 1. bytu segmentu v odes´ılan´em toku dat (spojen´ı), segment nese byty toku dat od poˇradov´eho ˇc´ısla do d´elky segmentu, ˇc´ıslov´an´ı zaˇc´ın´a od n´ahodn´eho ˇc´ısla (tzv. ISN, Initial Sequence Number), po dosaˇzen´ı 232 − 1 opˇet od 0, zajiˇstˇen´ı spr´avn´eho poˇrad´ı dat poˇradov´ eˇ c´ıslo pˇrijat´ eho bytu: poˇradov´e ˇc´ıslo n´asleduj´ıc´ıho bytu, kter´y m´a b´yt pˇrijat d´ elka z´ ahlav´ı: v jednotk´ach 4 B, max. 60 B Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
8 / 34
TCP segment pˇr´ıznaky: URG – segment nese nal´ehav´a data, kter´a m´a pˇr´ıjemce zpracovat pˇrednostnˇe (out of band data, pouˇzit´ı vyj´ımeˇcnˇe, napˇr. u Telnetu pro pˇr´ıkazy) ACK – platn´e poˇradov´e ˇc´ıslo pˇrijat´eho bytu, tj. potvrzen´ı spr´avn´eho pˇrijet´ı byt˚ u aˇz do tohoto ˇc´ısla - 1 (pozitivn´ı potvrzov´an´ı) PSH – segment obsahuje aplikaˇcn´ı data, pouˇzit´ı nen´ı ust´aleno RST – odm´ıtnut´ı TCP spojen´ı SYN – nov´a sekvence ˇc´ıslov´an´ı odes´ılan´ych byt˚ u, poˇradov´e ˇc´ıslo odes´ılan´eho bytu je ˇc´ıslo 1. bytu toku dat (ISN), pˇri navazov´an´ı spojen´ı FIN – ukonˇcen´ı odes´ıl´an´ı dat (kromˇe opakov´an´ı pˇrenosu segment˚ u)
d´ elka okna: poˇcet byt˚ u, kter´e je pˇr´ıjemce schopen pˇrijmout, pˇredch´azen´ı zahlcen´ı pˇrij´ımaˇce
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
9 / 34
TCP segment kontroln´ı souˇ cet: poˇc´ıtan´y z nˇekter´ych poloˇzek IP z´ahlav´ı (IP adresy odes´ılatele a pˇr´ıjemce, 1 B bin. nul, protokol vyˇsˇs´ı vrstvy, celkov´a d´elka IP paketu), z´ahlav´ı TCP segmentu a dat (plus pˇr´ıpadnˇe 1 B bin. nul v´yplnˇe na sud´y poˇcet byt˚ u), tzv. pseudoz´ ahlav´ı, zajiˇstˇen´ı integrity dat ukazatel nal´ ehav´ ych dat: poˇcet byt˚ u odes´ılan´ych nal´ehav´ych dat, pouze pˇri pˇr´ıznaku URG ˇ ´I: zachyt´av´an´ı a inspekce TCP segment˚ CVICEN u
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
10 / 34
Voliteln´ e poloˇ zky TCP z´ ahlav´ı max. 40 B za povinn´ymi poloˇzkami TCP segmentu Obr´azek: Obr´azek pr˚ uvodce 225
typ 0 je pro posledn´ı poloˇzku, 1 pro v´yplˇ n z´ahlav´ı na n´asobek 4 B max. d´ elka segmentu (MSS, typ 2): max. d´elka dat pˇrij´ıman´ych segment˚ u, dohodnut´a stranami pˇri navazov´an´ı spojen´ı, jen s pˇr´ıznakem SYN zvˇ etˇsen´ı okna (typ 3): bitov´y posun doleva d´elky okna povolen´ı SACK a SACK (typy 4 a 5): selektivn´ı potvrzov´an´ı segment˚ u mimo poˇrad´ı ˇ casov´ e raz´ıtko a echo ˇ casov´ eho raz´ıtka (typ 8): echo je zopakov´an´ı raz´ıtka z posledn´ıho pˇrijat´eho segmentu, pro detekci star´eho zatoulan´eho segmentu pˇri dlouh´ych oknech (stovky MB) Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
11 / 34
Navazov´ an´ı spojen´ı jedna strana spojen´ı navazuje (inicializuje), druh´a jej pˇrijme nebo odm´ıtne model klient/server (z hlediska aplikaˇcn´ı vrstvy) – klient navazuje, server oˇcek´av´a a pˇr´ıpadnˇe pˇrij´ım´a protokol TCP umoˇzn ˇuje navazovat spojen´ı souˇcasnˇe v obou smˇerech (v praxi ne pˇr´ıliˇs vyuˇz´ıvan´e) obˇe strany otevˇrou port (pomoc´ı socketu), klient v tzv. aktivn´ım reˇzimu, server v tzv. pasivn´ı reˇzimu c´ılov´y port (na serveru) je dan´y aplikac´ı zdrojov´y port (na klientu) typicky vybr´an OS z voln´ych neprivilegovan´ych (≥ 1024)
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
12 / 34
Navazov´ an´ı spojen´ı Tˇr´ıf´ azov´ y (Three-Way) handshake Obr´azek: Obr´azek pr˚ uvodce 226
1
2
3
klient odeˇsle segment (bez dat) s pˇr´ıznakem SYN, n´ahodnˇe vygenerovan´ym poˇradov´ym ˇc´ıslem odes´ılan´eho bytu jako startovac´ım ˇc´ıslem 1. bytu spojen´ı (toku dat, ISN) a navrhovanou max. d´elku pˇrij´ıman´ych segment˚ u (MSS) server odeˇsle segment (bez dat) s pˇr´ıznaky SYN a ACK, ISN a navrhovanou MSS pro opaˇcn´y smˇer (od serveru), poˇradov´e ˇc´ıslo pˇrijat´eho bytu je klientovo ISN + 1 (potvrzuje pˇrijet´ı pˇredchoz´ıho segmentu, jakoby 1 B dat, od klienta) klient odeˇsle segment (bez dat) s pˇr´ıznakem ACK, poˇradov´e ˇc´ıslo odes´ılan´eho bytu je klientovo ISN + 1 (jakoby dalˇs´ı byte, kter´y server oˇcek´av´a), poˇradov´e ˇc´ıslo pˇrijat´eho bytu je serverovo ISN + 1 (potvrzuje pˇrijet´ı pˇredchoz´ıho segmentu, jakoby 1 B dat, od serveru) Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
13 / 34
Navazov´ an´ı spojen´ı po nav´az´an´ı spojen´ı, tj. pˇr´ıjmu segmentu s pˇr´ıznakem ACK obˇema stranami, lze zas´ılat obˇema smˇery data (datov´e segmenty s pˇr´ıznaky ACK a PSH) nebo jen potvrzovac´ı segmenty (s pˇr´ıznakem ACK) prvn´ı segment s pˇr´ıznakem SYN nepotvrzuje ˇz´adn´a pˇrijat´a data, tj. neobsahuje pˇr´ıznak ACK a pole poˇradov´e ˇc´ıslo pˇrijat´eho bytu nen´ı platn´e (b´yv´a vyplnˇeno bin. nulami) navrhovan´e MSS je ≤ MTU, aby se zamezilo IP fragmentaci, pro Ethernet II 1460, Ethernet 802.3 1452 ˇ ´I: zachyt´av´an´ı a inspekce TCP segment˚ CVICEN u pˇri navazov´an´ı spojen´ı, rozbor tˇr´ıf´azov´eho handshake
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
14 / 34
Navazov´ an´ı spojen´ı Stavy spojen´ı pˇri jeho navazov´an´ı: Obr´azek: Obr´azek pr˚ uvodce 228
LISTEN – stav serveru, ˇcek´an´ı na nav´az´an´ı spojen´ı ze strany klienta SYN SENT – na stranˇe klienta, po odesl´an´ı prvn´ıho segmentu (s pˇr´ıznakem SYN), tj. navazov´an´ı spojen´ı SYN RCVD – na stranˇe serveru, po obdrˇzen´ı prvn´ıho segmentu (s pˇr´ıznakem SYN), tj. obdrˇzena ˇz´adost o spojen´ı ESTABLISHED – na obou stran´ach, po obdrˇzen´ı prvn´ıho segmentu s pˇr´ıznakem ACK, tj. spojen´ı nav´az´ano (ve smˇeru od strany, kter´a segment obdrˇzela) Vˇsechna spojen´ı a jejich stavy lze zobrazit napˇr. programem netstat. ˇ ´I: v´ypis vˇsech spojen´ı na z/do poˇc´ıtaˇce, identifikace IP adres a CVICEN port˚ u (aplikac´ı) stran a stav˚ u spojen´ı, napˇr. pomoc´ı programu netstat Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
15 / 34
Ukonˇ cov´ an´ı spojen´ı ukonˇcit/uzavˇr´ıt spojen´ı m˚ uˇze libovoln´a strana, klient i server
Obr´azek: Obr´azek pr˚ uvodce 229
1
1. strana odeˇsle segment (moˇzno i s daty) s pˇr´ıznakem FIN (vedle ACK), tzv. aktivn´ı uzavˇren´ı spojen´ı, pak jiˇz nem˚ uˇze odes´ılat datov´e segmenty (s pˇr´ıznakem PSH)
2
2. strana odeˇsle segment (potvrzovac´ı, moˇzno i s daty) bez pˇr´ıznaku FIN (jen s ACK), tzv. pasivn´ı uzavˇren´ı spojen´ı, m˚ uˇze d´al odes´ılat datov´e segmenty 1. stranˇe tzv. polouzavˇren´ ym spojen´ım
3
2. strana odeˇsle segment (moˇzno i s daty) s pˇr´ıznakem FIN (vedle ACK), tzv. u ´pln´ e uzavˇren´ı spojen´ı
4
1. strana odeˇsle potvrzovac´ı segment (bez dat, s pˇr´ıznakem ACK) Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
16 / 34
Ukonˇ cov´ an´ı spojen´ı 2. krok je moˇzn´e vynechat, pˇri oboustrann´em uzavˇren´ı spojen´ı segment s pˇr´ıznakem FIN bez dat se potvrzuje (ACK) jakoby mˇel 1 B dat ˇ ´I: zachyt´av´an´ı a inspekce TCP segment˚ CVICEN u pˇri ukonˇcov´an´ı spojen´ı, rozbor sekvence segment˚ u ukonˇcuj´ıc´ıch spojen´ı Stavy spojen´ı pˇri jeho ukonˇcov´an´ı: Obr´azek: Obr´azek pr˚ uvodce 230
FIN WAIT1 – na 1. stranˇe, po odesl´an´ı segmentu s pˇr´ıznakem FIN, tj. aktivn´ı uzavˇren´ı spojen´ı CLOSE WAIT – na 2. stranˇe, po obdrˇzen´ı segmentu s pˇr´ıznakem FIN, tj. pasivn´ı uzavˇren´ı spojen´ı Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
17 / 34
Ukonˇ cov´ an´ı spojen´ı FIN WAIT2 – na 1. stranˇe, po obdrˇzen´ı (potvrzovac´ıho) segmentu bez pˇr´ıznaku FIN, po 11,25 min. neˇcinnosti polouzavˇren´eho spojen´ı (tj. bez pˇrijet´ı segmentu) pˇrech´az´ı do stavu CLOSED LAST ACK – na 2. stranˇe, po odesl´an´ı segmentu s pˇr´ıznakem FIN, tj. u ´pln´e uzavˇren´ı spojen´ı TIME WAIT – na 1. stranˇe, po obdrˇzen´ı segmentu s pˇr´ıznakem FIN, protoˇze potvrzovac´ı segment nen´ı potvrzov´an, po 30 s – 2 min. pˇrech´az´ı do stavu CLOSED, kv˚ uli moˇznosti opakov´an´ı potvrzovac´ıho segmentu po jeho vyˇz´ad´an´ı 2. stranou (pˇri neobdrˇzen´ı) CLOSED – na obou stran´ach, na 2. stranˇe po obdrˇzen´ı potvrzovac´ıhoh segmentu ˇ ´I: v´ypis vˇsech spojen´ı na z/do poˇc´ıtaˇce, identifikace IP adres a CVICEN port˚ u (aplikac´ı) stran a stav˚ u spojen´ı, napˇr. pomoc´ı programu netstat
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
18 / 34
Odm´ıtnut´ı spojen´ı pokud na c´ılov´em portu pˇr´ıjemce nebˇeˇz´ı aplikace serveru (tj. port nen´ı otevˇren, nebo jsou segmenty zahazov´any firewallem), klient, bez odpovˇedi serveru, periodicky opakuje poˇzadavek na nav´az´an´ı spojen´ı (segment se SYN pˇr´ıznakem) odm´ıtnut´ı pokraˇcov´an´ı v jiˇz nav´azan´em spojen´ı – zasl´an´ım segmentu s pˇr´ıznakem RST (bez dat) → okamˇ zit´ e uzavˇren´ı spojen´ı v obou smˇerech a pˇrechod do stavu CLOSED na obou stran´ach, napˇr. u SSL/TLS pouˇzit´ı tak´e pro rychlejˇs´ı ukonˇ cen´ı spojen´ı: nastaven´ı pˇr´ıznaku RST m´ısto FIN v 3. (nebo i 1.) segmentu pˇri ukonˇcov´an´ı spojen´ı, nebo po 4. segmentu jeˇstˇe 2. strana odeˇsle potvrzovac´ı segment s pˇr´ıznakem RST, pro uˇsetˇren´ı 1. stranˇe ˇcek´an´ı ve stavu TIME WAIT
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
19 / 34
Ztr´ ata segmentu (ˇr´ızen´ı toku dat) Odes´ılatel: m´a definovan´y ˇcasov´y interval pro pˇr´ıjem potvrzovac´ıho segmentu od pˇr´ıjemce (retransmission timeout) pˇri ztr´atˇe nebo poˇskozen´ı segmentu (odeslan´eho nebo potvrzovac´ıho) po vyprˇsen´ı intervalu nebo pˇr´ıjmu tˇr´ı opakovan´ych stejn´ych potvrzen´ı od pˇr´ıjemce (viz d´ale) opakuje odesl´ an´ı segmentu hodnota intervalu se dynamicky mˇen´ı podle stavu s´ıtˇe (linky) – na z´akladˇe pˇredpokl´adan´e doby odezvy (vypoˇc´ıtan´e z RTT), Karn-Jacobson˚ uv algoritmus Pˇr´ıjemce: m´a definovan´y interval pro pˇr´ıjem segmentu s n´asleduj´ıc´ımi daty v toku dat (podle poˇrad´ı) pˇri neobdrˇzen´ı segmentu s n´asleduj´ıc´ımi daty po vyprˇsen´ı intervalu nebo obdrˇzen´ı segmentu s dalˇs´ımi daty mimo poˇrad´ı opakuje potvrzen´ı pˇrijet´ı pˇredchoz´ıch dat ukl´ad´a si i data mimo poˇrad´ı do vstupn´ıho bufferu, po obdrˇzen´ı ztracen´eho segmentu potvrd´ı pˇr´ıjem vˇsech, tzv. rychl´e zopakov´an´ı Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
20 / 34
Ztr´ ata segmentu (ˇr´ızen´ı toku dat) ˇ ´I: simulace ztr´aty segmentu (pˇreruˇsen´ım linky) a pozorov´an´ı CVICEN chov´an´ı protokolu TCP pˇri opakov´an´ı odes´ıl´an´ı a potvrzov´an´ı dat
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
21 / 34
Zpoˇ zdˇ en´ı odpovˇ edi v´yhodn´a u (konzolov´ ych) interaktivn´ıch aplikac´ı, napˇr. Telnet, FTP (pˇr´ıkazov´y kan´al), SSH apod., vymˇen ˇuj´ıc´ıch mal´ e segmenty (napˇr. 1 B dat) Obr´azek: Obr´azek pr˚ uvodce 233
klasick´y pr˚ ubˇeh: uˇzivatel stiskne kl´avesu, klient odeˇsle znak serveru (v segmentu v IP paketu v r´amci), server potvrd´ı pˇr´ıjem, zpracuje znak, odeˇsle znak klientovi pro jeho zobrazen´ı (interaktivita), klient potvrd´ı pˇr´ıjem a zobraz´ı, tj. min. 117 byt˚ u v kaˇzd´em smˇeru – velk´ a reˇ zie snaha zmenˇsit objem pˇren´aˇsen´ych dat a nebezpeˇc´ı zahlcen´ı s´ıtˇe (linky) ˇ ´I: pozorov´an´ı zpoˇzdˇen´ı odpovˇedi u aplikace Telnet (viz d´ale) CVICEN
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
22 / 34
Zpoˇ zdˇ en´ı odpovˇ edi Potvrzov´ an´ı pˇr´ıjmu dat ne hned, ale se zpoˇ zdˇ en´ım, bˇehem kter´eho se mohou nahromadit data k odesl´an´ı: Obr´azek: Obr´azky pr˚ uvodce 234
odes´ıl´an´ı dat (vˇcetnˇe potvrzen´ı, “delayed ACK”) v intervalech napˇr. 200 ms (≤ 500 ms) Nagle˚ uv algoritmus: odes´ıl´an´ı dat (vˇcetnˇe potvrzen´ı) najednou aˇz po potvrzen´ı pˇredchoz´ıch odeslan´ych dat druhou stranou nebo aˇz je objem dat k odesl´an´ı ≥ MSS, vyrovn´av´a dobu odezvy v˚ uˇci kapacitˇe pˇrenosov´e cesty (linky) kombinace zp˚ usobuje konstantn´ı zpoˇzdˇen´ı potvrzov´an´ı (“ACK delay”) → zak´az´an´ı Nagleova algoritmu pomoc´ı volby TCP NODELAY s´ıt’ov´eho API OS, napˇr. u XProtocol Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
23 / 34
Posuvn´ e okno (sliding window) Obr´azek: Obr´azek pr˚ uvodce 235
vyuˇzit´ı pˇri odes´ıl´an´ı vˇ etˇs´ıho mnoˇ zstv´ı dat, zamezen´ı zahlcen´ı pˇrij´ımaˇ ce segmenty se odes´ılaj´ı bez potvrzen´ı kaˇzd´eho zvl´aˇst’ aˇz do poˇctu odeslan´ych byt˚ u rovno d´ elce posuvn´ eho okna (v poloˇzce d´elka okna v TCP segmentu, pak se ukl´adaj´ı do v´ystupn´ıho bufferu) d´elka okna vyjadˇruje poˇcet byt˚ u, kter´e je pˇr´ıjemce schopen pˇrijmout (m´a pln´y vstupn´ı buffer) ˇci (v definovan´em ˇcase) zpracovat pˇri navazov´an´ı spojen´ı pˇr´ıjemce navrhne poˇc´ateˇcn´ı d´elku (stejnˇe jako MSS, typicky 6–8 MSS) a pak ji m˚ uˇze v potvrzovac´ıch segmentech mˇ enit (inzerovat) nebo i vynulovat, tj. zak´azat odes´ılateli odes´ılat dalˇs´ı data, pokud “nest´ıh´a” Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
24 / 34
Posuvn´ e okno (sliding window) poloˇzka d´elka okna m´a 2 B, tzn. okno m˚ uˇze b´yt dlouh´e max. 64 kB, mal´e u rychl´ych s´ıt´ı → voliteln´a poloˇzka zvˇ etˇsen´ı okna, n = 0 aˇz 14, n d´elka okna je potom n´asobena 2 (posun o n bit˚ u doleva), tj. aˇz t´emˇeˇr 1 GB, moˇzno pouˇz´ıt jen u segment˚ u s pˇr´ıznakem SYN pˇri navazov´an´ı spojen´ı, nastavov´ano parametrem OS potvrzov´an´ım pˇr´ıjmu dat se okno odes´ılatele po datech k odesl´an´ı “posouv´a” a mˇen´ı velikost – ˇr´ızen´ı toku dat (flow control) ˇ ´I: identifikace a pozorov´an´ı posuvn´eho okna pˇri pˇrenosu dat CVICEN
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
25 / 34
Zahlcen´ı s´ıtˇ e (congestion control) posuvn´e okno ud´av´a mnoˇzstv´ı dat akceptovan´e pˇr´ıjemcem pokud je pˇr´ıliˇs velk´e a s´ıt’ na stranˇe pˇr´ıjemce plnˇe vyuˇzit´a nebo pomal´a, odes´ılatel m˚ uˇze s´ıt’ zahltit a ta (smˇerovaˇce) zaˇcne data zahazovat → okno i na stranˇe odes´ılatele, okno zahlcen´ı (congestion window), ud´avaj´ıc´ı, jak´e mnoˇ zstv´ı nepotvrzen´ ych dat je moˇ zn´ e odeslat aniˇ z by doˇslo k zahlcen´ı s´ıtˇ e, c´ıl: nejvˇetˇs´ı moˇzn´e odes´ılatel odes´ıl´a data do velikosti menˇs´ıho z posuvn´eho okna a okna zahlcen´ı dvˇe f´aze: pomal´y start a pˇredch´azen´ı zahlcen´ı
Obr´azek: Obr´azky pr˚ uvodce 238
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
26 / 34
Zahlcen´ı s´ıtˇ e (congestion control) Pomal´ y start (slow start) od nav´az´an´ı spojen´ı (po prodlevˇe) se velikost okna zahlcen´ı (CWND) poˇc´ınaje MSS nebo 2×MSS s kaˇzd´ym potvrzen´ım zvyˇsuje o MSS (ˇc´ımˇz se po kaˇzd´em round trip zdvojn´ asobuje), aˇz do pˇrekroˇcen´ı velikosti posuvn´eho okna nebo parametru SSTHRESH (hranice pravdˇepodobnosti zahlcen´ı, prvn´ı hodnota je parametr OS, typicky 64 kB) pˇri ztr´atˇe segmentu se nastav´ı SSTHRESH na polovinu aktu´ aln´ı CWND (minin´alnˇe 2×MSS) a inicializuje se CWND
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
27 / 34
Zahlcen´ı s´ıtˇ e (congestion control) Pˇredch´ azen´ı zahlcen´ı (congestion avoidance) n´asleduje po pomal´em startu, pomal´ e zvˇ etˇsov´ an´ı okna s kaˇzd´ym potvrzen´ım, napˇr. o MSS, MSS2 /CWND apod. algoritmy vyh´yb´an´ı se zahlcen´ı (congestion avoidance algorithms): prvn´ı Tahoe (po vyprˇsen´ı ˇcasov´eho intervalu pˇred potvrzen´ım pomal´y start), pak Reno – po tˇret´ım duplikovan´em potvrzen´ı zmenˇsen´ı CWND, rychl´e zopakov´an´ı segmentu a ˇcek´an´ı na potvrzen´ı cel´eho okna zahlcen´ı (tzv. rychl´e zotaven´ı), pˇri neobrˇzen´ı potvrzen´ı pomal´y start dalˇs´ı New Reno (lepˇs´ı rychl´e zotaven´ı), Hybla (pro r´adiov´e spoje), BIC (hodnota CWND se hled´a p˚ ulen´ım intervalu, rychlejˇs´ı adaptace pro rozs´ahl´e rychl´e s´ıtˇe), CUBIC (CWND je kubick´a funkce ˇcasu od posledn´ıho zahlcen´ı) aj.
selektivn´ı potvrzov´ an´ı (selective ACK, SACK): potvrzov´an´ı i segment˚ u mimo poˇrad´ı, pomoc´ı voliteln´ych poloˇzek z´ahlav´ı (s dohodou pˇri navazov´an´ı spojen´ı) Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
28 / 34
Zahlcen´ı s´ıtˇ e (congestion control) odes´ılatel udrˇzuje pro kaˇzd´e spojen´ı velikosti MSS, posuvn´eho okna, okna zahlcen´ı (CWND) a parametru SSTHRESH nalezen´a hodnota SSTHRESH pro dan´y smˇer se i po ukonˇcen´ı spojen´ı pouˇzije jako v´ychoz´ı u dalˇs´ıch spojen´ı, uloˇzen´a ve smˇerovac´ı tabulce
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
29 / 34
User Datagram Protocol (UDP) RFC 768 poskytuje nespojovanou (datagramovou) “nespolehlivou” sluˇzbu: data odesl´ana, nezaruˇ cuje se doruˇ cen´ı ani znovuzas´ıl´ an´ı ztracen´ ych nebo poˇskozen´ ych dat – ponech´ano na vyˇsˇs´ım protokolu vyˇsˇs´ı v´ ykon a rychlost pˇrenosu dat neˇz u TCP, za cenu “nespolehlivosti” – vyuˇzit´ı u streamov´an´ı multimedi´aln´ıho obsahu nez´avisl´y rozsah port˚ u pro TCP a UDP, UDP porty oznaˇceny ˇ c´ıslo/udp snaha vyhnout se IP fragmentaci datagram˚ u – velikost datagramu ≤ MTU linky (napˇr. u DNS delˇs´ı odpovˇed’ zkr´acena na 512 B a na vyˇz´ad´an´ı posl´ana cel´a pomoc´ı TCP) oproti TCP m˚ uˇze b´yt pˇr´ıjemcem skupina uzl˚ u, tj. IP adresa pˇr´ıjemce m˚ uˇze b´yt vˇsesmˇ erov´ a (napˇr. u DHCP) nebo skupinov´ a (multicast, typicky u streamov´an´ı multimedi´aln´ıho obsahu) – jak doˇz´adat nedoruˇcen´a data (napˇr. u pˇrenosu soubor˚ u pomoc´ı Multicast FTP)? → od nejbliˇzˇs´ıho smˇerovaˇce (protokolem pro multicast) Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
30 / 34
UDP datagram Obr´azek: Obr´azek pr˚ uvodce 241
z´ahlav´ı 8 B d´ elka dat: d´elka datagramu, tj. z´ahlav´ı a dat kontroln´ı souˇ cet: stejnˇe jako u TCP poˇc´ıt´an z tzv. pseudoz´ahlav´ı (nˇekter´e poloˇzky IP z´ahlav´ı, UDP z´ahlav´ı a data), nemus´ı b´yt povinnˇe vyplnˇen´y, pro zrychlen´ı (napˇr. u NFS), ale m˚ uˇze b´yt nebezpeˇcn´e (napˇr. u DNS, pak poˇc´ıt´an jen z r´amce, ale napˇr. SLIP nepoˇc´ıt´a) ˇ ´I: zachyt´av´an´ı a inspekce UDP datagram˚ CVICEN u
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
31 / 34
Bezpeˇ cnost protokol˚ u TCP a UDP TCP “spolehliv´a sluˇzba” – potvrzov´an´ı pˇr´ıjmu dat a znovuzasl´an´ı ztracen´ych a poˇskozen´ych pouze kontroln´ı souˇcet (i kdyˇz i z ˇc´asti IP z´ahlav´ı a dat) – lze pˇrepoˇc´ıtat n´ahodn´e 1. poˇradov´e ˇc´ıslo odes´ılan´eho bytu spojen´ı (ISN) – pouze pro zaruˇcen´ı spr´avn´eho poˇrad´ı dat (napˇr. tak´e zahozen´ı zatoulan´ych segment˚ u z pˇredchoz´ıho pˇreruˇsen´eho spojen´ı ze stejn´eho portu) u ´toky: pˇrevzet´ı spojen´ı (connection hijaking, autentizovan´eho a d´ale nezabezpeˇcen´eho), odepˇren´ı sluˇzby (Denial of Service, vyˇcerp´an´ı zdroj˚ u syst´emu pro spojen´ı, maximum pˇr´ıznak˚ u v z´ahlav´ı), zjiˇst’ov´an´ı otevˇren´ych (s ˇcekaj´ıc´ım serverem) port˚ u (port scanning) a u ´tok na aplikaci ˇreˇsen´ı: ˇsifrov´an´ı spojen´ı pomoc´ı SSL, S/MIME apod. nebo vytvoˇren´ım (ˇsifrovan´ych) tunel˚ u na jin´ych portech, omezov´an´ı poˇctu spojen´ı za dan´y ˇcas, sledov´an´ı (sekvenˇcn´ıho) skenov´an´ı port˚ u Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
32 / 34
Bezpeˇ cnost protokol˚ u TCP a UDP UDP vyplnˇen´ı kontroln´ıho souˇctu je nepovinn´e, jinak lze pˇrepoˇc´ıtat mus´ı jej pouˇz´ıvat aplikace pˇren´aˇsej´ıc´ı data na skupinov´e nebo vˇsesmˇerov´e adresy, napˇr. streamovan´a multimedia nebo DHCP napˇr. jej pouˇz´ıv´a program traceroute na unixov´ych syst´emech a na smˇerovaˇc´ıch b´yvaj´ı povoleny porty DNS (53/udp) Firewall filtrace paket˚ u a segment˚ u/datagram˚ u na z´akladˇe TCP/UDP z´ahlav´ı zejm´ena “br´anˇen´ı” nav´az´an´ı TCP spojen´ı nebo pˇrenosu dat pomoc´ı UDP na vybran´ych portech (“blokov´an´ı” aplikac´ı) – filtrov´an´ı TCP segment˚ u s pˇr´ıznakem SYN (prvn´ıho pˇri navazov´an´ı spojen´ı) a UDP datagram˚ u na c´ılov´y port TCP z´ahlav´ı jen v prvn´ım IP fragmentu – nutn´e sledovat fragmenty a filtrovat i dalˇs´ı Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
33 / 34
Bezpeˇ cnost protokol˚ u TCP a UDP Pˇreklad adres (NAT) pˇreklad IP adres paket˚ u z vnitˇrn´ı s´ıtˇe na IP adresu hraniˇcn´ıho smˇerovaˇce ve vnˇejˇs´ı s´ıti (skryt´ı vnitˇrn´ı s´ıtˇe za smˇerovaˇcem), tzv. maˇskar´ada – pˇreklad IP adres (adres socketu) pˇrenosu na zdrojov´e porty nov´eho pˇrenosu ze smˇerovaˇce pˇreklad port˚ u u transparentn´ıch proxy (typicky v DMZ nebo pˇr´ımo hraniˇcn´ı smˇerovaˇc) zasahuje i do aplikaˇcn´ı vrstvy, v pˇr´ıpadˇe nutnosti porozumˇet aplikaˇcn´ımu protokolu, napˇr. FTP
Jan Outrata (KI UP)
Poˇ c´ıtaˇ cov´ e s´ıtˇ e
ˇr´ıjen–listopad 2008
34 / 34