Protokol TCP
Protokol TCP je proti protokolu IP protokolem vyšší vrstvy (vrstva 3). Zatímco protokol IP přepravuje data mezi libovolnými počítači v Internetu, tak protokol TCP dopravuje data mezi dvěma konkrétními aplikacemi běžícími na těchto počítačích. Pro dopravu dat mezi počítači se využívá protokol IP. Protokol IP adresuje pouze síťové rozhraní počítače. Pokud bychom použili přirovnání k běžnému poštovnímu styku, pak IP-adresa odpovídá adrese domu a port (adresa v protokolu TCP) pak odpovídá jménu konkrétního obyvatele domu.
Protokol TCP je spojovanou službou, která mezi dvěma aplikacemi naváže spojení – vytvoří na dobu spojení virtuální okruh. Tento okruh je plně duplexní - data jsou přenášena nezávisle v obou směrech. Pro případ ztracení nebo poškození jsou data číslována a mohou být znovu vyžádána. Integrita dat je zajištěna kontrolním součtem. Tento způsob ochrany dat slouží pouze proti chybám technických prostředků a neklade si za cíl data chránit proti cílenému útoku, kde také může být přepočítán kontrolní součet. V tomto případě je třeba použít některý ze zabezpečovacích protokolů, např. SSL.
Konce spojení jsou určeny tzv. číslem portu. Porty jsou číslovány v rozsahu hodnot od 0 až 65535. Podle čísla cílového portu operační systém pozná které aplikaci má TCP segment doručit. U čísel portů se často vyjadřuje okolnost, že se jedná o porty protokolu TCP tím, že se za číslo napíše lomítko a název protokolu, např. 68/TCP.
Segment TCP
Základem přenosu je TCP segment. Data posílána jedním počítačem na druhý protokolem TCP jsou rozdělena na segmenty. Ty jsou vkládány do IP datagramů. Je-li použit delší datagram než je maximální povolená délka pro přenos na fyzické vrstvě, dochází k fragmentaci IP datagramu. Fragmentace ovšem zatěžuje více a proto je lepší posílat takové datagramy, aby nemusela být nutná. Fragmentace může být známkou útoku na data a proto není na některých firewallech povolena. Situace je znázorněna na následujícím obrázku.
TCP záhlaví
TCP segment je součástí toku dat. Datové spojení v internetu je jednoznačně dáno, máme-li informace o zdrojovém portu, cílovém portu, zdrojové IP adrese, cílová IP adrese a protokolu (TCP). Tyto informace jsou obsaženy v záhlaví příslušných protokolů.
TCP záhlaví mívá typicky délku 20Bytů (povinné položky). Může také obsahovat volitelné položky. Maximální délka TCP záhlaví je 60Bytů. TCP záhlaví obsahuje tyto informace:
Položka | Délka [bit] |
---|---|
Zdrojový port | 16 |
Cílový port | 16 |
Pořadové číslo odesílaného segmentu | 32 |
Pořadové číslo přijatého segmentu | 32 |
Délka záhlaví | 4 |
Délka okna | 16 |
Kontrolní součet | 16 |
Ukazatel naléhavých dat | 16 |
Volitelné položky | X |
Zdrojový port je TCP portem odesílatele, cílový port je port adresáta TCP segmentu. Pořadové číslo odesílaného segmentu je pořadové číslo prvního segmentu v toku dat od uživatele k příjemci. Tok v opačném směru má jiné číslování. Toto číslo je v rozsahu hodnot 0 - 65535. Po dosažení nejvyšší možné hodnoty začne číslování opětovně od 0. Obecně by číslování nemělo začínat od nuly ani od nějakého předem určeného čísla. V praxi je to tak, že při započatí komunikace je vygenerováno náhodné startovací číslo. Pořadové číslo přijatého segmentu vyjadřuje naopak číslo následujícího bajtu, který příjemce je připraven přijmout. Délka záhlaví informuje o délce záhlaví v násobcích 32 bitů, dohromady tedy 4Bytů. Délka okna vyjadřuje přírůstek pořadového čísla přijatého Bytu, který bude příjemce ještě akceptovat. Ukazatel naléhavých dat může být nastaven pouze v kombinaci s příznakem URG. Je-li tento ukazatel přičten k pořadovému číslu odesílaného Bytu, pak ukazuje na konec naléhavých dat. Odesílatel tímto vyjadřuje, aby si adresát tato data přečetl přednostně. Tento mechanizmus používá protokol Telnet. Kontrolní součet se počítá nejen z přenášených dat, ale i s položkami záhlaví TCP a některými složkami IP záhlaví. Kontrolní součet vyžaduje sudý počet Bytů, proto jsou v případě lichého počtu data fiktivně doplněna jedním Bytem na konci. Volitelná položka se skládá z typu volitelné položky, délky a hodnoty. Je-li maximální délka záhlaví 60 Bytů, pak na volitelné položky záhlaví zbývá maximálně 40 Bytů. Každá položka záhlaví musí být vždy dělitelná čtyřmi. Příkladem může být často využívaná položka MMS - Maximum segment size. Jejím použitím oznamujeme druhé komunikující straně maximální délku TCP segmentu, kterou si přejeme přijímat, aby se pokud možno zamezilo fragmentaci.
V případě jakýchkoliv připomínek mě prosím kontaktujte na emailu habrman@banan.cz.
Autor: Robert Habrman