Transmisioni kontrolni protokol

**Transmisioni kontrolni protokol** (*TCP*, ) je protokol koji pripada sloju 4 OSI referentnog modela, ima za ulogu da obezbezbedi pouzdan transfer podataka u IP okruženju. Između ostalih servisa koje nudi, neki su: pouzdanost, efikasna kontrola toka podataka, operisanje u ful-dupleksu (istovremeno slanje i primanje podataka) i multipleksiranje koje omogućava istovremen rad niza procesa sa viših slojeva putem jedne konekcije. TCP vrši transver podataka kao nestrukturisan niz bajtova koji se identifikuju sekvencom. Ovaj protokol grupiše bajtove u segmente dodeli im broj sekvence, aplikacijama dodeli broj porta i prosledi ih IP protokolu.

TCP obezbeđuje pouzdanost pokretanjem algoritama koji pre razmene podataka prvo uspostave konekciju između korisnika, a potom obezbeđuje i niz mehanizama kao što je slanje ACK broja.
Strana koja prima podatke šalje broj sekvence bajta koje je primio, u slučaju da destinacija ne pošalje ACK da je primio određenu sekvencu bajtova u određenom vremenskom intervalu ona biva naknadno ponovo poslata.
Mehanizmi pouzdanosti kod TCP-a omogućuju uređajima da se nose sa gubicima, kašnjenjima, dupliciranjem ili pogrešnim isčitavanjem paketa. Time-out mehanizam omogućuje uređaju da detektuje izgubljene pakete i da zahteva njihovu ponovnu transimsiju.

## TCP zaglavlje





     bit 0-3  4-10 
     16-31


    
    
    
    
    
    
    
    


     Izvorišni port  Odredišni port

     Broj segmenta (SEQ)

     Broj sledećeg bajta (ACK)

     Dužina  Rezervisano    
    

U
R
G

    

A
C
K

    

P
S
H
  
    

R
S
T

    

S
      Y
N

    

F I&nbsp;
N

     Veličina dinamičkog prozora

     Čeksuma (Provera bitskih grešaka) 
     Pokazivač prioriteta (URG)

     Opcije

     Podatak




Polja:
* Izvorišni port - dodeljen broj (32 bita) ~ 65000, identifikuje aplikaciju koja je inicijator komunikacije
* Odredišni port - port koji identifikuje serversku aplikaciju
* Broj segmenta (SEQ) - redni broj segmenta u odnosu na početni (broj bajta u odnosu na inicijalni)
* Broj sledećeg bajta (ACK) - redni broj bajta poslat predajnoj strani koji očekuje da primi
* Dužina - Dužina zaglavlja
* Rezervisana polja
* URG, ACK, PSH, RST, SYN, FIN predstavljaju kontrolne bite
* Veličina dinamičkog prozora - broj okteta koje je moguće slati bez potvrde o njihovom prijemu
* Čeksuma - Provera bitskih grešaka, komplement sume TCP zaglavlja
* Pokazivač prioriteta (URG) - pokazuje važnost poruke koja se šalje
* Opcije - Opciona informacija
* Podatak - ako postoji opciona informacija bitovi počevši sa 192 predtavljaju poratak, inače od 160. bita

## Uspostavljanje konekcije
Komunikacija između aplikacija uz pomoć TCP protokola se odvija tako što se prvo između klijenta i servera uspostavi veza (usluga sa konekciojm), za razliku od komunikacije UDP protokolom koji je ne zahteva. Konekcija se uspostavlja tako što se između prijemne i predajne strane iz tri puta razmene poruke sa podešenim odgovarajućim kontrolnim bitima.
# Predajna strana A šalje poruku sa podešenim kontrolnim bitom SYN=1 (), ostali su podešeni na 0, pri čemu nasumično izabere redni broj segmenta (SEQA).
# Prijemna strana B odgovara porukom sa kontrolnim bitima SYN i ACK=1, svoj broj segmenta bira takođe nasumično (SEQB), a za ACK broj uzima ACK=(SEQA)+1, ovim je uspostavljena veza na liniji od predajne ka prijemnoj strani.
# Slanjem poruke sa podešenim kontrolnim bitom SYN=1 od pijemne strane, ona zahteva da predajna strana potvrdi uspostavljanje veze od prijmne ka predajnoj strani. Što ona i čini tako što odgovara porukom sa podešenim kontrolnim bitom ACK=1 (), dok uz to uzima vrednost ACK broja ACK=(SEQB)+1. Ovim je uspostavljena obostrana konekcija između klijenta i servera.

## Prekidanje konekcije
Pri završetku slanja podataka, server šalje poruku sa podešenim kontrolnim bitom FIN=1 (). Veza od servera ka klijentu se prekida time što klijent na slanje ovakve poruke odgovara sa porukom sa podešenim kontrolnim bitom ACK=1 (potvrda o prijemu). Ukoliko i klijent želi zatvoriti konekciju on isto tako šalje poruku sa podešenim bitom FIN=1. Konačno obostrano prekidanje veze se potvrđuje od strane servera koji odgovara sa porukom u čijem je zaglavlju podešen bit ACK=1.

## Povezano

* UDP
* Internet protokol
* Spisak internet protokola