CCNA 2/10 Další funkce TCP/IP Aleš Mareček Jaroslav Matějíček xmarec07@stud.fit.vutbr.cz xmatej33@stud.fit.vutbr.cz 1
Obsah: 1. TCP... 3 1.1 Hlavička TCP segmentu... 3 1.2 Přenos dat a potvrzovací proces... 4 1.3 Three-Way Handshake... 6 2. UDP...7 3. Porty...8 4. Otázky k procvičení...8 2
1. TCP 1.1 Hlavička TCP segmentu TCP je spojově orientovaný protokol používaný pro spolehlivou přepravu dat přes síť, zajišťuje: proudový přenos dat není potvrzován každý paket, ale skupina (window); každý byte je identifikován sekvenčním číslem; pokud TCP dostane od vyšších vrstev blok dat, rozdělí je do segmentů, označí sekvenčním číslem a pošle 3. vrtsvě (IP) k přenosu spolehlivost zajištěna potvrzováním příjmu skupiny paketů; ztracené nebo opožděné pakety příjemce nepotvrdí a odesílatel je pošle znovu efektivní řízení toku příjemce nepotvrzuje každý paket, ale skupinu (příjemce informuje odesílatele jaké množství paketů je schopen přijmout čímž je zamezeno přetečení jeho interních bufferů) plně duplexní operaci TCP umožňuje přijímat i odesílat data současně multiplexing možnost datových toků různých aplikací vyšších vrstev najednou prostřednictvím jednoho spojení TCP je definován v RFC 793. Hlavička TCP segmentu Source Port Destination Port Sequence Number Acknowledgement Number Data Offset Reserved Control Bits Window Checksum Urgent Pointer Options Padding Data octets Source port - port procesu generujícího datagram Destination port - určuje kterému procesu na cílovém uzlu jsou data určena Sequence Number - sekvenční číslo prvního datového oktetu v segmentu (pokud není nastaven příznak SYN). Pokud je nastaven příznak SYN, jedná se o tzv. initial sequence number ISN a první datový oktet má číslo ISN + 1 Acknowledgement Number - má význam pouze když je nastaven kontrolní bit ACK. Toto číslo je nastaveno na hodnotu, kterou odesílatel očekává v poli Sequence Number v následujícím paketu. Je-li ustaveno spojení, je toto číslo vždy posíláno. Data Offset - specifikuje číslo vyjádřené 32bitovým slovem. Indikuje kde data v segmentu začínají data přenášená tímto datagramem. Reserved - toto 6ti bitové pole je rezervované a mělo by vždy být nulové Control Bits - kontrolní bity (příznaky) zajišťující "handshaking" a ostatní specifické procesy URG - Urgent Pointer ACK - Acknowledgement PSH - Push funkce 3
RST - Reset spojení SYN - synchronizace sekvenčních čísel FIN - oznámení, že odesílající nemá žádná další data Window - množství dat oktetech, které je potvrzováno najednou Checksum - kontrolní součet, není povinný a v tom případě je 0 Urgent Pointer - údaj je platný pouze pokud je nastaven příznak URG Options - pole proměnné délky určené pro volitelné parametry TCP, parametr je používán např. pro indikaci maximální velikosti segmentu, kterou je přijímají strana schopna zpracovat Padding - specifické množství nulových bitů doplňujících hlavičku tak, aby měla 32 bitovou hranici (tj. aby byla beze zbytku dělitelná 32) Informace tvořená dvojicí IP adresa, číslo portu je nazývána socket. Socket představuje definitivní informaci o cíli TCP komunikace. Port je číslo, které rozlišuje proces v rámci uzlu. Při navazování spojení nejsou důležité pouze IP adresy, ale i čísla portů. Port na serverové straně jednoznačně identifikuje některé z procesů. Pro některé z procesů byla definována konkrétní čísla portů (známa jako well known ports). Spolehlivost přenosu a řízení toku požaduje aby protokol TCP inicializoval a spravoval stavové informace o každém datovém přenosu. Kombinace těchto informací se nazývá connection. Zahrnuje čísla socketů, sekvenční čísla a podstatnou část informací o window. Každé spojení (connection) je jednoznačně definované párem socketů, které identifikují obě strany virtuálního spojení. Spojení je tedy plně definováno čtyřmi čísly - internetovou adresou obou stran a TCP portem obou stran. Internetové adresy jsou součástí IP hlavičky, čísla portů jsou součástí TCP hlavičky. Když chtějí dva procesy komunikovat, TCP musí nejdříve na každém uzlu navázat spojení. Po ukončení přenosu je toto spojení ukončeno a tím uvolněny zdroje dalším uživatelům. Během datového přenosu zajišťuje TCP na každém z uzlů kontrolní mechanismus zda byla data přijata bez chyb nebo bez ztrát. Pokud dojde k přerušení přenosu např. díky problémům se sítí, oba uzly tento problém detekují a oznámí jej aplikačnímu programu. 1.2 Přenos dat a potvrzovací proces Každý oktet v rámci segmentu je potvrzen tím, že je potvrzeno přijetí segmentu, který oktet obsahuje. Potvrzování je podobné potvrzování u navazování spojení (handshaking). Používá příznak ACK a sekvenční čísla. Zdrojový proces musí uchovávat všechna odeslaná data dokud neobdrží potvrzení jejich převzetí. Jestliže potvrzení nepřijde do určité doby (uživatelsky ovlivnitelná veličina), proces považuje data za ztracená nebo poškozená a odešle je znovu všechna počínaje prvním nepotvrzeným bytem. Pokud nepřijde odpověď do vypršení časovače, je provedeno opětovné odeslání všech nepotvrzených dat. Počet možných opakování je uživatelsky ovlivnitelný a dojde-li k jeho překročení je pro vyšší vrstvy generována chyba a přerušeno TCP spojení. TCP proces má dvě fronty frontu pro odesílaná data a frontu pro přijímaná data. Již bylo řečeno, že data v 4
odesílací frontě jsou držena dokud nepřijde potvrzení jejich přijetí. Poté je fronta uvolněna a od vyšší vrstvy jsou přijata nová data k odeslání. Cílový proces si podle sekvenčních čísel ukládá přijímané segmenty do přijímací fronty (bufferu) a tím dochází ke skládání přijímané informace. Tato data postupuje ke zpracování vyšší vrstvě. Potvrzovací proces Již bylo řečeno, že potvrzovací proces je založen na sekvenčních číslech. Sekvenční čísla jsou generována v první chvíli náhodně a v průběhu procesu komunikace jsou postupně zvyšována o příslušný počet již odeslaných (obdržených) oktetů (bytů). Protože potvrzování každého segmentu je neefektivní, byl zvolen specifický model řízení toku dat založený na tzv. okně (window). Tento model zefektivňuje proces potvrzování přijatých paketů tím že významně redukuje počet potvrzování. Okno má určitou velikost, která představuje objem dat přenesený do potvrzení. Počáteční velikost okna je určena v procesu ustavení spojení a může být v průběhu přenosu měněna. Přizpůsobování velikosti okna TCP proces je schopen se přizpůsobit kvalitě spojení. Velikost okna může být v závislosti na spolehlivosti doručení celého okna může být zvětšována i zmenšována. Zvětšování i zmenšování zajišťuje přijímající strana, vysílající strana se na základě požadavků přizpůsobuje. Pokud přijímající proces není schopen přijímat další data, inzeruje to vysílající straně prostřednictvím tzv. zero receive window neboli okna s nulovou velikostí. Data, která jsou v tu chvíli na cestě nejsou přijímajícím procesem potvrzena. Vysílající proces si nastaví nulovou velikost okna a dokud není přijímajícím procesem velikost okna změněna (tento TCP proces není opět schopen přijímat data), musí vysílat pakety s neplatným sekvenčním číslem a potvrzovacím číslem a jedním bytem nesmyslných dat. Přijímající proces posílá potvrzení jejich příjmu. Důvodem těchto paketů je udržení TCP spojení. 5
1.3 Three-Way Handshake Nový TCP proces otevírá socket a používá při tom lokální a vzdálené číslo portu, specifikované v TCB. Jestliže TCP proces na aktivní straně přiřadí číslu lokálního portu hodnotu nula, IP zajistí socketu unikátní číslo lokálního portu. Pasivní strana odpovídá aktivní straně s použitím čísel portů, které byly zajištěny aktivní stranou. Je-li lokální socket vytvořen, TCP posílá vzdálenému socketu inicializační paket SYN, nastavuje časovač pro opětovné poslání (retransmission timer) a čeká na návrat odpovědi od vzdáleného soketu. Nejdéle však po dobu danou časovačem. SYN paket obsahuje prázdný TCP segment a má nastavený příznak SYN v TCP hlavičce. Když dorazí SYN paket na serverovou stranu procesu, IP proces zjišťuje zda je socket možné přijmout. Je-li vše v pořádku, postoupí paket poslouchajícímu procesu, který verifikuje nastavení příznaku SYN a kontrolní součet. Pokud je paket vhodný k přijetí požadavku, naslouchající proces zajišťuje vytvoření TCP procesu na této (pasivní) straně. Je vytvořen TCB, TCP software z paketu vybere IP adresu odesílatele a čísla TCP portů a zajistí vytvoření bufferu. Nově vytvořený proces odesílá aktivní straně SYN-ACK paket. Při tom nastavuje časovač pro opětovné poslání (retransmission timer) za stejným účelem jako první strana. Když TCP proces, který vyvolal spojení obdrží ze serverové (pasivní) strany paket potvrzení synchronizace (SYN-ACK), posílá zpět paket potvrzující přijetí potvrzení. Mezi tímto paketem a paketem, který jako potvrzení obdržel sám je rozdíl v tom, že tento paket má nastaven pouze příznak ACK, nikoliv SYN. 6
Pokud serverový proces obdrží ACK paket, je spojení ustaveno a může být zahájen přenos dat. Pro všechny kroky platí, že po pokud nepřijde odpověď do vypršení časovače, je provedeno opětovné odeslání paketu. Počet možných opakování je uživatelsky ovlivnitelný a dojde-li k jeho překročení je pro vyšší vrstvy generována chyba. Asi jste si všimli, že v kroku č. 1 je nastaven příznak SYN a v kroku č. 2 jsou společně nastaveny příznaky SYN a ACK. Jde o stavy uvedených příznaků, které jsou jedinečné pro proces ustavení spojení nikdy jindy se v TCP procesu nevyskytují. Této znalosti lze použít pro zamezení jednosměrného navázání TCP spojení (např. povolit z intranetu do Internetu, ale zakázat z Internetu do intranetu) a tvoří jeden ze základních principů filtračních firewallů. 2. UDP UDP je nespojový (connectionless) protokol, nepřináší vlastnosti spolehlivosti přenosu, řízení toku nebo funkcí opravy chyb; jde o jednoduchý interfejs mezi protokoly vyšší vrstvy a IP protokolem hlavička protokolu UDP obsahu menší množství informací než hlavička TCP a tím má tento protokol menší režii; protože UDP nemá žádné mechanismy pro dorozumívání se obou komunikujících stran je přenos rychlejší než v případě TCP. UDP je definován v RFC 768. Hlavička UDP Source port Length Destination port Checksum Data octets Source port Destination port Length - port procesu generujícího datagram; pokud proces nepodporuje zdrojový port, může toto pole zůstat 0. - určuje kterému procesu na cílovém uzlu jsou data určena. - vyjadřuje délku UDP hlavičky a dat vyjádřenou v oktetech. Checksum - kontrolní součet, není povinný a v tom případě je 0. 7
3. Porty Port je prostředek pro upřesnění identifikace odesílatele a příjemce síťových dat v rámci počítače (přesněji v rámci IP adresy). To znamená, že určuje, kterému programu mají být data předána. Číslo portu je reprezentováno dvěma byty tudiž je k dispozici rozsah portů 0-65535 Porty se dají rozdělit do několika skupin. 0 1023 (TCP i UDP) - označovány jako well known ports, jednotlivé porty jsou vyhrazeny pro některé služby (http://www.iana.org/assignments/port-numbers) 1024 49151 - tzv. registrované porty, používají se pro příchozí spojení méně znamých služeb 49152 65535 - porty pro odchozí spojení 4. Otázky k procvičení Spočítejte jak dlouho by trval přenos 1 MB dat za předpokladu a) window size je 10 b) window size je 1 Zpoždění průchodu paketu od jednoho uzlu k druhému a zpět je 100 ms a MTU je 500 byte. Uvažujme ideální síť kde nedochází ke ztrátám paketů. Pro zjednodušení nebudeme počítat skutečnou dobu, ale pouze navýšení doby přenosu zapřičiněnem potvrzováním. Kolik je možno mít naráz otevřeno tcp spojení? Vyjmenujte nejznámější well known porty. Začátek komunikace je uvozen packetem SYN. SEQ. number je 200. Jaký byde SEQ. number a ACK při příjmutí SYN a odpovědi ACK? 8