Hlavička TCP protokolu

TCP jen spojově orientovaný protokol používaný pro spolehlivou přepravu dat přes síť.

Protokoly 4. vrstvy OSI jsou v rodině protokolů IP dva – TCP a UDP

Transmission Control Protocol (TCP)

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 balík 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.

aplikace používající TCP jako přenosový protokol – např. FTP, SMTP, http, SAP, SMB, …

Hlavička TCP protokolu

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

·         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). Některá z čísel jsou uvedena na konci kapitoly, ostatní lze najít např. v RFC 1700.

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.