4.1 TCP protokol
TCP (Transmission Control Protocol) je dominantan, spojevni, prijenosni protokol interneta, garantira pouzdanu isporuku podataka od izvorišta do odredišta u kontroliranom redoslijedu. PDU TCP protokola je segment. Segmenti se pakiraju u IP pakete i šalju preko mreže. Osnovna svojstva usluge koju nudi TCP su:
- Pouzdanost
- Veza od točke to točke
- Dvosmjerni prijenos podataka
- Svi podaci tretiraju se kao niz okteta
Prilikom korištenja TCP usluge entiteti prolaze kroz tri faze:
- Uspostava veze
- Razmjena podataka
- Prekid veze
Uspostava veze - Proces koji se izvodi na jednom računalu želi uspostaviti vezu s procesom na nekom drugom računalu. Računalo koje traži uspostavu veze naziva se klijent, a drugo računalo se naziva poslužitelj. Klijentski proces informira klijentski TCP da želi uspostaviti vezu s poslužiteljem. Klijentsko računalo tada šalje poslužitelju prvi specijalni segment. Poslužitelj odgovara drugim specijalnim TCP segmentom i konačno klijent odgovara trećim specijalnim segmentom. Ova procedura se naziva "three-way handshake". U nastavku slijedi objašnjenje spomenutih segmenata:
- Klijent prvi šalje specijalni TCP segment poslužitelju. Taj specijalni segment ne sadrži podatke aplikacijske razine. Ima jedan od bitova zastavica u zaglavlju segmenta. To je tzv. SYN bit, postavljen na 1. Iz tog razloga, taj specijalni segment zove se SYN segment. Nadalje, klijent odabire inicijalni redni broj (client_isn) i stavlja ga u polje za redni broj inicijalnog TCP SYN segmenta. Taj segment je uhvaćen u IP datagramu i poslan na internet.
- Pod pretpostavkom da IP datagram koji sadrži TCP SYN segment stigne do poslužitelja on izdvaja TCP SYN segment iz datagrama, alocira TCP spremnik i varijable i šalje segment kojim odobrava uspostavu veze klijentu. Taj segment odobravanja veze također ne sadrži podatke aplikacijske razine, ali sadrži tri važne informacije u zaglavlju segmenta. Prvo, SYN bit je postavljen na 1. Drugo, Acknowledgment polje zaglavlja TCP segmenta se namješta na isn+1. Na kraju, poslužitelj odabire svoj inicijalni redni broj (server_isn) i stavlja vrijednost u polje zaglavlja TCP segmenta.
- Kada klijent primi segment odobravanja veze, također alocira spremnik i varijable u vezi. Klijent tada šalje poslužitelju još jedan segment koji potvrđuje da je dobio segment odobravanja veze. To radi tako da stavi vrijednost server_isn+1 u acknowledgement polje zaglavlja. SYN bit postavlja se u 0 budući da je veza uspostavljena.
Kada se sva tri koraka obave, klijent i poslužitelj jedan drugome mogu slati segmente koji sadrže podatke. U svakom budućem segmentu SYN će biti postavljen na 0. Slika 4-1 prikazuje "three-way handshake" proceduru.
 |
Slika 4-1: "Three-way handshake" |
Razmjena podataka - TCP entiteti razmjenjuju podatke u obliku segmenata. Segment se sastoji od zaglavlja koje ima 20 okteta (uz opcionalni dio) za kojim slijedi nula ili više okteta podataka, a nastaje skupljanjem podataka od nekoliko upisivanja ili razbijanjem podataka od jednog upisivanja. Veličina segmenta je varijabilna uz dva ograničenja:
- Svaki segment uključujući i TCP zaglavlje mora stati u 65 535 okteta IP paketa
- Svaka mreža ima svoj MTU (Maximum Transmission Unit), a to je najveća dopuštena jedinica za prijenos koja definira gornju granicu veličine segmenta.
Ako je segment prevelik za mrežu kroz koju mora proći, čvor vrši fragmentaciju u više manjih segmenata od kojih svaki dobiva svoje IP zaglavlje.
Osnovni protokol kojeg koriste TCP entiteti je protokol s klizajućim prozorom (engl. Sliding Window):
- Nakon slanja segmenta predajnik pokreće brojač (engl. timer)
- Kad segment stigne na odredište, prijemnik šalje u segmentu potvrdu s brojem jednakim slijedećem broju segmenta kojeg očekuje
- Ako brojač istekne prije nego što je primljena potvrda, segment se šalje ponovno
Slika 4-2 prikazuje strukturu TCP segmenta:
 |
Slika 4-2: TCP segment |
Značenja polja su:
- Source Port - Broj priključne točke usluge izvorišta.
- Destination Port - Broj priključne točke usluge odredišta.
- Sequence Number - Redni broj prvog okteta podataka u tom segmentu; ako je postavljena zastavica S (SYN), onda je to početni redni broj (ISN - Initial Sequence Number), a prvi oktet podataka ima broj ISN+1.
- Acknowledgment Number - Broj potvrde; ako je postavljen A (ACK) bit, polje sadrži redni broj sljedećeg okteta kojeg primatelj očekuje.
- Offset - Pomak podataka, pokazuje na početak podataka u TCP segmentu, izraženo u 32-bitnim riječima (TCP zaglavlje je uvijek višekratnik 32-bitne riječi).
- Reserved – Polje je rezervirano za buduće potrebe; popunjeno je nulama.
- Kontrolni bitovi:
- URG - Indikator hitnih podataka
- ACK - Indikator paketa potvrde
- PSH - Inicira prosljeđivanje svih do tada neproslijeđenih podataka korisniku
- RST - Ponovna inicijalizacija veze
- SYN - Sinkronizacija rednih brojeva
- FIN - Izvorište više nema podataka za slanje
- Window – Prozor, označava koliko je okteta prijemnik spreman primiti
- Checksum - Kontrolni zbroj; računa se kao 16-bitni komplement jedinice komplementa zbroja svih 16-bitnih riječi u zaglavlju i podacima; pokriva i 96 bitova pseudozaglavlja koje sadrži izvorišnu i odredišnu adresu, protokol i duljinu TCP zaglavlja i podataka.
- Urgent Pointer - Pokazivač na redni broj okteta gdje se nalaze hitni podaci; polje se gleda jedino ako je postavljena zastavica URG.
- Options + Padding - Options mogu, a ne moraju biti uključene; ako postoje, veličine su x×8 bita, Padding je dopuna nulama do 32 bita.
- Data - Podaci aplikacijske razine.
Prekid veze - Kada klijentska aplikacija odluči prekinuti vezu s poslužiteljem šalje TCP segment sa FIN bitom postavljenim u 1 i uđe u FIN_WAIT_1 stanje. Dok je u FIN_WAIT stanju, klijentski TCP čeka TCP segment potvrde od strane poslužitelja.
Kada primi navedeni segment, klijentski TCP ulazi u FIN_WAIT_2 stanje. Dok je u FIN_WAIT_2 stanju, klijent čeka sljedeći segment od strane poslužitelja s FIN bitom postavljenim u 1. Nakon što primi taj segment klijentski TCP ulazi u TIME_WAIT stanje. TIME_WAIT stanje dopušta TCP klijentu da pošalje finalnu potvrdu u slučaju da je ACK izgubljen. Vrijeme provedeno u TIME-WAIT stanju ovisi o implementaciji, ali tipične vrijednosti su trideset sekundi, jedna minuta i dvije minute. Nakon čekanja veza se formalno zatvori.
Proces prekida TCP veze prikazan je na slici 4-3.
 |
Slika 4-3: Prekid TCP veze |