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