Sreda, April 02, 2008

TCP/IP protokol

Transmision Control Protocol & Internet Protocol
Opis TCP i IP protokola


TCP/IP familiju protokola cine veci broj protokola koji sluze za komunikaciju u racunarskim mrezama. Celokupni TCP/IP se moze podeliti u nekoliko grupa prema nameni pojedinih protokola. Ta podela izgleda otprilike ovako:

- Transport: ovi protokoli sluze za prenos podataka od jedne do druge masine u mrezi.

TCP (Transmision Control Protocol): zahteva uspostavljanje stalne veze izmedju dva racunara, a podatci se razmenjuju sve vreme dok veza traje.

UDP (User Datagram Protocol): ovaj servis prenosi podatke ne uspostavljajuci stalnu vezu izmedju racunara.

- Routing: ovi protokoli rade sa adresiranjem podataka odredjivanjem najboljeg puta do odredista. Takodje rade na podeli velikih poruka u manje koji ce biti ponovo sklopljeni na odredistu.

IP (Internet Protocol): rukuje sa prenosom podataka.
ICMP (Internet Control Message Protocol): radi sa status porukama za IP, kao sto su greske itd.
RIP (Routing Information Protocol): jedan od nekoliko protokola za odredjivanje najboljeg puta do odredista.
OSPF (Open Shortest Path First): alternativni protokol za odredjivanje puta.

- Network Addresses: ovi servisi barataju adresiranjem masina, kako jedinstvenim brojevima tako i zajednickim simbolickim imenima.

ARP (Address Resolution Protocol): odredjuje jedinstveni broj (adresu) za svaku masinu u mrezi.

DNS (Domain Name System): odredjuje numericku adresu na osnovu imena racunara.

RARP (Reverse Address Resolution Protocol): odredjuje adrese masina na mrezi, ali na nacin suprotan ARP-u.

BOOTP (Boot Protocol): boot-uje masinu na mrezi citajuci informacije sa servera. Koristan za terminale bez hard diskova.


- User Services: aplikacije kojima korisnici imaju pristup.

FTP (File Transfver Protocol): prenosi fajlove sa jedne na drugu masinu. FTP za transver koristi TCP.

TFTP (Trivial File Transfer Protocol): prenosi fajlove koristeci UDP

TELNET: omogucuje remote login sto znaci da korisnik moze da se konektuje na drugu masinu u mrezi i koristi je kao da sedi za njenom tastaturom.

- Gateway Protocols: ovi servisi pomazu prenos podataka i status informacija preko lokalnih mreza.

EGP (External Gateway Protocol): prenosi routing informacije za eksterne mreze.

GGP (Gateway-to-Gateway Protocol): prenosi routing informacije izmedju internet gateway-a.

IGP (Internal Gateway Protovol): prenosi routing informacije za interne mreze.

- Others: ovi servisi ne spadaju ni u jednu pomenutu grupu, ali omogucavaju vazne radnje na mrezi.

NFS (Network File System): omogucuje da se direktoriumi na disku jedne masine montiraju na disk druge,omogucavajuci korisnicima da im pristupe kao da su deo lokalnog diska.

NIS (Network Information Service): barata sa korisnickim nalozima na mrezi.

RPC (Remote Procedure Call): omogucuje da udaljene aplikacije komuniciraju medjusobno.

SMTP (Simple Mail Transfer Protocol): protokol za transver elektronske poste izmedju masina.

SNMP (Simple Network Menagment Protocol): koristi se za objedinjavanje status podataka o TCP/IP konfiguraciji i softveru.

TCP i IP protokoli su dva primarna protokola u TCP/IP familiji i u ovom tekstu ce biti detaljno opisani.


T R A N S M I S I O N C O N T R O L P R O T O C O L

&

I N T E R N E T P R O T O C O L



1. UVOD


TCP/IP protokol je nastao u istrazivackom projektu sluzbe za unapredjene istrazivacke projekte za bezbednost Sjedinjenih Drzava (Defence Advenced Research Projects Agency - DARPA) 1969. Prvi put je bio primenjen na tada jos eksperimentalnoj mrezi ARPANET, zamenivsi dotadasnji NCP protokol (Network Control Protokol), i do 1975.
pokazalo se veoma uspesnim.
Zahvaljujuci tome sto je tehnicka dokumentacija bila javno dostupna, bio je veoma popularan i 1983. TCP/IP je usvojen kao standard. Kada je ARPANET konacno izrastao u Internet, vec je postao glavni protokol za komunikaciju ne samo na internetu, vec i na ostalim mrezama.
Ako pretpostavimo da se nalazimo za nekim Unix sistemom i da zelimo se konektujemo na neki server na internetu. Neka to, na primer, bude neki univerzitet koji ima adresu quark.physics.groucho.edu. Stoga u Unix promptu kucamo:

$telnet quark.physics.grouco.edu

Welcome to Physics Department at GMU
login:

Kada unesemo svoj username i password, spremni smo za rad na doticnom sistemu bas kao da sedimo za njenom konzulom. Kada zavrsimo, vracamo se u prompt svoje masine. I upravo smo iskoristili jednu od interaktivnih aplikacija koje podrzavaju TCP/IP, remote login. Veoma vazna aplikacija koja podrzava TCP/IP je i NFS, sto znaci Network File System. To je jos jedan nacin za prenos podataka, jer on u nacelu omogucava montiranje direktorijuma sa udaljenog servera, kao da je deo lokalnog fajl sistema. Na primer, svi korisnicki home-direktorijumi mogu biti smesteni na jedan centralni server i odatle se preko LAN mreze montirati na ostale. Ovo ce za posledicu imati da na bilo koji server da se logujemo imacemo isti home-direktorijum. Isto tako, velike aplikacije mozemo instalirati samo na jednom serveru, koji na primer ima najveci disk, a da se montiranjem tog direktorijuma aplikacija koristi na svim serverima, bas kao da je na lokalnom disku.

1.1 HARDVER

Najpopularniji hardver koji se koristi u LAN mrezama jeste Ethernet. Kartice u slotu su povezane preko jednostavnog koaksialnog kabla impedanse 50 oma i BNC T-konektora, dok na krajevima mora postojati BNC terminator od 50 oma. Transfer kroz takvu mrezu se krece oko 10 Megabita u sekundi, i sasvim zadovoljava potrebe prosecne mreze. Mada ima i jednu manu, a to je da duzina kabla ne sme da predje odredjenu granicu od nekih 150-200 metara. Ovo je najpopularniji tip, tzv. "thin", ali postoje i drugi kao sto je "thick" ili "twisted pair".
Kada je potrebno povezati veliki broj servera koji se cesto nalaze na velikim udaljenostima koristi se tzv. Fiber Distributed Data Interface ili FDDI. Kako mu samo ime kaze, koristi opticki kabel i uglavnom sluzi za povezivanje vise manjih LAN Ethernet mreza. FDDI tako cini kicmu (backbone) jedne mnogo vece mreze sastavljene od vise manjih.Transver preko FDDI se krece oko 100 Megabita u sekundi sa maksimalnom dizinom kabla od oko 200 kilometara.

Za mreze ciji su serveri medjusobno veoma udaljeni koristi se drugaciji tip hardvera zasnovan na standardu X.25. Koriste ga mnoge Public Data mreze kao sto je Tymnet u SAD-u ili Datex-P u Nemackoj. X.25 zahteva hardver poznat kao Packet Assembler/Disassembler ili PAD. Radio amateri takodje imaju opremu kako bi svoje racunare povezali na mrezu, poznat kao paket-radio ili ham-radio. On koristi standard AX.25 koji je proistekao iz predhodnog.

I na kraju da spomenemo jos jedan komad hardvera za konekciju na mrezu, a to je modem. On ostvarije vezu preko seriskog porta i koristi takozvani Seiral Line Internet Protokol ili skraceno SLIP.

1.2 MREZNI INTERFEJSI

Da bi se sakrila razlicitost opreme koja se koristi za umrezavanje, TCP/IP definise interfejs preko koga se pristupa hardveru. Ovaj interfejs nudi set operacija koji su isti za sve tipove hardvera i u osnovi radi sa slanjem i primanjem paketa podataka.
Za svaki periferni uredjaj koji se koristi u mrezi odgovarajuci interfejs mora biti prisutan u kernelu. Na primer, Ethernet interfejs moze biti et0 i et1, SLIP interfejs sl0, sl1 itd. Ova imena se koriste za potrebe konfiguracije kada se zeli imenovati fizicki uredjaj kome kernel treba da se obraca.

2. IP PROTOKOL


Najprostije receno, namena Internet Protokola je slanje i primanje paketa podataka preko racunarskih mreza. To se ostvaruje slanjem paketa od jednog do drugog internet modula, koji se nalaze na serverima kroz koje se vrsi komunikacija, sve dok ne stigne na
odrediste.
Dve osnovne funkcije koje obavlja IP protokol su adresiranje i fragmentovanje.
Internet moduli koriste adrese unutar IP zaglavlja za prenos paketa do odredista. Biranje puta kojim ce se paket kretati naziva se routing.

2.1 IP ADRESE

Da bi se mogao koristiti u TCP/IP mrezi, ranije pomenutom interfejsu mora biti dodeljena IP adresa koja sluzi za identifikaciju pri komunikaciji sa ostatkom mreze. Ova adresa je u stvari 32-o bitni broj, i ona je za svaki server u mrezi jedinstven. Ukoliko imamo lokalnu mrezu koja nema TCP/IP saobracaj sa drugim mrezama ovaj broj nam nije bitan. Tu podrazumevam racunare koji imaju multi-user operativni sistem, a nisu prikaceni na LAN mrezu. Oni imaju tzv. virtualne termunale preko kojih se korisnik loguje. Izmedju virtualnih terminala moze cak postojati i TCP saobracaj. Takav sistem obicno ima IP adresu 127.0.0.1, koja se naziva loopback adresa.
Medjutim, za sajtove na internetu, IP adresa je odredjen od strane Network Information Centra, skraceno NIC.
Radi lakseg citanja, IP adrese su podeljene u 8-mo bitne brojeve nazvane oktetima. Na primer, quark.physics.groucho.edu ima IP adresu 0x954C0C04, sto se pise kao 149.76.12.4. Ovaj format se naziva dotted quard notation.
Jos jedan razlog za ovako prikazivanje je taj sto su IP adrese podeljene u mrezni broj sto odgovara pocetku adrese, i broj servera, a to je ostatak. Kada se od NIC-a trazi zahtev za dodelu IP adrese, ne dobija se adresa za svaki server koji se koristi u mrezi. Umesto toga dobija se samo mrezni broj, a sistem administrator treba da dodeli adrese serverima, naravno u okviru dobijenog mreznog dela adrese.
U zavisnosti od velicine mreze, serverov deo adrese moze biti manji ili veci. Da bi se zadovoljili razliciti zahtevi, postoje nekoliko klasa mreza sa razlicitiom podelom IP adrese.


Klasa A: mreze od 1.0.0.0 do 127.0.0.0. Mrezni broj je sadrzan u prvom oktetu. To znaci da za server ostaje 24 bita, sto pak znaci da se na takvoj mrezi moze nalaziti 1.6 miliona servera.

Klasa B: mreze od 128.0.0.0 do 191.255.0.0. Ovde je za mrezni deo odvojeno dva okteta, sto znaci 16320 mreza sa po 65024 servera svaki.

Klasa C: mreze od 192.0.0.0 do 223.255.255.0. Mrezni deo zauzima tri okteta, sto dozvoljava 2 miliona mreza sa po 254 servera.

Kase D, E i F: adrese od 224.0.0.0 do 254.0.0.0, i oni su eksperimentelne, ili su pak rezervisane za buduce potrebe i ne koriste se.

Ako se vratimo na prethodni primer, vidimo da je 149.76.12.4 ukazuje na server 12.4 u mrezi klase B 149.76.0.0.
Primetili smo da nisu sve mogucnosti dozvoljene za server-deo adrese. To je zato sto okteti sa 0 ili 255 su rezervisani za specialne potrebe. Kada su svi bitovi servernog dela 0, to ukazuje na mrezu. Kada su svi bitovi 1 onda je to tzv. broadcast adresa. Ona,oznacava sve servere u mrezi. Na primer 149.76.255.255 nije adresa servera, nego pokazivac na sve servere u mrezi 149.76.0.0.
Postoje i dve adrese koje su rezervisane. To su 0.0.0.0 i 127.0.0.0. Prva je tzv. default route, a druga loopback adresa.

2.2 IP MREZE

Kada nekom pisemo pismo, na poledjini koverte obicno navedemo punu adresu primaoca, sto znaci: drzavu, regiju, opstinu, grad, broj poste,ulicu i broj. Kada ga ubacimo u postansko sanduce, postanska sluzba ce ga dopremiti primaocu. Prvo ce ga odneti u navedenu drzavi i grad, postar ce ga odneti u navedenu ulicu i ubaciti ga u sanduce ispred navedenog broja. Nase pismo se isporucuje po hijerarhiskoj semi. Sluzbenika u lokalnoj posti zanima samo u koju drzavu treba poslati nase posmo, ali ne i kako ce se ono dalje kretati u toj drzavi.
Slicno funkcionisu i IP mreze. Ceo internet se sastoji od velikog broja samostalnih mreza. Njih povezuju posebni serveri koji se nazivaju gateway-i. Nas server treba samo da pronadje gateway doticne mreze, i dalju isporuku paketa prepusta njemu.


2.3 POD-MREZE

IP adresa je, dakle, podeljena na mrezni i server deo, kao sto je vec pomenuto. Stoga, logicno je pretpostaviti da se serveri sa istim mreznim delom adrese nalaze na istoj mrezi.
Medjutim, ako nasu mrezu sacinjavaju celine koje su medjusobno idejno razlicite, mozda bi pozeleli da one na mrezi budu razdvojene i fizicki. IP protokol nam zato omogucava da mrezu podelimo na nekoliko podmreza. Sada je mrezni deo spreman da prihvati nekoliko bitova iz dela za server kako bi se prosirio. Broj bitova koji ce se prihvatiti odredjen je tzv. net i subnet maskom. To je takodje 32-o bitni broj, i kada se nad njim i IP adresom izvrsi AND logicka operacija, dobija se mrezni deo servera u
podmrezi.
Uzmimo za primer opet univerzitet groucho.edu. Recimo da, jednostavno,ima vise smerova, na primer smer za matematiku i smer za fiziku. Kompletna mreza ima adrezu 149.76.0.0, i net masku 255.255.0.0. Ona je podeljena na 254 podmreza. Backbone mreze cini FDDI, ima adresu 149.76.1.0. Na njega su prikljucene ethernet mreze pojedinih smerova. Tako recimo matematicki smer ima mrezu 149.76.4.0, dok smer za fiziku ima 149.76.12.0.Sve ove mreze imaju isti mrezni deo IP adrese, dok treci oktet sluzi za medjusobno raspoznavanje. Tako je subnet maska sada 255.255.255.0.
Pod mreze su, dakle, samo unutrasnja podela mreze, i potpuno ne nevidljiva za spoljasnji svet. Da li ce je biti i kako ce izgledati zavisi jedino od vlasnika ili administratora mreze.


2.4 GATEWAY

Vidokrug servera na nekoj fizickoj mrezi, kao sto je na primer ethernet, veoma je ogranicen: moze komunicirati samo sa serverima koji su na istojtoj mrezi. Da bi se mreze povezale, i da bi nas server dosegao na drugumrezu potreban je tzv. gateway. Gateway je racunar koji je povezan na najmanje dve mreze istovremeno i konfigurisan je tako da prenosi pakete izmedju mreza.
Da bi IP bio u stanju da prepozna da li je trazeni server na drugoj fizickoj mrezi, razlicite fizicke mreze treba da pripadaju razlicitim IP mrezama. Na primer mreza 149.76.4.0 je rezervisana za servere na matematickom smeru. Kada se jednog takvog salje paket na fiziku, mrezni softver odmah vidi da server 149.76.12.4 nije na doticnoj mrezi, i paket se salje na gateway. Gateway je prikacen na dve mreze: s jedne strane na matematicki smer, a s druge na FDDI backbone. Naravno svakom pristupa preko razlicitog interfejsa, eth0 i fddi0. Sada se postavlja pitanje koju IP adresu on treba da ima. Da li se nalazi na mrezi 149.76.1.0 ili 149.76.4.0?
Gateway, naravno, pripada obema mrezama. Tako kada se obraca nasem serveru na matematickom smeru ima adresu 149.76.4.5, a kada se obraca serveru na backbone-u ima adresu 149.76.1.2. Deo mreze koju smo opisali izgleda ovako:


Ethernet | +-+ quark na Internet /|
149.76.12.0|-----| | 149.76.12.4 |
| +-+ internet +-+
+-+ gateway | |
| | physics +-+
+-+ gateway |
| |
| FDDI backbone |
=======================================================================
149.76.1.0 |
|
math +-+
gateway | |
+-+
Ethernet | +-+ erdos
149.76.4.0|-----| | 149.76.4.1
| +-+

2.5 ROUTING TABELA

Ranije smo videli da kada sa 149.76.4.1 saljemo paket na 149.76.12.4, IP prvo proverava da li je odredisni server na doticnoj mrezi. Kada ustanovi da nije, paket salje na gateway. On je sada, u osnovi suocen sa istim problemom. Posto ustanovi da 149.76.12.4 nije ni na jednoj mrezi na koju je prikljucen, mora da nadje sledeci gateway kome ce predati paket. Zbog toga mora imati informaciju koji gateway sluzi za pristup trazenoj mrezi. Routing informacije koje IP koristi prikupljene su u tabelu koja povezuje gateway-e i mreze kojima one pripadaju. IP adresa koju smo nazvali default route, 0.0.0.0, predstavlja sve ostale mreze koje nisu navedene u tabeli, a to moze biti bilo koja mreza na internetu. Tako se paketi koji koji su adresirani na mreze koje nisu navedene u tabeli salju na internet gateway.
Na nasem gateway-u tabela bi izgledala ovako:


+------------+------------+-----------+
| Network | Gateway | Interface |
+------------+------------+-----------+
| 149.76.1.0 | - | fddi0 |
| 149.76.2.0 | 149.76.1.2 | fddi0 |
| 149.76.3.0 | 149.76.1.3 | fddi0 |
| 149.76.4.0 | - | eth0 |
| 149.76.5.0 | 149.76.1.5 | fddi0 |
| ... | ... | ... |
| 0.0.0.0 | 149.76.1.1 | fddi0 |
+------------+------------+-----------+

"-" oznacava mreze na koje je nas gateway direktno spojen.

U zavisnosti od velicine mreze koriste se razliciti routing protokoli. U manjim mrezama koriste se tzv. internal routing protokoli. Jedan od takvih je RIP, Routing Information Protokol. Izmedju vecih mreza koriste se eksternal routing protokoli kao sto su EGP (Exterior Gateway Protokol) ili BGP (Bourder Gateway Protokol).

2.6 HOSTNAME RESOLUTION

TCP/IP za adresiranje koristi 32-o bitne brojeve. Medjutim, cak i uz velike napore uspeli bi da zapamtimo samo nekoliko. Serveri se stoga nazivaju"obicnim" imenima, a zadatak mreznog softvera je da ta imena pretvori u vec pomenute 32-o bitne adrese. Taj proces naziva se host name resolution.Aplikacija koja zeli da sazna IP adresu servera preko njenog imena ne mora da poseduje sopstvene rutine za to. U standardnoj C biblioteci za Linux postoje dve funkcije za to. To su gethostbyname() i gethostbyaddr().Na malim mrezama kao sto je ethernet nije tesko napraviti tabele koje ce
povezivati imena i adrese servera. Takva tabela se obicno cuva u fajlu /etc/hosts. Kada se na mrezu dodaju ili skidaju serveri, sve sto treba uraditi jeste izmeniti ovaj fajl na svim serverima u mrezi. Ali sta raditi sa mrezama koje mozda imaju vise stotina servera, da i ne spominjemo internet.
Jedno od resenja ovog problema je NIS, Network Information System, sire poznat kao YP ili Yellow Pages, a koji je ponudio Sun Microsystems. NIS odlaze hosts fajl, kao i ostale informacije vezane za mrezu, na jedan veci server sa koga svi ostali uzimaju informacije. Ovo je prihvatljivo samo za mreze srednje velicine, jer da je mreza veca doslo bi do zagusenja mreze.
Na internetu, informacije o adresama se i takodje nalaze u jednom HOSTS.TXT fajlu. Njega poseduje Network Information Center, tj. NIC. On treba da bude download-ovan na sve vece i manje mreze.

2.7 FRAGMENTACIJA

Ovo je drugi zadatak koji obavlja IP protokol. Neke lokalne mreze ne mogu da prenose IP pakete koji su veci od neke, za tu mrezu dozvoljene velicine. Kada paket stigne na gateway takve mreze,on mora biti podeljen na manje pakete i tako dostavljen sledecem gateway-u. Odredisni gateway te fragmente ponovo sastavlja i tako opet ceo
paket salje dalje.
Kada internet modul fragmentuje paket, kreira dva nova paketa i u njihovo zaglavlje kopira sadrzaj originalnog. Zatim se sadrzaj paketa podeli na dva dela, s tim da prvi mora biti sacinjen od punih 8 oktetnih (64-bitnih) blokova. Broj takvih blokova se naziva NFB, od Number of Fragment Blocks. Prvi deo se mesta u prvi od dva nova paketa, u TotalLength polje se upisuje duzina prvog fragmenta, i setuje se more-fragments flag. Drugi deo sadrzaja se smesta u drugi paket i u Total Length polje se upisuje duzina tog fragmenta. More-fragments flag ostaje isti kao i kod originalnog paketa, dok se u fragment offset polje upisuje vrednost iz originalnog paketa plus NFB.
Ovde je bila opisana pokela na dva fragmenta, ali ukoliko je paket veci deli na potreban broj kako bi se mogli preneti kroz mrezu.
Ponovno sklapanje fragmenata se vrsi tako sto internet modul kombinuje fragmente koji imaju iste vrednosti za prva cetiri polja u zaglavlju.Sadrzaji pojedinih fragmenata se slazu prema vrednostima u fragment offset polju u zaglavlju fragmenta. Prvi fragment ima za fragment offset nula, dok zadnji ima more-fragments flag resetovan na nulu.

2.8 IP ZAGLAVLJE


0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of Service| Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to Live | Protocol | Header Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Version: 4 bita
Ovo polje sadrzi informaciju o verziji Internet Protokola.

IHL: 4 bita
Internet Header Length - duzina IP zaglavlja u 32-o bitnim recima,
Pokazuje na polje sa podatcima. Najmanja vrednost za ispravno zaglavlje je 5.

Type of Service: 8 bitova
Ovi parametri se koriste pri zahtevu specijalnih usluga mreze.Neke mreze, na primer, podrzavaju saobracaj viseg prioriteta.
Tri osnovna parametra su : zadrzavanje - Delay
pouzdanost - Reliabiliti
propusnost - Throughput

Celokupno polje izgleda ovako:

bitovi 0-2: prioritet
111 - Network Control
110 - Internetwork Control
101 - CRITIC/ECP
100 - Flash Override
011 - Flash
010 - Immediate
001 - Priority
000 - Routine

bit 3: 0 = Normal Delay 1 = Low Delay
bit 4: 0 = Normal Throughput 1 = High Throughput
bit 5: 0 = Normal Reliabiliti 1 = High Reliabiliti
bitovi 6-7: Rezervisani za buduce potrebe


Total Lenght: 16 bitova
Ukupna duzina paketa u oktetima ukljucujuci i zaglavlje. Ovo polje dozvoljava paketu duzinu od 65535 okteta. Tako dugacki paketi su cesto neprakticni na vecini mreza. Serveri moraju biti pripremljeni za primanje paketa vecih od 576 okteta. Preporucuje se da server salje paket veci od 576 okteta samo ako je siguran da je odrediste spremno da prihvati duze pakete.

Identification: 16 bitova
Vrednost odredjena od strane posaljioca za pomoc pri povezivanju fragmenata.

Flags: 3 bita
Razni kontrolni flagovi.

bit 0: rezervisan, mora biti 0
bit 1: 0 = May Fragment 1 = Don't Fragment
bit 2: 0 = Last Fragment 1 = More Fragments

Fragment Offset: 13 bitova
Ovo polje ukazuje gde u datagramu pripada taj paket. Fragment offset se meri u delovima od po 8 okteta (64 bita). Prvi paket ima fragment offset 0.

Time to Live: 8 bitova
Ovo polje daje maksimalno vreme koje paket moze da provede na mrezi. Ako ovo polje sadrzi vrednost nula, paket se mora odmah unistiti. Vrednost polja se menja pri prolasku kroz servere.

Protocol: 8 bitova
U ovom polju se naznacuje koji protokol dalje preuzima podatke iz paketa. Kao sto smo spomenuli to su najcesce TCP ili UDP.

Header Checksum: 16 bitova
Checksum samog zaglavlja. Posto se zaglavlje menja ova vrednost se proracunava svaki put kada se promeni polje Time to LiveChecksum izostavlja vrednost svog polja.

Source Address: 32 bita
Adresa posaljioca.

Destination Address: 32 bita
Adresa odredista.

Options: duzina nije fiksna
Razne opcije.
Ovo polje ne mora postojati u paketu.

Padding: duzina nije fiksna
Ovo polje sluzi da dopuni zaglavlje do punih 32 bita. Vrednost
polja je uvek nula.


2.9 VEZA SA OSTALIM PROTOKOLIMA

IP protokol se koristi za prenos podataka od jednog do drugog internet modula. Medjutim, on se ne koristi sam. Podaci koje prenosi su najcesce paketi drugih protokola. Kada, na primer, zelimo da se logujemo na neki server komandom telnet, on se prvo obraca TCP protokolu koji od podataka koje kucamo pravi TCP paket. Njega dalje predaje IP protokolu koji na njega dodaje svoje zaglavlje i tako salje preko mreze. Kada stigne na odrediste, prvo ga prima IP, zatim TCP i na kraju dolazi do telnet servisa na serveru.


+------+ +-----+ +-----+ +-----+
|Telnet| | FTP | | TFTP| ... | ... |
+------+ +-----+ +-----+ +-----+
| | | |
+-----+ +-----+ +-----+
| TCP | | UDP | ... | ... |
+-----+ +-----+ +-----+
| | |
+--------------------------+----+
| Internet Protocol & ICMP |
+--------------------------+----+
|
+---------------------------+
| Local Network Protocol |
+---------------------------+

3. TCP PROTOKOL


Mreza se sastoji iz vise servera povezanih izmedju sebe. Bilo da su one lokalne (ethernet) ili globalne (internet), sve komunikacije su paketno orjentisane. Izraz "paket podataka" ukazuje na podatke koji se salju pod jednim zaglavljem.


3.1 MEDJUPROCESNA KOMUNIKACIJA

Serveri su racunari prikaceni na mrezu, i oni su izvori i odredista paketa koji se salju. Svi programi koji se na njemu izvrsavaju nazivaju se procrsi. Posto se razmena podataka izmedju dva servera se vrsi preko programa (Telnet, FTP, TFTP...), ona se naziva se medjuprocesna komunikacija. Procesi za svoj ulaz i izlaz koriste portove. Neki portovi su standardni za odredjene servise. Ovako izgleda jedan server skeniran programom nmap:


Starting nmap V. 2.01 by Fyodor (fyodor@dhp.com, [url=http://www.insecure.org/nmap/)]www.insecure.org/nmap/)[/url]
Aliases for wintermute.eme:
wintermute
Interesting ports on wintermute.eme (193.71.1.2):
Port State Protocol Service
21 open tcp ftp
23 open tcp telnet
25 open tcp smtp
37 open tcp time
70 open tcp gopher
79 open tcp finger
109 open tcp pop-2
110 open tcp pop-3
111 open tcp sunrpc
113 open tcp auth
143 open tcp imap
513 open tcp login
514 open tcp shell
635 open tcp unknown

Nmap run completed -- 1 IP address (1 host up) scanned in 1 second

Procesi izmedju sebe komuniciraju pozivajuci TCP i predajuci im podatke kao argument. TCP pakuje te podatke u segmente i poziva IP modul kako bi ih on preneo svaki segment do odredisnog TCP-a. Kada sakupi i sastavi sve segmente, podatke predaje odredisnom procesu. Sustina komunikacije na internetu je simbioza izmedju TCP i IP protokola.


3.2 INTERFEJSI

TCP-user interfejs USPOSTAVLJA i PREKIDA vezu, SALJE i PRIMA podatke i prikazuje STATUS veze. Ovi pozivi su kao i svi ostali unutar korisnickog programa ili operativnog sistema, kao na primer otvaranje, citanje, pisanje i zatvaranje fajla.

TCP-network interfejs preduzima pozive za slanje i primanje IP paketa adresiranih na TCP module na serverima negde na mrezi. Ovi pozivi predaju adresu primaoca, kao i sve ostale parametre IP modulu.


3.3 ZADATCI TCP PROTOKOLA

Osnovni zadatak TCP protokola je da obezbedi pouzdanu konekciju i protok podataka izmedju dva procesa. Da bi ga uspesno obavio, mora obratiti paznju na sledece oblasti:

1) Transver podataka
2) Pouzdanost
3) Kontrola protoka
4) Multipleksiranje
5) Konekcija
6) Prvenstvo i sigurnost


3.3.1 TRANSVER PODATAKA

TCP je u stanju da prenosi kontinualni niz okteta izmedju dva korisnika u oba pravca, pakujuci odredjen broj okteta u segmente i tako saljuci preko mreze.
Ponekad procesi moraju biti sigurni da su svi podaci koje su dostavili TCP-u poslati. Za ovaj slucaj definisana je tzv. push funkcija. Da bi se uverio da su podaci poslati, proces koji salje podatke naznacava da bi oni trebali biti "gurnuti" do odredisnog procesa. Pozivanje push funkcije ima za posledicu da TCP odmah posalje sve pakete koje ima u baferu.


3.3.2 POUZDANOST

TCP mora nadoknaditi ostecene, izgubljene ili duplicirane podatke. Da bi to postigao, TCP salje tzv. sequence number u svakom paketu, i od primaoca ocekuje potvrdu da je paket primljen. Ako potvrda ne stigne u odredjenom vremenskom intervalu paket se salje ponovo. Sequence number sluzi da bi primaoc odredio koji koji paketi su neocekivani ili duplirani.


3.3.3 KONTROLA PROTOKA

TCP prati koliko je primalac u sledecem paketu spreman da primi podataka. Ovo se postize slanjem window polja uz svaki ACK paket. Window, dakle naznacava broj okteta koji moze da se posalje pre daljih uputstava.


3.3.4 MULTIPLEKSIRANJE

Da bi omogucio svim procesima da istovremeno koriste TCP, TCP deamon (program koji kontrolise TCP komunikaciju) definise portove preko kojih mu procesi pristupaju. Procesi, da bi pristupili na port, generisu tzv. socket (prikljucak). Veza se moze uspostaviti samo ako na obe strane postoje takvi "prikljucci". Pozeljno je da cesto upotrebljivani procesi imaju izlaz na uvek iste portove koji su poznati svim serverima, kao sto je to vec ranije pomenuto.


3.3.5 KONEKCIJA

Kombinacija svih informacija o pouzdanosti i kontroli protoka, ukljucujici i socket, sequence number, window velicinu naziva se konekcija (ili veza). Svaka veza je sedinstveno odredjena parom socket-a, jednim sa svake strane. Kada dva procesa zele da komuniciraju, njihov TCP prvo mora da uspostavi vezu izmedju socket-a. Kada se komunikacija zavrsi veza se prekida i oslobadjaju se resursi koje je ona zauzimala.


3.3.6 PRVENSTVO I SIGURNOST

TCP korisnici ponekad insistiraju na sigurnosti svojih veza, ili na hitnosti paketa koje salju. Ovi parametri se naznacavaju u opcijama u TCP zaglavlju.

3.4 TCP ZAGLAVLJE


0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Port | Destination Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Acknowledgment Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data | |U|A|P|R|S|F| |
| Offset| Reserved |R|C|S|S|Y|I| Window |
| | |G|K|H|T|N|N| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Urgent Pointer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Source Port: 16 bitova
Port sa koga se salje paket.

Destination Port: 16 bitova
Port na koji se salje paket.

Sequence Number: 32 bita
Sequence number prvog okteta podataka u segmentu. Ukoliko je postavljen
SYN flag vrednost polja je initial sequence number (ISN), a prvi oktet je ISN+1.

Acknowledgment Number: 32 bita
Ako je ACK bit setovan ovo polje sadrzi vrednost treba da ima sledeci sequence number koji posaljilac ocekuje da primi. Jednom kada se veza uspostavi ovo se uvek salje.

Data offset: 4 bita
Broj 32-o bitnih reci u TCP zaglavlju. On pokazuje gde pocinju podatci.
TCP zaglavlje uvek ima ceo broj 32-o bitnih reci.

Reserved: 6 bitaova
Rezervisano za buduce potrebe. Sadrzaj mora biti nula.

Control Bits: 6 bitova
URG: ukazuje na Urgent Pointer
ACK: ukazuje na Acknowledgment
PSH: Push funkcija
RST: Reset veze
SYN: sinhronizovanje sequence number-a
FIN: Nema vise podataka od strane posaljioca

Window: 16 bitova
Broj okteta pocevsi od onog naznacenog u acknowledgment polju koje je posaljioc segmenta spreman da primi.

Checksum: 16 bitova
Checksum zaglavlja. Dok se racuna ovo polje sadrzi nule.
Checksum pokriva i 96-o bitno pseudo zaglavlje koje se nalazi ispred
TCP zaglavlja. Ovo zaglavlje sadrzi adrese posaljioca i primaoca, protokol i TCP duzinu. Ovo zaglavlje stiti paket da ne zaluta na pogresnu adresu. Pseudo zaglavlje se nosi u IP paketu i predaje se TCP-network interfejsu kao argument, odnosno rezultat poziva TCP-a.


+------------------------------+
| Source Address |
+------------------------------+
| Destinatin Address |
+------+----------+------------+
| zero | Protocol | TCP Lenght |
+------+----------+------------+


TCP duzina je komplaetna duzina TCP paketa u oktetima ne ukljucujuci pseudo zaglavlje.

Urgent Pointer: 16 bitova
Polje sadrzi vrednost urgent pointer-a. Urgent pointer pokazuje na sequence number koji sledi posle podataka koji su oszaceni kao hitni. Ovo polje se uzima u obzir samo ako je URG flag setovan.

Options: duzina nije fiksna
Opcije zauzimaju mesto na kraju TCP zaglavlja. Sve opcije su uracunate u checksum.

Padding: duzina nije fiksna
Ovo polje dopunjava TCP zaglavlje do ponih 32 bita. Sastavljeno je iskljucivo od nula.

3.5 USPOSTAVLJANJE VEZE

TCP omogucava dvosmernu komunikaciju (full duplex), sto znaci da podaci mogu da se krecu u oba smera istovremeno. Videli smo da procesi mogu da "poseduju" portove i samo preko njih mogu da uspostave vezu sa drugim procesom. Ako proces na serveru ima izlaz na odredjeni port i ocekuje da uspostavi vezu sa drugim procesom, onda se kaze da taj proces "slusa" na pomenutom portu.

Sada cemo detaljno razmotriti kako se preko TCP protokola uspostavlja
veza izmedju dva procesa.

Uzecemo za primer da se na jednoj strani veze nalazi server, a na drugoj klijent. Da bi jednostavnije predstavili vezu koristicemo sledece skracenice:

SRV_SEQ_0: initial sequence number servera
SRV_SEQ: sequence number servera
SRV_ACK: acknowledgemant servera
SRV_WIND: window koji salje server
CLT_SEQ_0: initial sequence number klijenta
CLT_SEQ: sequence number klijenta
CLT_ACK: acknowledgemant klijenta
CLT_WIND: window koji salje klijent

SEG_SEQ: sequence number tekuceg paketa
SEG_ACK: acknowledgemant tekuceg paketa
SEG_FLAG: kontrolni bitovi tekuceg paketa

Kada se nikakvi podaci ne salju imamo da je SRV_SEQ = CLT_ACK i CLT_SEQ = SER_ACK.
Kada pocne razmena podataka vaze sledece formule:
SRV_SEQ = CLT_ACK + CLT_WIND kao i
CLT_SEQ = SER_ACK + SER_WIND

Da bi uspostavio vezu, TCP koristi tzv. three-way handshake. To znaci da je za uspostavljanje veze potrebno tri paketa. Ako predpostavimo da klijent zeli da se poveze na server, uspostavljanje veze je prikazano na slici [6], a teci ce na sledeci nacin:

- Veza na strani klijenta je zatvorena (CLOSED state), a server slusa na odredjenom portu (LISTEN state)

- Klijent salje svoj initial squence number serveru i postavlja SYN bit:

SEG_SEQ = CLT_SEQ_0
SEG_FLAG = SYN

Server je sada primio zahtev za sinhronizaciju. Veza u ovoj fazi se naziva SYN-SENT.

- Kao odgovor klijentu server salje sledeci paket:

SEG_SEQ = SRV_SEQ_0
SEG_ACK = CLT_SEQ_0 + 1
SEG_FLAG = SYN

SRV_ACK sada postaje CLT_SEQ_0 + 1. Ova faza veze se naziva SYN-RECIVED.

- Kada primi paket, klijent potvrdjuje serveru SRV_SEQ:

SEG_SEQ = CLT_SEQ_0 + 1
SEG_ACK = SRV_SEQ_0 + 1

i klijent postavlja CLT_ACK na SRV_SEQ_0 + 1. Sada je veza uspostavljena Za SEQ i ACK sada imamo sledece vrednosti:

CLT_SEQ = CLT_SEQ_0 + 1
CLT_ACK = SRV_SEG_0 + 1
SRV_SEQ = SRV_SEQ_0 + 1
SRV_ACK = CLT_SEQ_0 + 1


Server Client
state action state


LISTEN CLOSED

<- SYN,
CLT_SEQ_0

LISTEN SYN-SENT

SYN, ->
SRV_SEQ_0,
CLT_SEQ_0+1

SYN-RECEIVED ESTABLISHED

SRV_SEQ = CLT_SEQ_0 + 1
CLT_ACK = SRV_SEQ_0 + 1

<- ACK,
CLT_SEQ_0 + 1
SRV_SEQ_0+1

ESTABLISHED

SRV_SEQ = SRV_SEQ_0 + 1
SRV_ACK = CLT_SEQ_0 + 1


Veza se moze prekinuti saljuci paket sa setovanim FIN ili RST flagom. Ako primi RST flag server (ili klijent) ulazi u CLOSED stanje i oslobadja sve resurse koje je veza zauzimala. Ovaj paket se ne potvrdjuje, a paketi koji stizu posle njega se ignorisu.

Ako je primljen paket sa FIN flagom racunar ulazi u CLOSED-WAIT stanje
i pocinje proces gracioznog zatvaranja veze.

Program koji sledi demonstrira uspostavljanje i prekidanje veze sa smtp
servisom na portu 25:


------- snip -------

/*
Demonstracija uspostavjlanja i prekida TCP veze

Kompajlira se pod Linux-om sa:
gcc -O3 -o tcp tcp.c
*/

#include
#include
#include
#include
#include
#include

int main (int argc, char **argv)
{
struct sockaddr_in s_addr;
struct hostent *h_ent;
char buffer[1024];
int s_fd, port;

if(argc != 2){
printf("Usage: %s n", argv[0]);
exit(1);
}
if((h_ent = gethostbyname(argv[1])) == NULL){
printf("Bogus IP address.n");
exit(1);
}
if((s_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) == -1){
perror("socket");
exit(1);
}
s_addr.sin_family = h_ent->h_addrtype;
s_addr.sin_port = htons(25);
s_addr.sin_addr.s_addr = *((u_long *)h_ent->h_addr);

if(connect(s_fd, (struct sockaddr *)&s_addr, sizeof(struct sockaddr_in)) == -1){
perror("connect");
exit(1);
}
bzero(buffer, 1024);

read(s_fd, buffer, sizeof(buffer));
printf("%s", buffer);

write(s_fd, "quitn", 5);
bzero(buffer, 1024);
read(s_fd, buffer, sizeof(buffer));
printf("%s", buffer);

exit(0);
}

------- snip -------


Ovaj program kreira socket preko koga se povezuje na port 25 servera koji je naznacen u komandnoj liniji. Na portu 25 se standardno nalazi smtp servis (Simple Mail Transver Protokol), koji inace sluzi za slanje elektronske poste. Funkcija socket() vraca integer poznat kao "socket file descriptor". Funkcija connect() povezuje socket-e i razmena podataka moze da pocne, s tim sto se ovde odmah i zavrsava slanjem komande "quit" koja prekida vezu sa smtp-om. Za to sluzi funkcija write() koja upisuje podatke
u socket, a iz njega ih cita read().Ako se program pokrene komandom ./tcp wintermute
na ekranu se vidi samo sledece:

220 wintermute.eme ESMTP Sendmail 8.8.7/8.8.7; Sun, 23 May 1999 16:34:39 +0200
221 wintermute.eme closing connection


Da bi videli kako se zapravo odvija veza postoje programi koji se nazivaju sniffer-i (eng. sniff == njuskati). Preko njih se moze nadgledati ceo TCP saobracaj na lokalnoj mrezi. Ovako izgleda veza koju je ostvario nas program zabelezena programom tcpdump [tcpdump -i lo]:


17:59:27.862994 wintermute.eme.22566 > wintermute.eme.smtp: S 1051950228:1051950228(0) win 512
17:59:27.862994 wintermute.eme.smtp > wintermute.eme.22566: S 2302390707:2302390707(0) ack 1051950229 win 32736
17:59:27.862994 wintermute.eme.22566 > wintermute.eme.smtp: . ack 1 win 31896 (DF)
17:59:28.412994 wintermute.eme.22568 > wintermute.eme.auth: S 4203958318:4203958318(0) win 512
17:59:28.412994 wintermute.eme.auth > wintermute.eme.22568: S 3391564642:3391564642(0) ack 4203958319 win 32736
17:59:28.412994 wintermute.eme.22568 > wintermute.eme.auth: . ack 1 win 31896 (DF)
17:59:28.422994 wintermute.eme.22568 > wintermute.eme.auth: P 1:11(10) ack 1 win 31896 (DF)
17:59:28.442994 wintermute.eme.auth > wintermute.eme.22568: . ack 11 win 32726 (DF)
17:59:28.702994 wintermute.eme.auth > wintermute.eme.22568: P 1:42(41) ack 11 win 32736 (DF)
17:59:28.702994 wintermute.eme.22568 > wintermute.eme.auth: F 11:11(0) ack 42 win 31896
17:59:28.702994 wintermute.eme.auth > wintermute.eme.22568: . ack 12 win 32735 (DF)
17:59:28.762994 wintermute.eme.auth > wintermute.eme.22568: F 42:42(0) ack 12 win 32736
17:59:28.762994 wintermute.eme.22568 > wintermute.eme.auth: . ack 43 win 31896 (DF)
17:59:29.072994 wintermute.eme.smtp > wintermute.eme.22566: P 1:81(80) ack 1 win 32736 (DF)
17:59:29.072994 wintermute.eme.22566 > wintermute.eme.smtp: P 1:6(5) ack 81 win 31896 (DF)
17:59:29.082994 wintermute.eme.smtp > wintermute.eme.22566: P 81:120(39) ack 6 win 32736 (DF)
17:59:29.082994 wintermute.eme.smtp > wintermute.eme.22566: F 120:120(0) ack 6 win 32736
17:59:29.082994 wintermute.eme.22566 > wintermute.eme.smtp: . ack 121 win 31856 (DF)
17:59:29.092994 wintermute.eme.22566 > wintermute.eme.smtp: F 6:6(0) ack 121 win 31896
17:59:29.092994 wintermute.eme.smtp > wintermute.eme.22566: . ack 7 win 32735 (DF)


Ovde se vide svi paketi koji su prosli kroz mrezu. Zapis se sastoji iz
sledeceg:
- Tacno vreme kada je paket bio na mrezi
- Adresa i port sa kog je paket krenuo
- Adresa i port odredista paketa
- Flagovi (ako postoje)
- Sequence i acknowledge number posaljioca i sadrzaj window polja


Dobar programer moze da napise program koji ce da prati sve pakete izmedju servera i klijenta u lokalnoj mrezi. Tako i kada se klijent loguje, moze da zapleni paket u kome je serveru poslata korisnikova sifra

Dodaj komentar

Dodaj komentar





Komentar će biti proveren pre nego što se objavi.

Zapamti me