Professional Documents
Culture Documents
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).
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.
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.
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.
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
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.
/* 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. */
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.
- 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 zaglavlje
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.
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.
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.
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)
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.
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.
#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.
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.
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.
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:
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> */
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*/
} 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.
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).
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.
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:
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:
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:
Ukoliko su se uspješno izvršile, povratne vrijednosti su broj pročitanih ili poslanih bajtova.
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*/
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
int ld,sd;
int addrlen,length;
char buff[100];
int 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);
perror("Problem binding\n");
exit(0);
perror("Error getsockname\n");
exit(1);
if (listen(ld,5) < 0 ) {
exit(1);
while (1) {
addrlen=sizeof(skaddr);
exit(1);
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;
write(sd,message2,strlen(message2));
printf("Poslato: %s\n",message2);
break;
else
write(sd,"Nepoznata poruka!\n",19);
break;
close(sd);
return 0;
}
//KLIJENTSKI DIO (SA PREDAVANJA):
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <string.h>
int sd;
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 ) {
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) {
exit(1);
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);