You are on page 1of 21

UVOD - PROGRAMIRANJE ZA INTERNET

Internet je sveukupna svjetska računalna mrežna infrastruktura (i hardver i softver) koja se koristi za
prijenos različitih podataka i pružanje različitih servisa korištenjem različitih protokola. Neovisan je o
samoj fizičkoj tehnologiji (optički kabel ili telefonska parica, laptop ili PDA kabel ili telefonska parica,
laptop ili PDA jedinica, …) i baziran na tehnologiji komutacije paketa i grupi TCP/IP protokola.
760,000,000 host Internet domena, 28% cjelokupnog stanovništva svijeta.

End-to-end informacijski sustav je sustav za dvosmjerni prijenos informacija iz bilo koje točke
sustava do bilo koje druge točke sustava.

Komutacija paketa je dijeljenje podataka u pojedinačne pakete jednake veličine koji se pojedinačno
šalju kroz mrežu do odredišta. Paketi ne trebaju prolaziti istim putovima kroz mrežu. Paketi se
ponovno skupljaju na odredištu. Internet je u biti skupina desetina tisuća međusobno povezanih
pojedinačnih mreža. Definiraju ju Paul Baran početkom 60-ih i nekoliko godina kasnije Donald
Davies. Prije komutacije kanala koristila se komutacija krugova ili linija (circuit switching)
(analogna telefonija).

Preduvjeti internet – transistor (1947.), “Matematička teorija komunikacija” – Claude Shannon –


matematičke osnove komunikacije, kako najbolje kodirati informaciju sa bitovima.

Arhitektura Interneta sadržana je u samom TCP/IP standardu koji je dizajniran za povezivanje bilo
koje dvije mreže koje se mogu u potpunosti razlikovati (u hardveru, u softveru, …). TCP/IP
omogućava svakom čvoru koji je spojen na Internet end-to-end komunikaciju s bilo kojim drugim
čvorom na Internetu.

Temeljna mreža - Osnova Interneta su temeljne mreže velikog kapaciteta. Na te temeljne mreže se
onda spajaju druge manje mreže. Temeljne mreže se povezuju na mjestima koje se nazivaju
Network Access Point – NAP (stariji naziv) tj. preko Internet Exchange Point –IXP

IXP (Internet Exchange Point) - je infrastruktura koja omogućava direktnu razmjenu internet
prometa između različitih ISP pružatelja usluga. IXP se obično koristi bez plaćanja (peering) jer
direktno povezivanje ubrzava promet i povećava efikasnost, naime promjet između dvije direktno
povezane mreže ne treba ići preko mreža “viših” u hijerarhiji.

ISP (Internet service provider) pružatelji usluga su kompanije i organizacije koja omogućavaju
korisnicima spajanje na Internet (T-com, VIP, Iskon, Carnet, GlobalNet, Vodatel….).

Peering je pojam koji označava spajanje zasebnih temeljnih mreža na Internetu u svrhu razmjene
prometa korisnika tih spojenih mreža. Peering obično označava praksu u kojoj ni jedna od strana
koje se spajaju ne plaća za promet koji se razmjenjuje između mreža (Settlement-Free
Interconnection). Peering ukljucuje: fizičko spajanje mreža, razmjenu podataka potrebnih za
usmejranja prometa prema BGP (Border Gateway Protocol) – protokolu usmjeravanja, određene
peering ugovore i sporazume.

Usmjeravanje prometa (routing) – komutacija paketa i IP protocol pružaju tehničku infrastrukturu


na koju se različiti protokoli za usmjeravanje (routing) paketa oslanjaju prilikom slanja paketa preko
Interneta. - (Definicija routera poznata) – Protokoli za usmjeravanje promota se dijele na: IGP
(Interior Gateway Protocols) protokole koji se koriste za usmjeravanje unutar lokalne mreže (Routine
Information Protocol je standardni IGP protocol), EGP (Exterior Gateway Protocols) protokoli koji se
koriste za usmjeravanje prometa između mreža obično između Backbone mreža (Border Gateway
Protocol). Tracert (win) ili traceroute (unix) – naredbe za pregled usmjeravanja prometa.

Cix – Croatian Internet Exchange – usluga Sveučilišnog računskog centra (Srce) hrvatskim ISP-
ovima (komercijalni, nekomercijalni, privatne mreže) u svrhu razmjene prometa na nacionalnoj razini.
Sveučilišni računski centar osnovan je 1971. Godine, i danas djeluje kao jedan od najznačajnihij
subjekata u planiranju, izgradnji i održavaju najnovije računalne, komunikacijske i informacijske
infrastrukture. CIX članica može biti bilokoji ISP, nekomercijalna mreža ili privatna mreža koja svoje
usluge pruža pravnim i fizičkim osobama na području Republike Hrvatske.

CARNet – Croatian Academic and Research Network – osnovana od strane Ministarstva znanosti
i tehnolovije 1991. u svrhu razvoja, izgradnje i održavanja privatne mreže hrvatske akademske i
znanstveno-istraživačke zajednice. Mrežnu infrastrukturu posjeduje CARNet ustanova, a bakrene i
oštičke veze zakupljene su od nekoliko komercijalnih davatelja telekomunikacijskih kapaciteta.
CARNet je privatna WAN (Wide Area Network) mreža na nacionalnoj razini spojena kroz evropsku
istraživačku mrežu na Internet brzinom od 10 Gbit/s, a prema drugim davateljima Internet usluga u
Hrvatskoj preko CIX-a.

Pula – Rijeka – Zagreb – Osijek, Split – Zagreb - Varaždin: 1Gbps;


Zagreb – Slovenija, Zagreb – Mađarska: GEANT 10Gbps. Zagreb – BiH: BIHarnet 155Mbps

WWW (World Wide Web) jednostavnije Web je mreža informacijskih resursa. WWW je samo dio
Interneta, ni slučajno ista stvar kao Internet. Ideja i postavljanje temelja www-a djelo su (korisnog
fizičara) Tim Berners-Leea 1989. koji predlaže sustav za zazmjenu informacija među korisnicima bez
obzira na kojoj se mreži i u kojoj državi nalaze, otvorenog dizajna (za bilo koje računalo i bilo koji OS)
te mrežne distribucije.

Hipertekst je način organiziranja velikih količina informacija odnosno način rješavanja problema
informacijskog preopterećenja (information overload) povezivanjem dijelova informacija linkovima. U
početku se radilo o načinu organiziranja referenci (cross-reference).

Prvi pretraživač – Mozilla 1.0, prosinac 1994. (tvrtka Netscape). 2002. prelazi u open-source, 2004.
se preimenuje u Firefox.

Ljudi koji su stvarali Internet:


- Claude Shannon – „Matematička teorija komunikacija“
- Vannevar Bush – uspostavlja suradnju sa sveučilištima – postavlja ideju Interneta i pristupa
različitim sadržajima
- J.C.R.Licklider – razvija ideju univerzalne mreže i učestvuje u njenom stvaranju
- Paul Baran – definirao mrežu s komutacijom paketa
- Leonard Kleinrock – surađiva na razvoju ARPANET-a; Lawrence Roberts – voditelj projekta
- Vinton Cerf / Robert Khan – definiraju TCP/IP protokol
- Tim Berners-Lee – izumio www

ICANN (Internet Corporation for Assigned Names and Numbers) je međunarodna, neprofitna
organizacija odgovorna za alokaciju IP adresnog prostora, dodjeljivanje jedinstvenih identifikatora
protokola, upravljanje generičkim Top-Level domenama (gTLD) i oznakama državnih Top-Level
domena (ccTLD), stvorena 1998. ICANN organizacija je odgovorna za globalnu koordinaciju svih
jedinstvenih identifikatora na koje se Internet oslanja. To su:
- Internet imena domena
- IP adrese
- Parametri protokola i broj portova
Ove usluge je prije pružala Internet Assigned Numbers Authority) prema ugovoru sa vladom SAD-a
(spominje se kroz sadržaj kolokvija).

ISOC (Internet Society) je neprofitna organizacija osnovana 1992. u svrhu razvoja standarda vezanih
uz Internet, u svrhu edukacije i usmjeravanja Interneta. Umjerena je na osiguravanje otvorenog
razvoja, evolucije i korištenja Interneta za dobrovit cjelokupnog svjetskog pučanstva.
PROTOKOLI - PROGRAMIRANJE ZA INTERNET

Protokol je uobičajeni postupak, pravila ponašanja, način ophođenja.

Komunikacijski protokol sadrži precizno definirana pravila komunikacije te omogućava prenošenje


informacija. To je dogovoreni format prijenosa podataka između dva uređaja. Da bi dva računala
mogla komunicirati moraju koristiti iste komunikacijske protokole.

ISO-OSI model je opće prihvaćen mrežni model (ne standard) koji predstavlja mrežni sustav razbijen
na razine. Predložak se sastoji od dva dijela: apstraktnog modela umrežavanja poznatijek kao
osnovni referentni mrežni model, i skupa konkretnih protokola (X.25). Svaka razina implementira
određenu funkcionalnost u radu mreže. Svaka razina djeluje direktnao samo na razinu koja je odmah
ispod, a pruža određene usluge razini koja je iznad. Protokoli omogućavaju da se komunikacija
između računala odvija na odgovarajućim

razinama.

Uloge razina ISO-OSI modela


Zadatak fizičkog sloja je jednostavno odašiljanje
bitova preko komunikacijskog kanala.
Zadatak podatkovne razine je osiguravanje
komunikacijskog kanala bez greške, razbijanje
podataka u blokove (okvire), pa čak i pitanje
adresiranja podataka.
Zadatak mrežne razine je određivanje puta kojim će
se komunikacija odvijati, kontrola toka prometa
podmreže, prevođenje prometa između različitih
tipova mreža.
Uloga transportnog sloja je kontrola toka između
krajnjih točaka komunikacije, te jedinstvena identifikacija procesa.
Zadatak dijaloške razine je uspostavljanje, kontrola i završetak dijaloga ili sesije između dvije
aplikacije.
Zadatak prezentacijskog sloja je enkripcija, kompresija i konverzija podataka.
Uloga aplikacijskog sloja može biti bilo što, što nije uključeno u niže razine.

/* Korisnici Interneta u prvom su redu zainteresirani za usluge i servise koji se nude na Internetu. Njih ne zanima što je sve potrebno na
nižim mrežnim razinama da bi određeni servis funkcionirao. Usluge se definiraju na najvišoj aplikacijskoj razini mreže. */

Mrežne usluge i servisi


telnet (aplikacija, servis, TELNET protokol) koji omogućava rad na udaljenom računalu
ftp (File Transfer Protocol) (aplikacija, servis, FTP protokol) koji omogućava prijenos podataka sa i na
udaljeno računalo
elektronička pošta (aplikacija, servis, SMTP (Simple Mail Transfer Protocol) protokol, POP (Post
Office Protocol))
WWW (World Wide Web) (aplikacija, servis, HTTP (Hyper Text Transfer Protocol) protokol)
Chat room (aplikacija, servis)
elektroničke novine (news) (aplikacija, servis, NNTP (Network News Transfer Protocol) protokol)

Port je cjelobrojni identifikator procesa među kojima se uspostavlja mrežna komunikacija. Broj porta
se prenosi u TCP zaglavlju (destination port). Polje destination port je ograničeno na 16 bita
(maksimalni broj portova 2^(16)=65536). Za dodjeljivanje servisu broj porta zadužena je ICANN
organizacija. Bitno je voditi računa da ne koristimo već zauzeti port. Nmap – koristimo za skeniranje
otvorenih portova (radi hackera obično onemogućena naredba).

Telnet je klijent-server aplikacijski protokol baziran na TCP protokolu. Obično je telnet server
podignut na portu 23. To je općenita dvosmjerna komunikacija pri kojoj klijent i server razmjenjuju niz
bajtova. Glavni cilj protokola je omogućavanje komunikacije između terminala i procesa orijentiranih
prema terminalu. Telnet klijentski program može se koristiti i za spajanje na neki drugi servis (npr.
HTTP servis, DNS servis, …). TELNET dijelimo na osnovni dio i skup ekstenzija.

TCP (Transmission Control Protocol)


Svojstva TCP protokola:
- uspostavlja vezu (connection-oriented),
- pouzdan (kontrola i ispravljanje grešaka),
- obosmjeran (full-duplex),
- protokol za prijenos niza bajtova (byte-stream).

- Uspostavljanje veze (connection oriented) znači da se prije nego se započnu prenositi podaci
uspostavlja virtualna konekcija između servera i klijenta. Nakon što je završen prijenos podataka
virtualna konekcija se prekida.
- Ukoliko se konekcija ne može uspostaviti proces koji je pokušava uspostaviti je obaviješten o
nemogućnosti uspostave konekcije. Ukoliko se konekcija u bilo kojem trenutku prekine procesi u
komunikaciji su obaviješteni o prekidu konekcije. U TCP protokolu su definirani mehanizmi kontrole
isporuke podataka preko paketa potvrde isporuke podataka (ACK). TCP ima mehanizme ponovnog
slanja paketa ukoliko paketi nisu stigli do odredišta.
- Protokol je obosmjeran. To znači da se u komunikaciji podaci mogu slati u oba smjera. (full-duplex)
- TCP je protokol za prijenos niza bajtova (byte-stream) tj. podaci koji se prenose za TCP su
jednostavno samo niz bajtova. Obično je TCP dio operacijskog sustava. Aplikacija zatraži od TCP
sloja slanje ili primanje podataka preko mreže. Aplikacija podatke prosljeđuje u spremnik (buffer) iz
kojeg ih TCP sloj dohvaća i sam odlučuje na koji će način podatke raspodijeliti u pakete. Na strani
aplikacije koja prima podatke TCP sloj primljene podatke sprema također u spremnik i isporučuje ih
aplikaciji kada ih ona zatraži.

UDP (User Datagram


Protocol) je protokol bez uspostavljanja veze. Nema ni kontrolu prenesenih podataka ni ispravljanje
greške ni garancije isporuke podataka. To znači da protokol više razine treba voditi računa o tome.
Prednost UDP u odnosu na TCP je brzina i manje podataka u zaglavlju pa se obično koristi u
kontrolne svrhe i u nekim aplikacijama u realnom vremenu (real-time applications) (IP telefonija,
audio, video streaming). Protokoli više razine koji koriste UDP su npr. FTP, RTP
(Real-Time Transport Protocol)

UDP zaglavlje

IP (Internet Protocol) je protokol mrežne razine. To je protokol bez uspostavljanja veze i


bez garancije isporuke podataka. Glavni
zadatak IP protokola je omogućavanje veze
između hostova koji mogu biti na različitim
mrežama. Usmjeravanje paketa (routing)
kroz mrežu se oslanja na podatke u IP
zaglavlju paketa.
IPv4 format zaglavlja (32 bita)

/* TTL polje IP paketa određuje


koliko dugo taj paket može “živjeti” na mreži. Svaki put
kada paket prođe preko rutera, ruter umanjuje vrijednost
TTL polja. Kada vrijednost dođe na 0 taj se paket
odbacuje, više se ne prosljeđuje kroz mrežu, a ruter šalje ICMP paket pošiljatelju da ga obavijesti o tome. */

Usmjernik (Router) je uređaj kojim se spajaju dvije mreže i koji usmjerava pakete na osnovu njihove
IP adrese prema ispravnom odredištu mreže. Svaki usmjernik komunicira sa susjednim usmjernicima
na mreži različitim protokolima usmjeravanja (routing protocols) u svrhu održavanja tablice
usmjeravanja (routing table). Ta tablica sadrži moguće rute kojima usmjernik može usmjeriti pakete
ovisno o opterećenosti nekog smjera, propusnosti itd.

Ping je mrežni alat koji se koristi na TCP/IP mrežama. Omogućava osnovni test da li je određeno
računalo aktivno i može li mu se pristupiti s računala na kojem se pokrene ping. Ping daje informaciju
o vremenu odziva (round-trip time) i gubitku paketa između dva promatrana računala. Radi
korištenjem ICMP (Internet Control Message Protocol) poruka. Dio ISPova 2003. zbog sigurnosnih
razloga odlučuje ne propuštati ping zahtjeve (neograničena količina pingova opetećuje routere na
putu).

ICMP (Internet Control Message Protocol) uglavnom ne koriste aplikacije (osim ping) već
ga koriste operacijski sustavi računala da bi poslali poruke koje su obično generirane kada se na IP
paketu desila neka greška. ICMP poruka se smješta u IP paket.

End-to-End u odnosu na Hop-to-Hop


End-to-end veza je veza između dvije krajnje točke na mreži. Hop-to-hop veza je veza između dva
susjedna čvora na mreži. Kontrola greške u komunikaciji ili kontrola toka može se provoditi ili između
dvije krajnje točke komunikacije ili između svaka dva čvora preko kojih ide komunikacija.

Mrežni uređaji
Ponavljač vrši restauraciju digitalnog signala (pojačava i obnavlja fizički signal). Hub (zvjezdište)
omogućava zvjezdasto spajanje računala. Ova dva uređaja ne ulaze u podatke koji se prenose nego
to rade isključivo na fizičkoj razini mrežnog modela. Pakete koji dođu s jednog uređaja hub proslijedi
svim spojenim uređajima.
Premosnik (bridge) pamti MAC (media access control) adrese spojenih uređaja i na osnovu njih
prosljeđuje pakete. Prospojnik (switch) je složeniji premosnik. Može se također proširiti da obrađuje
na samo MAC adresu nego i IP adresu. (rade na podatkovnoj razini)
Usmjernik (Router) je definiran prije.
Poveznik (gateway) radi na višim razinama mrežnog modela. Osim što ima ulogu usmjernika
poveznik se često koristi povezivanje mreža koje koriste različite protokole na transportnoj razini (npr.
mreže koja koristi AppleTalk i mreže koja koristi TCP/IP.). U tom slučaju poveznik treba prepakirati
sve pakete koji prolaze preko njega iz jednog u drugi protokol.

Ethernet (novija verzija Fast Ethernet) je najčešći protokol podatkovne razine na LAN mrežama. To
je standard (IEEE Standard 802.3), tehnologija, protokol za prenošenje podataka između računala
brzinama 10 Mbps, 100 Mbps i 1 Gbps. Prednosti Etherneta su povoljna cijena, različiti načini
ožičavanja (koaksijalnim kabelima, twisted-pair (UTP) kabelima, optičkim kabelima) i tržišna
prihvaćenost.

802.3 okvir

Osnovni element koji se prenosi Ethernet mrežom se naziva okvir (frame). Sadrži Ethernet broj (MAC
adresa), LLC (Logic Link (Line) Control) zaglavlje, podatke i 4 bajta za CRC.

MAC adresa
Ethernet broj se sastoji od 48-bitne (6 bajtova) MAC (media access control) adrese odredišne i
izvorišne Ethernet kartice. Svaka Ethernet kartica ima jedinstvenu MAC adresu koju joj dodijeli
proizvođač. Prva 24 bita MAC adrese su jedinstvena za svakog proizvođača Ethernet kartica i
nazivaju se Organizationally Unique Identifier(OUI) ili kod proizvođača. Vrijednost ta 24 bita
proizvođaču dodjeljuje IEEE. Proizvođač kombinira vlastiti 24-bitni OUI sa nekom 24-bitnom
vrijednošću da dobije jedinstvenu 48-bitnu adresu za svako Ethernet sučelje koje proizvede.
MAC zaglavlje ili Ethernet broj osim izvorišne i odredišne MAC adrese sadrži i 16-bitnu vrijednost
koja se koristi u polju (Type field) Ethernet okvira. Taj se broj koristi za identifikaciju tipa višeg
mrežnog protokola paketa koji se prenosi kao podatkovni dio Ethernet okvira. (0800 za IP)

LLC (Logic Link Control) protokol definiran je IEEE 802.2 standardom. Zajedno s MAC protokolom
čini 802.3 standard. Protokol se koristi za višestruko prenošenje (multipleksiranje) i
demultiplekisiranje protokola (IP, IPX). Koristi se također za kontrolu toka, detekciju i retransmisiju
odbačenih paketa ukoliko je to potrebno.

CRC (cyclic redundancy check) je hash funkcija kojom se dobiva kontrolni zbroj (checksum)
određenog niz bitova (obično podataka). Taj broj je obično mali, može se zapisati sa malim brojem
bitova. Koristi se na način da predajnik generira taj broj i ubaci ga u paket tako da prijemnik može
provjeriti je li došlo do pogreške na prenesenim bitovima (tj. da li je bit koji je na strani predajnika
imao vrijednost 1 poprimio vrijednost 0 i obrnuto.). CRC se može koristiti i za korekciju grešaka
ukoliko je količina izgubljene informacije manja od količine informacije prenesene u samom CRC-u.
CRC je proširen iz razloga što ga je jednostavno implementirati hardverski (I, ILI i sl. sklopovi), ima
točno definiranu matematičku podlogu, i pokazao se dosta dobar za detekciju uobičajenih pogrešaka
koji nastaju na komunikacijskom kanalu zbog šuma. CRC kontrolni broj je ostatak binarnog dijeljena
bez preteka (XOR) predefiniranim nizom bitova koji predstavljaju koeficijente polinoma.

PPP (Point-to-Point) protokol koristi se za direktno povezivanje dva računala serijskim kabelom,
telefonskom linijom, radio vezom, optičkim kabelom, …. PPP protokol je najčešći protokol za dial-up
Internet. PPP protokol ima više slojeva. LCP(Link Control Protocol) se koristi prilikom uspostavljanja,
konfiguriranja i testiranja veze. Nakon uspostavljanja veze koristi se jedan ili više NCP protokola
(Network Control Protocols) za prijenos podatka preko PPP veze. PPP se također koristi i preko
ADSL, ISDN i sl.
PPPoE (PPP over Ethernet) protokol je kombinacija PPP i Etherneta. Na
nižoj razini je Ethernet, a iznad njega PPP.

MTU (Maximum Transmission Unit) - Svaki komunikacijski medij (mrežna


kartica, serijski port,…) ima
definiran MTU. To je maksimalni broj bajtova koji se može prenijeti u jednoj transmisijskoj jedinici
(paketu, okviru,…). Za Ethernet MTU je definiran u samom standardu i iznosi 1518 bajtova (cijeli
okvir). Minimalna veličina okvira je 64 bajta pa ako nema podataka okvir se treba dopuniti (padding)
do veličine od 64 bajta. I za PPP se za MTU obično koristi 1500 bajtova. Većina paketa na mreži je
ovih dimenzija premda IP protokol podržava pakete do 65536 (polje Total Length). Kada je paket veći
od MTU-a mora se razbijati na manje dijelove (segmentiranje – krivo je ona rekla ako san dobro
Računarne mreže shvatija, postupak se zove FRAGMENTIRANJE).

IP adresa računala je jedinstvena identifikacija koju mora imati svako računalo (ili uređaj) spojeno
na Internet. IP adresa ima format: 161.53.166.237. To je 32-bitni binarni broj koji se predstavlja u
formatu četiri broja od 0 do 255 međusobno odvojena točkom. Dio IP adrese se koristi za
označavanje mreže, a dio se koristi za označavanje računala na toj mreži.

Ukoliko se za označavanje mreže koristi samo prvi od 4 broja takve mreže nazivamo mrežama
klase A. Takva mreža može imati 256^(3)-2 računala. Ukoliko se
za označavanje mreže koriste prva dva broja takve mreže
nazivamo mrežama klase B. Takva mreža može imati 256^(2) -2
računala. Adrese klase B počinju sa brojem većim od 128 (brojevi
do 126 su rezervirani za adrese klase A). Kod adresa klase C prva
tri broja koriste se za označavanje mreže. Adrese klase C počinju
brojem većim od 192. Takva mreža može imati 256^(1)-2 = 254
računala.

Adresa računala ne smije biti takva da je broj računala 0. Npr: 161.53.0.0


Adresa računala ne smije biti ni 161.53.255.255. Ova se adresa odnosi na sva računala na mreži
161.53. i ukoliko neki paket sadrži ovu adresu kao odredišnu adresu paket će biti isporučen svim
računalima na mreži 161.53. (broadcast).
IP adresa 127.0.0.1 je specijalna tzv. povratna adresa (loopback address) (localhost) (često i cijeli
range 127.0.0.0-127.255.255.255). Ukoliko paket kao odredišnu adresu ima adresu 127.0.0.1 taj se
paket neće ni isporučiti u mrežu. Ova adresa služi da bi aplikacije na računalu mogle raditi sa TCP/IP
dijelom operacijskog sustava bez da se paketi šalju na mrežu.

RIR – Regional Internet Registries: upravljaju jedinstvenim Inernet identifikatorima za određeno


zemljopisno područje.

Privatne IP adrese - Privatne IP adrese koriste se unutar intraneta. Promet sa privatnih IP adresa ne
može se usmjeravati direktno na Internet. Privatne IP adrese dodjeljuju se isključivo računalima na
mreži iza rutera ili nekog drugog uređaja za NAT (Network Address Translation). NAT je standard koji
omogućava da LAN koristi jedan skup IP adresa za promet po lokalnoj mreži, a drugi skup adresa za
promet prema Internetu. NAT definira konverziju zaglavlja paketa za cijeli dolazni i odlazni promet za
promatrani LAN.

Ukoliko bili koji Internet usmjerivač dobije paketa u kojem su IP adresa izvorišta ili odredišta neka od lijevo navedenih
adresa usmjerivač će taj paket odbaciti.

Ruter treba imati dodijeljenu i javnu IP adresu. Svi paketi koji ruteru stignu sa privatnih IP adresa
lokalne mreže na Internet odlaze sa javnom IP adresom s kojom je ruter spojen na Internet. Osim IP
adrese izvorišta paketa (koja se mijenja iz privatne u javnu IP adresu) ruter također mijenja i port
izvorišta paketa u vrijednost koja se čuva u tablici rutera.
DNS - PROGRAMIRANJE ZA INTERNET

DNS je klijent-server protokol i servis aplikacijske razine koji omogućava konverziju imena računala
u IP adresu računala i obrnuto. Internet protokoli rade isključivo sa IP adresom, a jednoznačno
povezivanje IP adrese i imena računala rješava se sustavom DNS poslužitelja. DNS klijent (DNS
rješavač) je računalo koje od DNS servera traži uslugu. DNS protokol je definiran kako bi se
korisnicima olakšao rad s Internetom.
Moguće je koristiti ime računala umjesto IP adrese računala. (npr. www.fesb.hr ↔ 161.53.166.3)

DNS hijerarhijska organizacija


DNS je distribuirani hijerarhijski podatkovni sustav. Ne postoji jedna baza podataka koja bi
sadržavala podatke o svim IP adresama i imenima računala. Podaci su distribuirani na tisuće DNS
servera koji su organizirani hijerarhijski.

Root domena je temeljna domena sa DNS serverom na najvišoj hijerahiskoj razini pod kojom se
nalaze DNS serveri domena na idućoj top-level razini. Root domena nema ime, a trenutno je aktivnih
13 root DNS servera.

To ne znači da ima fizički 13 dns servera. Naime svaki operator koji je odgovoran za jedan dns server obično ima nekoliko fizičkih
servera koji mogu biti redundantni ili funkcionirati istovremeno preko anycast metode koja usmjerava pakete “najbližem” serveru.

Dva su osnovna načina organizacije top-level domena: zemljopisna i organizacijska.


Za održavanje top-level domene su zaduženi vlasnici domena, tako je npr. vlasnik domene .hr Carnet i DNS server .hr domene
održava Carnet. Također i za svaku domene ispod top-level domene postoji vlasnik koji je zadužen za održavanje te domene. Tako je
vlasnik domene .fesb (poddomene domene .hr) FESB.

Organizacija koja “posjeduje”


određenu domenu je zadužena za održavanje DNS poslužitelja za tu domenu. DNS poslužitelj zna
pretvoriti ime računala u IP adresu računala (i obrnuto) za računala iz svoje domene. DNS poslužitelj
ima uvijek aktualnu tablicu u kojoj su zapisane IP adrese i njihova FQDN imena. DNS zahtjev za IP
adresom računala iz vlastite domene, DNS poslužitelj će obraditi sam i vratiti rezultat.
Primarni i sekundarni DNS poslužitelji - Da bi se rasteretili DNS poslužitelji osim primarnog obično
postoji i (jedan ili više) sekundarni DNS poslužitelj koji može preuzeti dio posla primarnog DNS
poslužitelja. Najveća razlika između primarnog i sekundarnog DNS poslužitelja je u tome da je
primarni DNS server “glavni”. Njegovi podaci su glavni, a sekundarni serveri obično imaju samo
preslik podataka sa primarnog servera koji se obnavlja u određenim vremenskim intervalima.

Fully Qualified Domain Name (FQDN) - Prema DNS protokolu format imena računala čine oznake
ili labele (labels) međusobno odvojene točkom: marjan.fesb.hr
Prva labela je ime računala, a ostatak je oznaka domene kojoj računalo pripada. Adresa računala
napisana u ovom formatu se naziva FQDN. Broj oznaka u ovakvoj adresi nije ograničen. Hijerarhijska
organizacija domena može ići proizvoljno duboko (obično 3 do 5). Ograničenje je da labela može
imati do 63 karaktera, a da čitavo ime računala može imati do 255 karaktera.
(racunalo1.soba416.cetvrtikat.elektronika.fesb.hr). Ovakav način imenovanja računala omogućava
dodavanje aliasa. To su alternativna imena koja se odnose na isto računalo tj. na istu IP adresu.

3. osnovna dijela DNS-a


1. Područje imena domene ili imenovano područje (DOMAIN NAME SPACE) i zapisi resursa
(RESOURCE RECORDS) su ustvari podaci iz određene domene. Format podataka je stablo. Svaki
čvor ili list stabla sadrži zapis resursa. Najviše se koristi podatak o IP adresi, ali DNS baza sadrži i
druge podatke osim parova ime računala↔IP adresa računala.
2. Imenički server (NAME SERVER) je program koji sadržava podatke strukture stabla domene. DNS
server sluša na portu 53. Ukoliko postoje poddomene podaci koje posjeduje imenički server su
obično podaci o imeničkim serverima poddomena, mada se svi podaci mogu čuvati i na tom
imeničkom serveru. Imenički server zna o kojim dijelovima stabla domene ima potpuno podatke (a ne
samo pokazivač na drugi imenički server). Za dio imenovanog područja o kojem imenički server ima
potpune podatke kaže se da je server za njih mjerodavan (AUTHORITY).
3. Rješavač (RESOLVER) je program koji dohvaća podatke od DNS servera. Nalazi se na strani
klijenta (DNS je klijent/server arhitektura). Rješavač treba biti u stanju pristupiti barem jednom DNS
serveru kojem direktno šalje upite, stoga se na strani klijenta treba definirati i IP adresa DNS servera.
Rješavač je obično dio operacijskog sustava kao neka sistemska procedura direktno dostupna
korisničkom programu.

Format DNS zapisa resursa


Ime (NAME) je ime čvora čiji je to zapis.
Tip (type) RR zapisa je 16 bitna vrijednost koja specificira tip zapisa. Neki tipovi zapisa su:
A - adresa hosta
CNAME – alias ime računala
MX - mail exchange server za domenu
NS – autoritativni imenski server za domenu
SOA – početak zone autoriteta
Klasa (class) RR zapisa je 16 bitna vrijednost koja
identificira protokole na koje se odnosi zapis.
Najčešće se koristi klasa IN (Internet system) koja
se odnosi na Internet protokole.
TTL podatak je 32 bitna vrijednost koja definira
koliko dugo RR zapis može biti keširan prije no što
se treba postaviti novi upit serveru.
RDLENGTH –16 bitna vrijednost koja definira
veličinu RDATA polja u oktetima
RDATA podatak ovisi o tipu i klasi. Neki tipovi
RDATA su:
A –za IN klasu je to 32 bitna IP adresa
CNAME –alias ime računala
MX –to je ime hosta koji je mail exchange server za domenu
NS–ime hosta
SOA –više različitih vrijednosti
DNS poruke
DNS upiti (queries) i odgovori imaju definirani standardni format. Poruka ima zaglavlje(header) i četiri
dijela koji sadrže parametre upita ili RR u odgovoru. U zaglavlju je najvažnije polje opcode veličine 4
bita koje definira različite upite. Ukoliko je vrijednost tog polja 1 to je standardni upit.
Četiri dijela su:
Pitanje (Question) –sadrži ime upita i druge parametre
Odgovor (Answer) –sadrži RR u odgovoru na postavljeni upit
Autoritet (Authority) – sadrži RR koji opisuje druge autoritativne server
Dodatni (Additional) –sadrži još neke RR podatke

Primjeri DNS rješavača


nslookup – je DNS rješavač preko kojeg korisnik može direktno postaviti upit DNS serveru.
Primjer: nslookup www.google.hr
dig – je također DNS rješavač (dolazi na Linux operacijskim sustavima) preko kojeg korisnik može operacijskim sustavima) preko
kojeg korisnik može direktno postaviti upit DNS serveru
Primjer: dig www.google.hr
host – je DNS rješavač kojim možete dobiti IP adresu za neko računalo i obrnuto za određenu adresu možete dobiti ime računala.
Primjer: host www.fesb.hr, host 161.53.166.3

DNS mapiranje u programu


Svaki program koji pristupa nekom računalu na Internetu preko imena računala, mora od DNS
servera dohvatiti IP adresu računala. Postoje biblioteke funkcija koje rade kao DNS. Postoje
biblioteke funkcija koje rade kao DNS rješavači i koje se samo pozovu u programu. Glavna funkcija
za dohvaćanje IP adrese računala na osnovu imena računala je:
gethostbyname( ime računala )

#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
main(argc,argv)
int argc;
char **argv;
{
struct hostent *host=NULL;
if(argc<2) { printf("Upisite ime racunala\n"); exit(2); }
host = gethostbyname(argv[1]);
if ( host==NULL) {
23
if ( host==NULL) {
fprintf(stderr,"gethostbyname: ne mogu naci racunalo
%s\n",argv[1]);
exit(2); }
printf("\tIme racunala: %s\n",host->h_name);
printf("\tAdresa racunala: %d.%d.%d.%d\n",
(unsigned char) host->h_addr_list[0][0],
(unsigned char) host->h_addr_list[0][1],
(unsigned char) host->h_addr_list[0][2],
(unsigned char) host->h_addr_list[0][3]);
return(0);
}

reverse lookup
Obrnuto DNS mapiranje je pretvaranje IP u FQDN adresu. Kada DNS poslužitelj dobavlja ime
računala na osnovu njegove IP adrese taj se proces naziva reverse lookup ili obrnuto mapiranje
adresa. Za obrnuto mapiranje na Internetu postoji posebna domena koja se zove in-addr.arpa.
Domena .arpa (Address and Routing Parameter Area) se koristi isključivo u svrhu infrastrukture
Internet. Ona ima 256 poddomena koje odgovaraju prvom broju IP adrese. Te se poddomene dijele
opet na 256 poddomena koje odgovaraju drugom broju IP adrese. Svaka od tih poddomena ima 256
poddomena koje odgovaraju trećem broju IP adrese. Konačno se te poddomene dijele na još 256
poddomena za četvrti broj iz IP adrese. U toj krajnjoj grani se nalaze FQDN imena računala.
Ako želimo dohvatiti ime računala sa IP adresom 161.53.166.3 DNS kreće od vrha stabla in-
addr.arpa i počinje pretraživati stablo od domene 161.in-addr.arpa. Zatim ide dalje u dubinu do
53.161.in-addr.arpa i tako sve dok ne dođe do 3.166.53.161.in-addr.arpa. U toj grani stabla zapisana
je adresa marjan.fesb.hr.
Ovakva stabla se održavaju na DNS poslužiteljima paralelno sa bazama podataka koje pretvaraju
FQDN u IP adresu.

DNS rješavač obrne IP adresu i doda joj domenu .in-addr.arpa (odnosno za IPV6 .ip6.arpa):
161.53.166.3↔3.166.53.161.in-addr.arpa
Rješavač postavlja upit root serveru za zapisom 3.166.53.161.in-
addr.arpa.

Root server usmjerava rješavača na DNS server zadužen za klasu B


adresa 161.in-addr.arpa koji pokriva sve IP adrese koje počinju s 161.
U većini slučajeva root server će usmjeriti rješavača na RIR (Regional
Internet Registry) DNS.

Za IP adrese u sjevernoj Americi RIR je ARIN, za evropske IP adrese RIR je RIPE itd. DNS
rješavač će poslati upit RIPE DNS serveru za 3.166.53.161.in-addr.arpa RIPE DNS će
usmjeriti rješavača na DNS server organizacije kojoj je dodijeljen taj IP.

SOCKET - PROGRAMIRANJE ZA INTERNET

Soket je apstrakcija krajnje komunikacijske točke. Socketi omogućavaju dvosmjernu komunikaciju od


točke do točke (point-to-point) između dva programa. To je metoda komunikacije između programa
klijenta i programa servera na mreži.
Soket je TCP/IP API (application programming interface). Podržan je od većine OS-ova i
programskih jezika. Nedostatci su mu: složenost, podložnost koda greškama i potreba da svaki dio
komunikacije treba biti eksplicitno programiran.

TCP/IP API
TCP/IP protokol softverski je sastavni dio operacijskog sustava. Operacijski sustav programeru pruža
API preko kojeg programer koristit TCP/IP protokol. TCP/IP standard ne specificira kako se
aplikacijski softver povezuje sa softverom TCP/IP protokola već samo predlaže funkcionalnost koju
treba imati sučelje između aplikacije i softvera TCP/IP protokola.

Prednost: fleksibilnost i prilagodljivost različitim OS-ovima


Nedostatak: Detalji sučelja prema TCP/IP softveru razlikuju se od jednog do drugog OS-a.

• Alokacija resursa za komunikaciju.


• Specificiranje lokalne i udaljenje krajnje točke komunikacije.
• Iniciranje konekcije (na strani klijenta).
• Čekanje na dolaznu konekciju(na strani server).
• Slanje i primanje podataka.
• Utvrđivanje dolaska podataka.
• Utvrđivanje dolaska podataka.
• Generiranje hitnih podataka.
• Obrada dolaznih hitnih podataka.
• Skladan raskid konekcije (FIN handshake).
• Obrada raskida konekcije s udaljenog mjesta.
• Prekid komunikacije.
• Obrada grešaka i prekida komunikacije.
4. Oslobađanje lokalnih resursa nakon završetka komunikacije.

Tipovi soketa
- TCP soket - (stream socket)
- UDP soket (datagram socket)
- IP soket (row socket) (ne na Win)
Soket je posebni tip handla koji proces koristi da bi “pisao/čitao” na Internet ili zatražio neku drugu
mrežnu uslugu od operacijskog sustava. Socket sučelje za TCP/IP protokol je razvijen na Berkeley-u
za UNIX.

Funkcije soketa

/*ne trebate učiti napamet imena funkcija, ali na kolokviju može doći komad koda koji trebate znati objasniti, znači trebate znati otprilike
imena funkcija i postupak spajanja preko soketa*/

Da bi aplikacija mogla koristiti soket treba ga najprije kreirati funkcijom za kreiranje soketa.
Sljedeći primjeri su funkcije za kreiranje soketa iz TCP/IP API-ja za C programski jezik za linux i
windowse:

int socket (int family, int type, int proto); //UNIX


SOCKET socket (int af, int type, int protocol); //Windows

Poziv funkcije socket vraća handle na soket.


1. argument funkcije određuje “obitelj” protokola koji će se koristiti (PF_INET (protocol family Internet) ili
AF_INET (adress family Internet) za TCP/IP, INET-Internet) jer se soketi mogu koristiti i sa drugim
protokolima, a ne samo sa TCP, UDP protokolima.
2. argument određuje tip soketa (SOCK_STREAM, SOCK_DGRAM, SOCK_RAW (samo Unix)).
3. argument definira protokol i obično se postavlja u 0 koji znači korištenje defaultnog protokola.

Sljedeći korak na strani


servera je vezivanje
(binding) soketa na
određenu IP adresu i
port na kojem će soket
biti otvoren. Ovaj korak
se može preskočiti (ne
mora) na strani klijenta
jer će se taj
dio napraviti automatski
prilikom spajanja na
server.

int bind( int sockfd, const


struct sockaddr* name,
int localaddrlen);
int bind( SOCKET s,
const struct sockaddr*
name, int namelen);
1. argument funkcije je handle na soket
2. argument je pokazivač na strukturu koja sadrži adresu na koju se soket vezuje
3. argument je veličina adresne strukture (obično se samo stavi sizeof(sockaddr)).
Funkcija vraća 0 u slučaju uspješnog binding, a -1 u slučaju greške.

Struktura sockaddr je generička struktura soket adrese definirana ANSI C standardom. Većina C
kompajlera radi prema tom standardu i većina kôda je temeljena na ANSI C.

/*UNIX*/
struct sockaddr {
uint8_t sa_len; /*veličina strukture*/
sa_family_t sa_family; /*obitelj adresa: AF_xxx*/
char sa_data[14]; /*adresa određena protokolom*/
} /*deklarirana <sys/socket.h> */

/*Windows*/
struct sockaddr {
u_short sa_family; /*obitelj adresa: AF_xxx*/
char sa_data[14]; /*adresa određena protokolom*/
}; /*deklarirana Winsock.h */

Tip sockaddr automatski određuje strukturu adrese ovisno o postavljenoj “obitelji” adresa
(AF_INET).
Detaljnija specifikacija adrese daje se u strukturi sockaddr_in koja će se koristiti i na Windowsima i
na Unixu ukoliko se radi s IPv4, a struktura sockaddr_in6 ukoliko se radi s IPv6.

struct sockaddr_in {
short sin_family;
unsigned short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};

struct sockaddr_in6 {
short sin6_family;
u_short sin6_port;
u_long sin6_flowinfo;
struct in6_addr sin6_addr;
u_long sin6_scope_id;
};

/* Windows */
struct sockaddr_in {
short sin_family; /* Obitelj adresa AF_INET, AF_INET6,..*/
unsigned short sin_port; /* Port */
struct in_addr sin_addr; /* 32-bitna IPv4adresa */
char sin_zero[8]; /* Popuna do veličine sockaddr strukture*/
}; /*deklarirana u Winsock2.h za IPv4; ws2tcpip.h za IPv6. */

/*Unix*/
struct sockaddr_in {
uint8_t sin_len; /*duljina strukture (16) */
sa_family_t sin_family; /* Obitelj adresa AF_INET, AF_INET6,..*/
in_port_t sin_port; /* 16-bitni TCP ili UDP broj porta*/
struct in_addr sin_addr; /* 32-bitna IPv4 adresa*/
char sin_zero[8]; /* Ne koristi se
(padding)*/
}; /* deklarirana in <netinet/in.h> */

Zapis 32-bitne IP adrese također je formatiran strukturom:

struct in_addr {
union {

struct {
unsigned char s_b1, s_b2, s_b3, s_b4;
} S_un_b; /*Adresa formatirana kao 4 u_char-a*/

struct {
unsigned short s_w1, s_w2;
} S_un_w; /*Adresa formatirana kao dva u_short-a*/

unsigned long S_addr; /*Adresa formatirana kao jedan long*/

} S_un;
};

IP adresa i broj porta u adresnim strukturama soketa trebaju biti zapisani u mrežnom redoslijedu
bajtova (network byte order). Npr. IP adresa 161.53.168.65 ima 32 bita odnosno 4 bajta i može se u
memoriji zapisati na dva načina. Prvi način je da se najznačajniji bajt (MS- most significant) spremi
prvi. Taj način se naziva big-endian zapis i koristi se kao NBO. Little-endian zapis sprema najmanje
značajan bajt (LS- least significant) na prvo mjesto.

PC arhitektura s Intelovim procesorom koristi little-endian zapis. RISC arhitekture i mainframe


računala koriste big-endian zapis. Kao standard na mreži je prihvaćen big-endian zapis i svi paketi
koji idu preko mreže trebaju imati zapisanu IP adresu (i port) u ovom obliku.
Programeru su na raspolaganju funkcije koje omogućavaju pretvaranje jednog načina zapisa u drugi.

Imenovanje funkcija je postavljeno na način da funkcije koje pretvaraju iz formata zapisa na hostu u mrežni format zapisa počinju s ‘h’
(host byte order), a funkcije koje pretvaraju iz mrežnog formata u format zapisa na hostu počinju s ‘n’ (network byte order). Funkcije za
pretvaranje 16 bitnih vrijednosti (port) završavaju sa slovom ‘s’ (short), a za pretvaranje 32-bitnih vrijednosti završavaju s ‘l’ (long).

//u_short - na Windows OS-u


uint16_t htons (uint16_t);
uint16_t ntohs (uint_16_t);
uint32_t htonl (uint32_t);
uint32_t ntohl (uint32_t);

Ukoliko niste sigurni koju adresu koristiti (npr. imate više mrežnih sučelja) možete zatražiti od OS da
procesu dodijeli adresu. Također možete zatražiti i da OS procesu dodijeli slobodni port što klijentske
aplikacije u pravilu i rade. Za serverske aplikacije obično je definirano na kojem portu “slušaju” (npr.
HTTP server –80) pa trebaju koristiti upravo taj port jer će klijentske aplikacije pokušati otvarati
konekciju prema serveru na tom portu.

struct sockaddr_in skaddr;


skaddr.sin_family = AF_INET;
skaddr.sin_addr.s_addr = htonl(INADDR_ANY);
skaddr.sin_port = htons(0);

Nakon kreiranja soketa i vezivanja IP adrese i porta uz soket handle ili soket deskriptor, server
za TCP konekciju (SOCK_STREAM tip soketa) “osluškuje” dolazne zahtjeve za konekcijama od
strane klijenata funkcijom:

SOCKET - na Windows OS-u


int listen(int sockfd, int backlog);

1. argument funkcije je soket deskriptor


2. argument je maksimalni broj konekcija koji se može otvoriti na tom soketu.

Nakon kreiranja soketa i vezivanja IP adrese i porta uz soket deskriptor, klijent za TCP
konekciju (SOCK_STREAM tip soketa) pokušava uspostaviti konekciju prema nekom serveru
funkcijom:

SOCKET -na Windows OS-u


int connect(int sockfd, const struct sockaddr* name, int namelen);

1. argument funkcije je soket deskriptor


2. argument je pokazivač na strukturu s podacima o serveru (IP adresa i port) prema kojem se
uspostavlja konekcija,
3. argument je veličina strukture.

Nakon što je server preko listen funkcije dobio zahtjev od klijenta za otvaranje konekcije ukoliko
prihvaća klijentov zahtjev konačno se konekcija uspostavlja funkcijom:

SOCKET - na Windows OS-u


int accept (int sockfd, struct sockaddr* addr, int* addrlen);

1. argument funkcije je soket deskriptor


2. argument je pokazivač na strukturu s podacima o klijentu koji se spojio
3. argument je pokazivač na duljinu strukture koji je opcionalan.
U slučaju uspješnog izvršavanja i ova funkcija vraća 0.

Za prijenos podataka tipom soketa SOCK_STREAM koriste se sljedeće funkcije:


int read (int sockfd, const void *buf, int buflen); /*Unix*/
int write (int sockfd, const void *buf, int buflen); /*Unix*/
int recv (SOCKET s, char* buf, int len, int flags); /*Windows*/
int send (SOCKET s, const char* buf, int len, int flags); /*Windows*/

Ukoliko su se uspješno izvršile, povratne vrijednosti su broj pročitanih ili poslanih bajtova.

Za prijenos podataka tipom soketa SOCK_DGRAM koriste se sljedeće funkcije:


int sendto (SOCKET s, const char* buf, int len, int flags, const struct sockaddr* to, int tolen);
int recvfrom (SOCKET s, const char* buf, int len, int flags, const struct sockaddr* to, int tolen);

Za zatvaranje soketa koristi se funkcija:


int close(int sockfd);

Ukoliko se IP adresa predaje kao argument programu obično je zapisana u string formatu. Funkcije
za konverziju u in_addr strukturu:
int inet_aton (char *, struct in_addr *); /*Unix*/
unsigned long inet_addr (const char* cp); /*Windows*/

Funkcija za konverziju iz in_addr formata u string format:


char *inet_ntoa (struct in_addr);

//SERVERSKI DIO (SA PREDAVANJA):


#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <netdb.h>

#include <stdio.h>

char *message1 = "Dobar dan i tebi!\n";

char *message2 = "Jos je dan!\n";

int main(int argc, char *argv[])

int ld,sd;

struct sockaddr_in skaddr;

struct sockaddr_in from;

int addrlen,length;

char buff[100];
int n;

char *poc = buff;

if ((ld = socket( PF_INET, SOCK_STREAM, 0 )) < 0) {

perror("Problem creating socket\n");

exit(1);

skaddr.sin_family = AF_INET;

skaddr.sin_addr.s_addr = htonl(INADDR_ANY);

// skaddr.sin_port = htons(0);

skaddr.sin_port = htons(5560);

if (bind(ld, (struct sockaddr *) &skaddr, sizeof(skaddr))<0) {

perror("Problem binding\n");

exit(0);

length = sizeof( skaddr );

if (getsockname(ld, (struct sockaddr *) &skaddr, &length)<0) {

perror("Error getsockname\n");

exit(1);

printf("The Server passive socket port number is %d\n",ntohs(skaddr.sin_port));

if (listen(ld,5) < 0 ) {

perror("Error calling listen\n");

exit(1);

while (1) {

printf("Ready for a connection...\n");

addrlen=sizeof(skaddr);

if ( (sd = accept( ld, (struct sockaddr*) &from, &addrlen)) < 0) {

perror("Problem with accept call\n");

exit(1);

printf("Got a connection - processing...\n");


while ((n=read(sd,buff,100))>0) {

buff[n]='\0';

printf("Primljeno: %s\n",poc);

if(strcmp(poc,"Dobar dan!") == 0)

write(sd,message1,strlen(message1));

printf("Poslato: %s\n",message1);

break;

else if(strcmp(poc,"Laku noc!") == 0)

write(sd,message2,strlen(message2));

printf("Poslato: %s\n",message2);

break;

else

write(sd,"Nepoznata poruka!\n",19);

printf("Poslato: Nepoznata poruka!\n");

break;

printf("Done with connection - closing\n\n\n");

close(sd);

return 0;

}
//KLIJENTSKI DIO (SA PREDAVANJA):
#include <windows.h>

#include <winsock.h>

#include <stdio.h>

#include <string.h>

char *message1 = "Dobar dan!";

char *message2 = "Laku noc!";

char *message3 = "AAAA!";

int main(int argc,char *argv[])

struct sockaddr_in sad;

int sd;

unsigned short port;

int adresa;

int n;

char buf[1000];

WSADATA wsaData;

WSAStartup(0x0101, &wsaData);

memset((char *)&sad,0,sizeof(sad));

sad.sin_family = AF_INET;

if (argc <3 ) {

fprintf(stderr,"niste naveli sve parametre\n");

exit(1);

} else

port = atoi(argv[2]);

sad.sin_port = htons(port);

adresa = inet_addr(argv[1]);

sad.sin_addr.s_addr = inet_addr(argv[1]);

}
sd = socket(PF_INET, SOCK_STREAM, 0);

if (sd < 0) {

fprintf(stderr, "soket nije kreiran\n");

exit(1);

if (connect(sd, (struct sockaddr *)&sad, sizeof(sad)) < 0) {

fprintf(stderr,"connect failed\n");

exit(1);

if(strcmp(argv[3],"a") == 0)

send(sd,message1,strlen(message1),0);

printf("Poslato: %s\n",message1);

else if(strcmp(argv[3],"b") == 0)

send(sd,message2,strlen(message2),0);

printf("Poslato: %s\n",message2);

else

send(sd,message3,strlen(message3),0);

printf("Poslato: %s\n",message3);

while ((n=recv(sd,buf,100,0))>0) {

buf[n]='\0';

printf("Primljeno: %s\n",buf);

break;

closesocket(sd);

exit(0);

You might also like