mrezno ra čunarstvo

58
Mrezno ra Mrezno ra čunarstvo čunarstvo 6. glava 6. glava Looking Up Internet Looking Up Internet Addresses Addresses

Upload: kennedy-bell

Post on 30-Dec-2015

47 views

Category:

Documents


0 download

DESCRIPTION

Mrezno ra čunarstvo. 6. glava Looking Up Internet Addresses. pojmovi. node – uređaj povezan na Internet host – node koji je računar svaki host se identifikuje bar jednim jedinstvenim brojem koji se naziva Internet adresa ili IP adresa IPv4 adrese – 4 bajta IPv6 adrese – 16 bajtova - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Mrezno ra čunarstvo

Mrezno raMrezno računarstvočunarstvo

6. glava 6. glava Looking Up Internet Looking Up Internet

AddressesAddresses

Page 2: Mrezno ra čunarstvo

pojmovipojmovi

node – uređaj povezan na Internetnode – uređaj povezan na Internethost – node koji je računarhost – node koji je računarsvaki host se identifikuje bar jednim jedinstvenim svaki host se identifikuje bar jednim jedinstvenim brojem koji se naziva Internet adresa ili IP brojem koji se naziva Internet adresa ili IP adresaadresaIPv4 adrese – 4 bajtaIPv4 adrese – 4 bajtaIPv6 adrese – 16 bajtovaIPv6 adrese – 16 bajtova(4 i 6 su verzije Internet Protokola, ne brojevi (4 i 6 su verzije Internet Protokola, ne brojevi bajtova u adresi)bajtova u adresi)adrese su uređeni nizovi bajtova, nisu brojeviadrese su uređeni nizovi bajtova, nisu brojevi

Page 3: Mrezno ra čunarstvo

IPv4 adresaIPv4 adresa

4 neoznačena bajta, svaki sa vrednošću 4 neoznačena bajta, svaki sa vrednošću od 0 do 255. Bajtovi se razdvajaju od 0 do 255. Bajtovi se razdvajaju tačkamatačkama

152.2.21.2 (dotted quad format)152.2.21.2 (dotted quad format)

Page 4: Mrezno ra čunarstvo

IPv6 adresaIPv6 adresa

8 blokova od po 4 heksadekadne cifre8 blokova od po 4 heksadekadne cifreblokovi se razdvajaju dvotačkomblokovi se razdvajaju dvotačkom2001:0250:02FF:0210:0250:8BFF:FEDE:67C82001:0250:02FF:0210:0250:8BFF:FEDE:67C8vodeće nule ne moraju se pisativodeće nule ne moraju se pisati2001:250:2FF:210:250:8BFF:FEDE:67C82001:250:2FF:210:250:8BFF:FEDE:67C8uzastopna dvotačka, najviše jedna u adresi, uzastopna dvotačka, najviše jedna u adresi, ukazuje na pojavu višestrukih 0-blokovaukazuje na pojavu višestrukih 0-blokovaFEDC:0000:0000:0000:00DC:0000:7076:0010FEDC:0000:0000:0000:00DC:0000:7076:0010FEDC::DC:0:7076:10FEDC::DC:0:7076:10

Page 5: Mrezno ra čunarstvo

Mešovite IPv6 i IPv4 mrežeMešovite IPv6 i IPv4 mreže

poslednja 4 bajta IPv6 adrese se ponekad poslednja 4 bajta IPv6 adrese se ponekad pišu kao IPv4 dotted quad adresa:pišu kao IPv4 dotted quad adresa:

FEDC:BA98:7654:3210:FEDC:BA98:7654:FEDC:BA98:7654:3210:FEDC:BA98:7654:32103210

FEDC:BA98:7654:3210:FEDC:BA98:118.8FEDC:BA98:7654:3210:FEDC:BA98:118.84.50.164.50.16

IPv6 je podržan od verzije Java 1.4IPv6 je podržan od verzije Java 1.4

Page 6: Mrezno ra čunarstvo

DNSDNS

Domain Name System (DNS) pridružuje IP Domain Name System (DNS) pridružuje IP adresama hostname-ove koje čovek može da adresama hostname-ove koje čovek može da upamtiupamtiVećina host-ova ima bar jedan hostnameVećina host-ova ima bar jedan hostnameIzuzetak su računari koji nemaju stalnu IP Izuzetak su računari koji nemaju stalnu IP adresu. Pošto nemaju stalnu IP adresu, takvi adresu. Pošto nemaju stalnu IP adresu, takvi računari se ne mogu koristiti kao serveri, pa računari se ne mogu koristiti kao serveri, pa nema potrebe da imaju ime jer im se niko neće nema potrebe da imaju ime jer im se niko neće obraćatiobraćatiPraviti razliku: IP adresa je uvek numerička, a Praviti razliku: IP adresa je uvek numerička, a hostname je human-readablehostname je human-readable

Page 7: Mrezno ra čunarstvo

DNSDNS

Neke mašine imaju veći broj imena.Neke mašine imaju veći broj imena.Npr. Npr. www.ibiblio.org i helios.metalab.unc.edu i helios.metalab.unc.eduwww.ibiblio.org se odnosi pre na web site nego se odnosi pre na web site nego na mašinuna mašinuu prošlosti, kada se web site premeštao sa u prošlosti, kada se web site premeštao sa mašine na mašinu, ime je repridruživano novoj mašine na mašinu, ime je repridruživano novoj mašini tako da uvek pokazuje na tekući server mašini tako da uvek pokazuje na tekući server sajta. Na ovaj način, URL-ovi širom sveta ne sajta. Na ovaj način, URL-ovi širom sveta ne moraju se ažurirati samo zato što je neki sajt moraju se ažurirati samo zato što je neki sajt pomeren na novi host.pomeren na novi host.

Page 8: Mrezno ra čunarstvo

DNSDNS

povremeno, 1 ime se mapira na veći broj IP povremeno, 1 ime se mapira na veći broj IP adresa. Tada je DNS server odgovoran da adresa. Tada je DNS server odgovoran da slučajno bira mašine da odgovore na svaki slučajno bira mašine da odgovore na svaki zahtev.zahtev.Ovo se često koristi za dosta opterećene web Ovo se često koristi za dosta opterećene web sajtove, gde se opterećenje deli na veći broj sajtove, gde se opterećenje deli na veći broj sistemasistemaSvaki računar povezan na Internet treba da ima Svaki računar povezan na Internet treba da ima pristup mašini koja se zove domain name pristup mašini koja se zove domain name server, koja je u opštem slučaju pod Unix-om i server, koja je u opštem slučaju pod Unix-om i izvršava poseban DNS software koji zna izvršava poseban DNS software koji zna mapiranja između različitih hostname-ova i IP mapiranja između različitih hostname-ova i IP adresaadresa

Page 9: Mrezno ra čunarstvo

DNSDNS

Većina domain name servera zna samo adrese Većina domain name servera zna samo adrese hostova u svojoj lokalnoj mreži i adrese nekoliko hostova u svojoj lokalnoj mreži i adrese nekoliko drugih domain name servera. Kada klijent traži drugih domain name servera. Kada klijent traži adresu mašine izvan lokalnog domena, local adresu mašine izvan lokalnog domena, local domain server traži podatak od udaljenog domain server traži podatak od udaljenog domain servera i prosleđuje odgovor klijentudomain servera i prosleđuje odgovor klijentuveći deo vremena koristimo hostname-ove i veći deo vremena koristimo hostname-ove i puštamo da DNS rukuje prevodom IP adresa.puštamo da DNS rukuje prevodom IP adresa.Za pokretanje primera iz knjige, neophodno je Za pokretanje primera iz knjige, neophodno je da računar bude povezan na Internet (i time da računar bude povezan na Internet (i time bude u vezi sa bar jednim DNS-om)bude u vezi sa bar jednim DNS-om)

Page 10: Mrezno ra čunarstvo

klasa InetAddressklasa InetAddress

java.net.InetAddressjava.net.InetAddressreprezentacija visokog nivoa IP adrese (IPv4, IPv6)reprezentacija visokog nivoa IP adrese (IPv4, IPv6)Koristi je većina drugih mrežnih klasa, uključujući Socket, Koristi je većina drugih mrežnih klasa, uključujući Socket, ServerSocket, URL, DatagramSocket, ServerSocket, URL, DatagramSocket, DatagramPacket...DatagramPacket...uključuje i hostname i IP adresuuključuje i hostname i IP adresupublic class InetAddress extends Object implements public class InetAddress extends Object implements SerializableSerializable(iz ove klase ne treba izvoditi svoje klase, a to nije ni (iz ove klase ne treba izvoditi svoje klase, a to nije ni moguće jer su svi konstruktori sa paketnim pravom moguće jer su svi konstruktori sa paketnim pravom pristupa)pristupa)

Page 11: Mrezno ra čunarstvo

Kreiranje novih InetAddress objekataKreiranje novih InetAddress objekata

ne postoje public konstruktori klasene postoje public konstruktori klase

postoje 3 statička metoda koja vraćaju pogodno postoje 3 statička metoda koja vraćaju pogodno inicijalizovane InetAddress objekteinicijalizovane InetAddress objekte

public static InetAddress getByName(String public static InetAddress getByName(String hostName) throws UnknownHostExceptionhostName) throws UnknownHostException

public static InetAddresspublic static InetAddress[][] getAllByName(String getAllByName(String hostName) throws UnknownHostExceptionhostName) throws UnknownHostException

public static InetAddress getLocalHost() throws public static InetAddress getLocalHost() throws UnknownHostExceptionUnknownHostException

Page 12: Mrezno ra čunarstvo

Kreiranje novih InetAddress objekataKreiranje novih InetAddress objekata

Sva 3 ova metoda mogu napraviti konekciju sa lokalnim Sva 3 ova metoda mogu napraviti konekciju sa lokalnim DNS kako bi upotpunili informacije o InetAddress DNS kako bi upotpunili informacije o InetAddress objektu, ako je neophodnoobjektu, ako je neophodnoOvi metodi mogu izbaciti ”security” izuzetke ako je Ovi metodi mogu izbaciti ”security” izuzetke ako je zabranjena konekcija sa DNS-omzabranjena konekcija sa DNS-omKljučna stvar za zapamtiti jeste da ovi metodi prosto ne Ključna stvar za zapamtiti jeste da ovi metodi prosto ne koriste svoje argumente kako bi postavili odgovarajuća koriste svoje argumente kako bi postavili odgovarajuća polja objektapolja objektaOni zapravo prave mrežne konekcije kako bi dobili Oni zapravo prave mrežne konekcije kako bi dobili neophodne informacijeneophodne informacijeOstali metodi klase, poput getAddress() i getHostName() Ostali metodi klase, poput getAddress() i getHostName() uglavnom rade sa informacijama koje su obezbedili ovi uglavnom rade sa informacijama koje su obezbedili ovi metodi. Ti metodi ne prave mrežne konekcije, a u retkim metodi. Ti metodi ne prave mrežne konekcije, a u retkim situacijama kada to rade, ne izbacuju izuzetkesituacijama kada to rade, ne izbacuju izuzetkeSamo ova 3 metoda idu izvan Jave i lokalnog sistema Samo ova 3 metoda idu izvan Jave i lokalnog sistema kako bi obavili svoj posaokako bi obavili svoj posao

Page 13: Mrezno ra čunarstvo

DNS pretrage mogu biti relativno skupe (reda DNS pretrage mogu biti relativno skupe (reda veličine nekoliko sekundi po zahtevu koji ide veličine nekoliko sekundi po zahtevu koji ide preko nekoliko međuservera, ili zahtevu koji preko nekoliko međuservera, ili zahtevu koji pokušava da razreši host koji nije dostupan)pokušava da razreši host koji nije dostupan)Zato klasa InetAddress kešira rezultate pretragaZato klasa InetAddress kešira rezultate pretragaAko ima adresu datog host-a, neće je tražiti Ako ima adresu datog host-a, neće je tražiti ponovo, čak i ako se kreira novi InetAddress ponovo, čak i ako se kreira novi InetAddress objekat za isti host. Sve dok se IP adrese ne objekat za isti host. Sve dok se IP adrese ne menjaju za vreme izvršavanja , ovo ne menjaju za vreme izvršavanja , ovo ne predstavlja problempredstavlja problem

Page 14: Mrezno ra čunarstvo

greške tipa: host not found su neznatno greške tipa: host not found su neznatno problematičnije. Nije neuobičajeno da inicijalni problematičnije. Nije neuobičajeno da inicijalni pokušaj razrešenja host-a ne uspe, ali naredni pokušaj razrešenja host-a ne uspe, ali naredni koji neposredno sledi uspe. Ono što se obično koji neposredno sledi uspe. Ono što se obično dešava u ovoj situaciji je da prvi pokušaj istekne dešava u ovoj situaciji je da prvi pokušaj istekne dok su informacije još u putu od DNS servera. dok su informacije još u putu od DNS servera. Zatim informacija stiže do lokalnog servera i Zatim informacija stiže do lokalnog servera i odmah je dostupna za sledeći zahtev. Zato, odmah je dostupna za sledeći zahtev. Zato, Java neuspešne zahteve kešira na 10 sekundi.Java neuspešne zahteve kešira na 10 sekundi.postoje system properties kojima se može postoje system properties kojima se može podesiti broj sekundi koliko se uspešne i podesiti broj sekundi koliko se uspešne i neuspešne pretrage čuvaju u kešuneuspešne pretrage čuvaju u kešu

Page 15: Mrezno ra čunarstvo

Osim lokalnog keširanja unutar klase Osim lokalnog keširanja unutar klase InetAddress, local host, local domain name InetAddress, local host, local domain name server i drugi DNS serveri gdegod na Internetu server i drugi DNS serveri gdegod na Internetu takođe mogu keširati rezultate različitih upita. takođe mogu keširati rezultate različitih upita. Java nema kontrolu nad tim.Java nema kontrolu nad tim.Posledica je da može proći nekoliko sati dok Posledica je da može proći nekoliko sati dok informacija o promeni IP adrese ne prođe kroz informacija o promeni IP adrese ne prođe kroz Internet. U međuvremenu naši programi se Internet. U međuvremenu naši programi se mogu suočiti sa različitim izuzecima, uključujući mogu suočiti sa različitim izuzecima, uključujući UnknownHostException, UnknownHostException, NoRouteToHostException i ConnectException u NoRouteToHostException i ConnectException u zavisnosti od načinjene promenezavisnosti od načinjene promene

Page 16: Mrezno ra čunarstvo

2 metoda koja ne proveravaju svoje adrese kod lokalnog DNS 2 metoda koja ne proveravaju svoje adrese kod lokalnog DNS serveraserveraprvi kreira InetAddress objekat sa zadatom IP adresom i bez prvi kreira InetAddress objekat sa zadatom IP adresom i bez hostnamehostnamedrugi kreira InetAddress objekat sa IP adresom i hostname-omdrugi kreira InetAddress objekat sa IP adresom i hostname-ompublic static InetAddress getByAddress(bytepublic static InetAddress getByAddress(byte[] address[] address)) throws throws UnknownHostExceptionUnknownHostExceptionpublic static InetAddress getByAddress(String hostName, byte[] public static InetAddress getByAddress(String hostName, byte[] address) throws UnknownHostExceptionaddress) throws UnknownHostExceptionZa razliku od prethodna 3, ova 2 metoda ne garantuju da takav host Za razliku od prethodna 3, ova 2 metoda ne garantuju da takav host uopuopšte postoji ili da je hostname korektno mapiran na IP adresu. šte postoji ili da je hostname korektno mapiran na IP adresu. Izbacuju izuzetak jedino ako je niz bajtova nekorektne veličine (nije Izbacuju izuzetak jedino ako je niz bajtova nekorektne veličine (nije 4 niti 16 bajtova) prosleđen kao argument address4 niti 16 bajtova) prosleđen kao argument address

Page 17: Mrezno ra čunarstvo

public static InetAddress getByName(String public static InetAddress getByName(String hostName) throws UnknownHostExceptionhostName) throws UnknownHostException

najčešće korišćennajčešće korišćenstatički metod koji uzima hostname koji tražimo kao argumentstatički metod koji uzima hostname koji tražimo kao argumenttraži IP adresu tog hosta koristeći DNS.traži IP adresu tog hosta koristeći DNS.import java.net.*; (biće u svim programima)import java.net.*; (biće u svim programima)trytry{{

InetAddress address = InetAddress address = InetAddress.getByName(InetAddress.getByName(”www.oreally.com”);”); System.out.println(address);System.out.println(address); }catch(UnknownHostException ex){}catch(UnknownHostException ex){ System.out.println(”Could not find www.oreilly.com”); System.out.println(”Could not find www.oreilly.com”); }}

primer1primer1u retkim prilikama u retkim prilikama želimo da se povežemo sa mašinom koja nema želimo da se povežemo sa mašinom koja nema hostname. Moguće je proslediti String koji sadrži dotted quad ili hostname. Moguće je proslediti String koji sadrži dotted quad ili heksadekadni oblik IP adrese kao argument getByName() metodaheksadekadni oblik IP adrese kao argument getByName() metoda

Page 18: Mrezno ra čunarstvo

kada se getByName() poziva sa stringom u kome je IP kada se getByName() poziva sa stringom u kome je IP adresa, on kreira InetAddress objekat za zadatu IP adresa, on kreira InetAddress objekat za zadatu IP adresu bez provere DNS-a. To znači da je moguće adresu bez provere DNS-a. To znači da je moguće kreirati InetAddress objekte za host-ove koji ne postoje i kreirati InetAddress objekte za host-ove koji ne postoje i nemoguće je konektovati se sa njima.nemoguće je konektovati se sa njima.DNS pretraga zaDNS pretraga za odgovarajući odgovarajući hostname se vr hostname se vrši samo ši samo kada se hostname zahteva pozivom metoda kada se hostname zahteva pozivom metoda getHostName()getHostName()toString() ne vrši potragu za hostname, pa host neće biti toString() ne vrši potragu za hostname, pa host neće biti uključen u String-reprezentaciju, osim ako je već poznat, uključen u String-reprezentaciju, osim ako je već poznat, bilo zato što je prosleđen kao argument metoda prilikom bilo zato što je prosleđen kao argument metoda prilikom kreiranja InetAddress objekta ili zato što je pozivan kreiranja InetAddress objekta ili zato što je pozivan metod getHostName()metod getHostName()

Page 19: Mrezno ra čunarstvo

hostname-ovi su dosta stabilniji od IP hostname-ovi su dosta stabilniji od IP adresaadresaNeki servisi su živeli na istom hostname-u Neki servisi su živeli na istom hostname-u nekoliko godina a menjali su IP adrese nekoliko godina a menjali su IP adrese nekoliko puta. nekoliko puta. Ako imate izbor između korišćenja Ako imate izbor između korišćenja hostname-a i IP-adrese, uvek izaberite hostname-a i IP-adrese, uvek izaberite hostname i koristite IP adresu samo kada hostname i koristite IP adresu samo kada hostname nije dostupan.hostname nije dostupan.

Page 20: Mrezno ra čunarstvo

public static InetAddresspublic static InetAddress[] getAllByName(String [] getAllByName(String hostName) throws UnknownHostExceptionhostName) throws UnknownHostException

neki raneki računari imaju više od jedne Internet adresečunari imaju više od jedne Internet adrese

za zadati hostname, ovaj metod vraća niz koji za zadati hostname, ovaj metod vraća niz koji sadrži sve adrese koje odgovaraju tom imenusadrži sve adrese koje odgovaraju tom imenu

primer 2 vraća kompletnu listu IP adresa za primer 2 vraća kompletnu listu IP adresa za ””www.microsoft.com”” (sada ima samo jednu -> (sada ima samo jednu -> probati za probati za ””www.google.com””, on ih ima 6), on ih ima 6)

host-ovi sa više od jedne adrese su pre izuzetak host-ovi sa više od jedne adrese su pre izuzetak nego pravilo. Većina su veliki web serveri. Čak i nego pravilo. Većina su veliki web serveri. Čak i tada retko je potrebno znati više od jedne tada retko je potrebno znati više od jedne njihove adresenjihove adrese

Page 21: Mrezno ra čunarstvo

public static InetAddress getByAddress(bytepublic static InetAddress getByAddress(byte[] address) [] address) throws UnknownHostExceptionthrows UnknownHostException

public static InetAddress getByAddress(String hostName, public static InetAddress getByAddress(String hostName, byte[] address) throws UnknownHostExceptionbyte[] address) throws UnknownHostException

kreiranje InetAddress objekta sa takreiranje InetAddress objekta sa tačno čno zadatim argumentima.zadatim argumentima.

Ne vrši se domain name pretragaNe vrši se domain name pretraga

Ako je dužina niza različita od 4 ili 16 Ako je dužina niza različita od 4 ili 16 izbacuje se izuzetakizbacuje se izuzetak

korisno kada domain name server nije korisno kada domain name server nije dostupan ili ima netačnu informacijudostupan ili ima netačnu informaciju

Page 22: Mrezno ra čunarstvo

public static getLocalHost() throws public static getLocalHost() throws UnknownHostExceptionUnknownHostException

vraća InetAddress objekat za mašinu na kojoj se vraća InetAddress objekat za mašinu na kojoj se izvršavaizvršavaizbacuje UnknownHostException kada ne može da nađe izbacuje UnknownHostException kada ne može da nađe adresu lokalne mašine (mada ovo ne bi trebalo da se adresu lokalne mašine (mada ovo ne bi trebalo da se desi)desi)upotreba je pravolinijskaupotreba je pravolinijska

InetAddress me = InetAddress me = InetAddress.getLocalHost();InetAddress.getLocalHost();

primer 3primer 3ako nismo konektovani na Internet i sistem nema fiksnu ako nismo konektovani na Internet i sistem nema fiksnu IP adresu ili domain name, verovatno ćemo videti IP adresu ili domain name, verovatno ćemo videti localhost kao domain name i 127.0.0.1 kao IP adresulocalhost kao domain name i 127.0.0.1 kao IP adresu

Page 23: Mrezno ra čunarstvo

Security IssuesSecurity Issues

Kreiranje novog InetAddress objekta od zadatog Kreiranje novog InetAddress objekta od zadatog hostname smatra se potencijalno nebezbednom hostname smatra se potencijalno nebezbednom operacijom jer zahteva DNS pretraguoperacijom jer zahteva DNS pretraguapletu pod kontrolom podrazumevanog security apletu pod kontrolom podrazumevanog security manager-a jedino je dopušteno da dobije IP manager-a jedino je dopušteno da dobije IP adresu hosta sa kog dolazi (svog codebase) i adresu hosta sa kog dolazi (svog codebase) i moguće local host-a.moguće local host-a.Nije dopušteno da kreira InetAddress objekat od Nije dopušteno da kreira InetAddress objekat od bilo kog drugog hostname-a. Može od string bilo kog drugog hostname-a. Može od string oblika IP adrese jer se tada ne vrši DNS oblika IP adrese jer se tada ne vrši DNS pretraga za takvom adresompretraga za takvom adresom

Page 24: Mrezno ra čunarstvo

Nepoverljivom kodu nije dopušteno da vrši proizvoljne Nepoverljivom kodu nije dopušteno da vrši proizvoljne DNS pretrage za drugim host-ovima zbog zabrane DNS pretrage za drugim host-ovima zbog zabrane pravljenja konekcija sa host-ovima osim codebase. pravljenja konekcija sa host-ovima osim codebase. Proizvoljne DNS pretrage otvorile bi tajne kanale kojim bi Proizvoljne DNS pretrage otvorile bi tajne kanale kojim bi program mogao komunicirati sa ostalim host-ovima. program mogao komunicirati sa ostalim host-ovima. (curenje informacija)(curenje informacija)Nepoverljivom kodu je dopušteno da zove Nepoverljivom kodu je dopušteno da zove InetAddress.getLocalHost(). Međutim, ovaj metod vraća InetAddress.getLocalHost(). Međutim, ovaj metod vraća hostname localhost i IP 127.0.0.1 Ovaj specijalan hostname localhost i IP 127.0.0.1 Ovaj specijalan hostname i IP zovu se loopback adresa. Bez obzira na to hostname i IP zovu se loopback adresa. Bez obzira na to koja mašina se koristi, ovaj hostname i IP adresa uvek koja mašina se koristi, ovaj hostname i IP adresa uvek se odnose na tekuću mašinu. Nije neophodno DNS se odnose na tekuću mašinu. Nije neophodno DNS razrešenje.razrešenje.Razlog zabrane apletu da otkrije stvarni hostname i Razlog zabrane apletu da otkrije stvarni hostname i adresu je to što je računar na kome se aplet izvršava adresu je to što je računar na kome se aplet izvršava namerno skriven iza firewall-a. U tom slučaju, aplet ne namerno skriven iza firewall-a. U tom slučaju, aplet ne sme biti kanal za informacije koje nema web server.sme biti kanal za informacije koje nema web server.

Page 25: Mrezno ra čunarstvo

Kao i sve sigurnosne provere, zabrane DNS razrešenja Kao i sve sigurnosne provere, zabrane DNS razrešenja mogu biti oslabljene za kod kome verujemo.mogu biti oslabljene za kod kome verujemo.metod klase SecurityManager kojim se proverava da li metod klase SecurityManager kojim se proverava da li host može biti razrešen:host može biti razrešen:

public void checkConnect(String hostname, int port)public void checkConnect(String hostname, int port)kada je port -1, metod proverava da li se može pozvati kada je port -1, metod proverava da li se može pozvati DNS da razreši zadati hostDNS da razreši zadati hostako je port veći od -1, metod proverava da li je ako je port veći od -1, metod proverava da li je dopuštena konekcija sa imenovanim host-om na dopuštena konekcija sa imenovanim host-om na zadatom portuzadatom portuhost može biti bilo hostname, bilo dotted quad IP adresa, host može biti bilo hostname, bilo dotted quad IP adresa, bilo heksadekadna IPv6 adresabilo heksadekadna IPv6 adresaAko je razrešenje/konekcija dopuštena, metod radi Ako je razrešenje/konekcija dopuštena, metod radi return, a inače izbacuje SecurityExceptionreturn, a inače izbacuje SecurityExceptionapletu se može dodeliti pravo da razreši host-a apletu se može dodeliti pravo da razreši host-a korišćenjem Policy Toolkorišćenjem Policy Toolprimer 3a (InetAplet) + 3a_dodatna_uputstva.pdfprimer 3a (InetAplet) + 3a_dodatna_uputstva.pdf

Page 26: Mrezno ra čunarstvo

getter metodi klase InetAddressgetter metodi klase InetAddress

public String getHostName()public String getHostName()public bytepublic byte[] getAddress()[] getAddress()public String getHostAddress()public String getHostAddress()ne postoje odgovarajune postoje odgovarajući set*() metodići set*() metodinema načina da se izvan paketa java.net nema načina da se izvan paketa java.net promene polja InetAddress objektapromene polja InetAddress objektaJava može garantovati da hostname i IP adresa Java može garantovati da hostname i IP adresa odgovaraju jedno drugomodgovaraju jedno drugomInetAddress objekat je nepromenljiv i thread-InetAddress objekat je nepromenljiv i thread-safesafe

Page 27: Mrezno ra čunarstvo

public String getHostName()public String getHostName()

vraća String koji je ime host-a sa IP adresom vraća String koji je ime host-a sa IP adresom predstavljenom InetAddress objektompredstavljenom InetAddress objektomako mašina nema hostname ili security manager ako mašina nema hostname ili security manager sprečava određivanje imena, metod vraća dotted quad sprečava određivanje imena, metod vraća dotted quad format numeričke IP adrese format numeričke IP adrese InetAddress machine = InetAddress machine =

InetAddress.getLocalHost();InetAddress.getLocalHost(); String localHost = machine.getHostName();String localHost = machine.getHostName();

Nekad se vidi samo delimično kvalifikovano ime. To Nekad se vidi samo delimično kvalifikovano ime. To zavisi od načina na koji se DNS ponaša kada razrešava zavisi od načina na koji se DNS ponaša kada razrešava local hostname-ovelocal hostname-oveprimer 4primer 4

Page 28: Mrezno ra čunarstvo

public String getHostAddress()public String getHostAddress()

vraća String koji sadrži dotted quad format vraća String koji sadrži dotted quad format IP adreseIP adrese

primer 5primer 5

Page 29: Mrezno ra čunarstvo

public bytepublic byte[] getAddress()[] getAddress()(retko) IP ma(retko) IP mašine kao niz bajtova u mrežnom poretku. Bajt najveće šine kao niz bajtova u mrežnom poretku. Bajt najveće težine(krajnje levi u dotted quad form) je prvi bajt u nizu, tj. element sa težine(krajnje levi u dotted quad form) je prvi bajt u nizu, tj. element sa indeksom 0indeksom 0Zbog IPv6 adresa, ne pretpostavljati ništa o dužini niza. Ako želimo da Zbog IPv6 adresa, ne pretpostavljati ništa o dužini niza. Ako želimo da znamo tu dužinu, možemo iskoristiti polje length:znamo tu dužinu, možemo iskoristiti polje length:InetAddress me = InetAddress me =

InetAddress.getLocalHost();InetAddress.getLocalHost(); bytebyte[] address = me.getAddress();[] address = me.getAddress();

VraVraćeni bajtovi su neoznačeni, što može uzrokovati problem. U Javi ne ćeni bajtovi su neoznačeni, što može uzrokovati problem. U Javi ne postoji tip neoznačeni bajt. Bajtovi sa vrednostima većim od 127 tretiraju se postoji tip neoznačeni bajt. Bajtovi sa vrednostima većim od 127 tretiraju se kao negativni brojevi. Ako želimo bilo šta da radimo sa bajtovima koje nam kao negativni brojevi. Ako želimo bilo šta da radimo sa bajtovima koje nam je vratio getAddress() metod, moramo ih kastovati u int-ove i prilagoditi ih. je vratio getAddress() metod, moramo ih kastovati u int-ove i prilagoditi ih. Jedan način je:Jedan način je:int unsignedByte = signedByte < 0 ? signedByte + 256 : signedByte;int unsignedByte = signedByte < 0 ? signedByte + 256 : signedByte;Ovde signedByte može biti pozitivan ili negativanOvde signedByte može biti pozitivan ili negativanJedan od načina da se dobije neobrađeni niz bajtova IP adrese je Jedan od načina da se dobije neobrađeni niz bajtova IP adrese je određivanje tipa adrese. Testiranjem broja bajtova koje je vratio određivanje tipa adrese. Testiranjem broja bajtova koje je vratio getAddress() određuje se da li se radi sa IPv4 ili IPv6 adresomgetAddress() određuje se da li se radi sa IPv4 ili IPv6 adresomPrimer 6Primer 6

Page 30: Mrezno ra čunarstvo

Tipovi adresaTipovi adresa

Neke adrese imaju specijalno značenjeNeke adrese imaju specijalno značenje127.0.0.1 je lokalna loopback adresa127.0.0.1 je lokalna loopback adresaIPv4 adrese iz opsega 224.0.0.0 do IPv4 adrese iz opsega 224.0.0.0 do 239.255.255.255 su multicast adrese koje šalju 239.255.255.255 su multicast adrese koje šalju većem broju host-ova odjednomvećem broju host-ova odjednom10 metoda za testiranje da li InetAddress objekat 10 metoda za testiranje da li InetAddress objekat zadovoljava neki od kriterijumazadovoljava neki od kriterijumaisAnyLocalAddress()isAnyLocalAddress() isLoopbackAddress()isLoopbackAddress()

isLinkLocalAddress()isLinkLocalAddress() isSiteLocalAddress()isSiteLocalAddress()isMultiCastAddress()isMultiCastAddress() isMCGlobal()isMCGlobal()

isMCNodeLocal()isMCNodeLocal()isMCLinkLocal()isMCLinkLocal()isMCSiteLocal()isMCSiteLocal() isMCOrgLocal()isMCOrgLocal()

Page 31: Mrezno ra čunarstvo

public boolean isAnyLocalAddress()public boolean isAnyLocalAddress()

true ako je adresa wildcard adresa, a wildcard true ako je adresa wildcard adresa, a wildcard adresa odgovara proizvoljnoj adresi na lokalnom adresa odgovara proizvoljnoj adresi na lokalnom sistemu. Ovo je važno kada sistem ima nekoliko sistemu. Ovo je važno kada sistem ima nekoliko mrežnih interfejsa (nekoliko Ethernet karti ili mrežnih interfejsa (nekoliko Ethernet karti ili Ethernet kartu i wireless konekciju). Obično je Ethernet kartu i wireless konekciju). Obično je ovo bitno samo na serverima i gateway-ima. U ovo bitno samo na serverima i gateway-ima. U IPv4 wildcard adresa je 0.0.0.0IPv4 wildcard adresa je 0.0.0.0

U IPv6 je 0:0:0:0:0:0:0:0 (ili ::)U IPv6 je 0:0:0:0:0:0:0:0 (ili ::)

Page 32: Mrezno ra čunarstvo

public boolean isLoopbackAddress()public boolean isLoopbackAddress()loopback adresa se konektuje na isti računar loopback adresa se konektuje na isti računar direktno u IP sloju ne koristeći nikakav fizički direktno u IP sloju ne koristeći nikakav fizički hardwarehardwarekonektovanje na loopback adresu omogućuje konektovanje na loopback adresu omogućuje testiranje i pomaže u detektovanju problematestiranje i pomaže u detektovanju problemakonektovanje na loopback adresu nije isto što i konektovanje na loopback adresu nije isto što i konektovanje na stvarnu IP adresu sa istog konektovanje na stvarnu IP adresu sa istog sistema. U IPv4 ova adresa je 127.0.0.1, a u sistema. U IPv4 ova adresa je 127.0.0.1, a u IPv6 je 0:0:0:0:0:0:0:1 (::1)IPv6 je 0:0:0:0:0:0:0:1 (::1)

Page 33: Mrezno ra čunarstvo

Testing ReachabilityTesting Reachability2 metoda koja omogućuje aplikacijama da testiraju da li je određeni node 2 metoda koja omogućuje aplikacijama da testiraju da li je određeni node dostupan tekućem host-u, tj. da li je moguće napraviti mrežnu konekcijudostupan tekućem host-u, tj. da li je moguće napraviti mrežnu konekcijuKonekcije mogu biti blokirane iz više razloga, uključujući firewall-ove, proxy Konekcije mogu biti blokirane iz više razloga, uključujući firewall-ove, proxy servere, pokvarene rutere i prekinute kablove ili jednostavno to što je servere, pokvarene rutere i prekinute kablove ili jednostavno to što je udaljeni host isključen kada probamo da se konektujemo.udaljeni host isključen kada probamo da se konektujemo.public boolean isReachable(int timeout) throws IOExceptionpublic boolean isReachable(int timeout) throws IOExceptionpublic boolean isReachable(NetworkInterface interface, int ttl, int timeout) public boolean isReachable(NetworkInterface interface, int ttl, int timeout) throws IOExceptionthrows IOExceptionovi metodi pokušavaju da se konektuju na echo port udaljenog host-a kako ovi metodi pokušavaju da se konektuju na echo port udaljenog host-a kako bi saznali da li je dostupanbi saznali da li je dostupanako host odgovori za timeout milisekundi, metod vraća trueako host odgovori za timeout milisekundi, metod vraća trueizuzetak se izbacuje ako postoji mrežna greškaizuzetak se izbacuje ako postoji mrežna greška””time-to-live“ – maksimalan broj mrežnih skokova koja konekcija pokuša pre time-to-live“ – maksimalan broj mrežnih skokova koja konekcija pokuša pre odbacivanjaodbacivanjalocal network interfejs od kog je napravljena konekcijalocal network interfejs od kog je napravljena konekcijau praksi, ovi metodi nisu vrlo pouzdani kroz globalni Internet. U lokalnom u praksi, ovi metodi nisu vrlo pouzdani kroz globalni Internet. U lokalnom intranetu mogu se koristitiintranetu mogu se koristiti

Page 34: Mrezno ra čunarstvo

metodi klase Objectmetodi klase Object

predefiniše sledeća 3 metodapredefiniše sledeća 3 metodapublic boolean equals(Object o)public boolean equals(Object o)public int hashCode()public int hashCode()public String toString()public String toString()

equals()equals()objekat je jednak datom InetAddress objektu objekat je jednak datom InetAddress objektu samo ako je i sam instanca klase InetAddress i samo ako je i sam instanca klase InetAddress i ima istu IP adresu. Ne mora imati isti hostnameima istu IP adresu. Ne mora imati isti hostnameprimer 7primer 7

Page 35: Mrezno ra čunarstvo

public int hashCode()public int hashCode()

vraća int potreban kada se InetAddress vraća int potreban kada se InetAddress objekti koriste kao ključevi u heš tabelamaobjekti koriste kao ključevi u heš tabelama

vrednost se računa samo na osnovu IP vrednost se računa samo na osnovu IP adrese, ne uzima u obzir hostnameadrese, ne uzima u obzir hostname

Ako dva InetAddress objekta imaju istu Ako dva InetAddress objekta imaju istu adresu, imaju isti hash code, čak i ako im adresu, imaju isti hash code, čak i ako im se hostname-ovi razlikujuse hostname-ovi razlikuju

Page 36: Mrezno ra čunarstvo

public String toString()public String toString()

hostname/dotted quad addresshostname/dotted quad address

nemaju svi InetAddress objekti hostname-nemaju svi InetAddress objekti hostname-ove. Ako neki objekat nema hostname, on ove. Ako neki objekat nema hostname, on se postavlja na prazan string.se postavlja na prazan string.

Page 37: Mrezno ra čunarstvo

Klase Inet4Address i Inet6AddressKlase Inet4Address i Inet6Address

final i izvedene iz InetAddress klasefinal i izvedene iz InetAddress klase

nisu potrebnenisu potrebne

u application sloju, gde se izvršavaju Java u application sloju, gde se izvršavaju Java programi, ne moramo znati da li je adresa programi, ne moramo znati da li je adresa IPv4 ili IPv6, a čak i da moramo, brže je IPv4 ili IPv6, a čak i da moramo, brže je proveriti veličinu niza bajtova koje vrati proveriti veličinu niza bajtova koje vrati getAddress() nego koristiti instanceof za getAddress() nego koristiti instanceof za testiranje koja potklasa je u pitanjutestiranje koja potklasa je u pitanju

Page 38: Mrezno ra čunarstvo

klasa NetworkInterfaceklasa NetworkInterface

predstavlja lokalnu IP adresupredstavlja lokalnu IP adresuto može biti fizički interfejs kao što je dodatna to može biti fizički interfejs kao što je dodatna Ethernet karta (uobičajeno na firewall-ovima i Ethernet karta (uobičajeno na firewall-ovima i ruterima) ili može biti virtualni interfejs vezan za ruterima) ili može biti virtualni interfejs vezan za fizički hardware kao što su druge IP adrese fizički hardware kao što su druge IP adrese mašinemašineova klasa obezbeđuje metode za enumeraciju ova klasa obezbeđuje metode za enumeraciju svih lokalnih adresa i kreiranje InetAddress svih lokalnih adresa i kreiranje InetAddress objekata od njihobjekata od njihovi objekti se potom mogu koristiti za kreiranje ovi objekti se potom mogu koristiti za kreiranje soketa, server soketa itd.soketa, server soketa itd.

Page 39: Mrezno ra čunarstvo

metodi klase NetworkInterfacemetodi klase NetworkInterface

pošto predstavljaju fizički hardware i pošto predstavljaju fizički hardware i virtualne adrese, ne mogu se proizvoljno virtualne adrese, ne mogu se proizvoljno konstruisatikonstruisati

postoje statički metodi koji vraćaju postoje statički metodi koji vraćaju NetworkInterface objekat pridružen NetworkInterface objekat pridružen određenom mrežnom interfejsuodređenom mrežnom interfejsu

možemo dobiti NetworkInterface objekat možemo dobiti NetworkInterface objekat pomoću IP adrese, imena ili enumeracijepomoću IP adrese, imena ili enumeracije

Page 40: Mrezno ra čunarstvo

public static NetworkInterface getByName(String name) public static NetworkInterface getByName(String name) throws SocketExceptionthrows SocketExceptionvraća NetworkInterface objekat koji predstavlja mrežni vraća NetworkInterface objekat koji predstavlja mrežni interfejs sa zadatim imenom. Ako nema interfejsa sa tim interfejs sa zadatim imenom. Ako nema interfejsa sa tim imenom, vraća nullimenom, vraća nullako mrežni stek otkrije problem, izbacuje se izuzetak, ali ako mrežni stek otkrije problem, izbacuje se izuzetak, ali nije puno verovatno da se to desinije puno verovatno da se to desiFormat imena je platformski zavisan. Na tipičnom Unix Format imena je platformski zavisan. Na tipičnom Unix sistemu, Ethernet interfejs imena su oblika eth0, eth1 itd. sistemu, Ethernet interfejs imena su oblika eth0, eth1 itd. Lokalna loopback adresa se obično zove ”lo”. Na Lokalna loopback adresa se obično zove ”lo”. Na Windows-u, imena su stringovi poput ”CE31” ili ”ELX100” Windows-u, imena su stringovi poput ”CE31” ili ”ELX100” izvedeni iz imena proizvođača i modela hardware-a za izvedeni iz imena proizvođača i modela hardware-a za određeni mrežni interfejs.određeni mrežni interfejs.

Page 41: Mrezno ra čunarstvo

public static NetworkInterface public static NetworkInterface getByInetAddress(InetAddress address) throws getByInetAddress(InetAddress address) throws SocketExceptionSocketException

vraća NetworkInterface objekat koji predstavlja vraća NetworkInterface objekat koji predstavlja mrežni interfejs vezan za određenu IP adresu. mrežni interfejs vezan za određenu IP adresu. Ako nema mrežnog interfejsa vezanog za tu IP Ako nema mrežnog interfejsa vezanog za tu IP adresu na lokalnom hostu, vraća null. Ako bilo adresu na lokalnom hostu, vraća null. Ako bilo šta krene naopako, izbacuje se izuzetak.šta krene naopako, izbacuje se izuzetak.

primer 8primer 8

Page 42: Mrezno ra čunarstvo

public static Enumeration public static Enumeration getNetworkInterfaces() throws getNetworkInterfaces() throws SocketExceptionSocketExceptionvraća java.util.Enumeration listu svih vraća java.util.Enumeration listu svih mrežnih interfejsa na lokalnom host-u.mrežnih interfejsa na lokalnom host-u.primer 9primer 9ignorisati broj adresa. to je broj bez ignorisati broj adresa. to je broj bez značenja, ne stvarni broj IP adresa značenja, ne stvarni broj IP adresa vezanih za svaki interfejsvezanih za svaki interfejs

Page 43: Mrezno ra čunarstvo

getter metodigetter metodi

kada imamo NetworkInterface objekat, možemo dobiti kada imamo NetworkInterface objekat, možemo dobiti njegovu IP adresu i imenjegovu IP adresu i imeto je otprilike sve što sa njim možemo da radimoto je otprilike sve što sa njim možemo da radimopublic Enumeration getInetAddresses()public Enumeration getInetAddresses()jedan mrežni interfejs može biti vezan za više od jedne jedan mrežni interfejs može biti vezan za više od jedne IP adreseIP adreseovaj metod vraća enumeraciju koja sadrži InetAddress ovaj metod vraća enumeraciju koja sadrži InetAddress objekat za svaku IP adresu za koju je interfejs vezanobjekat za svaku IP adresu za koju je interfejs vezanpublic String getName() vraća ime određenog public String getName() vraća ime određenog NetworkInterface objekta, poput eth0 ili loNetworkInterface objekta, poput eth0 ili lopublic String getDisplayName() vraća čitljivije ime za public String getDisplayName() vraća čitljivije ime za određeni NetworkInterfaceodređeni NetworkInterface

Page 44: Mrezno ra čunarstvo

metodi klase Objectmetodi klase Object

equals(), hashCode(), toString()equals(), hashCode(), toString()NetworkInterface objekti su jednaki ako NetworkInterface objekti su jednaki ako predstavljaju isti fizički mrežni interfejs predstavljaju isti fizički mrežni interfejs (oba ukazuju na isti Ethernet port, modem (oba ukazuju na isti Ethernet port, modem ili wireless kartu) i imaju istu IP adresu. ili wireless kartu) i imaju istu IP adresu. Inače su različitiInače su različitiNetworkInterface ne implementiraju NetworkInterface ne implementiraju Cloneable, Serializable ili Comparable Cloneable, Serializable ili Comparable interfejseinterfejse

Page 45: Mrezno ra čunarstvo

Neki korisni programiNeki korisni programi

dva primera: jedan koji interaktivno dva primera: jedan koji interaktivno postavlja upite domain name serveru, a postavlja upite domain name serveru, a drugi koji može poboljšati performanse drugi koji može poboljšati performanse web servera procesiranjem log fajlova web servera procesiranjem log fajlova offlineoffline

Page 46: Mrezno ra čunarstvo

primer 10: HostLookupprimer 10: HostLookup

konvertovanje hostname-ova u IP adrese i IP konvertovanje hostname-ova u IP adrese i IP adresa u hostname-oveadresa u hostname-oveima 2 moda: interaktivni i command-lineima 2 moda: interaktivni i command-lineako se unese hostname u komandnu liniju, ako se unese hostname u komandnu liniju, štampa se IP adresa tog host-a.štampa se IP adresa tog host-a.ako se unese IP adresa u komandnu liniju, ako se unese IP adresa u komandnu liniju, štampa se hostnameštampa se hostnameako u komandnoj liniji nema ni hostname-a ni IP ako u komandnoj liniji nema ni hostname-a ni IP adrese, ulazi se u interaktivni mod gde se čitaju adrese, ulazi se u interaktivni mod gde se čitaju hostname-ovi i IP adrese sa standardnog ulaza hostname-ovi i IP adrese sa standardnog ulaza a ispisuju odgovarajuće IP adrese i hostname-a ispisuju odgovarajuće IP adrese i hostname-ovi dok se ne unese ”exit”.ovi dok se ne unese ”exit”.

Page 47: Mrezno ra čunarstvo

primer 10 objašnjenjaprimer 10 objašnjenja

3 metoda: main(), lookup() i isHostName()3 metoda: main(), lookup() i isHostName()main() metod određuje ima li argumenata main() metod određuje ima li argumenata komandne linijekomandne linijeako ih ima, main() poziva lookup() za svaki od ako ih ima, main() poziva lookup() za svaki od njihnjihinače, ulančava BufferedReader na inače, ulančava BufferedReader na InputStreamReader ulančan na System.in i čita InputStreamReader ulančan na System.in i čita ulaz metodom readLine() (ovde program čita iz ulaz metodom readLine() (ovde program čita iz konzole, ne iz mrežne konekcije)konzole, ne iz mrežne konekcije)ako je linija ”exit”, program se završava, a inače ako je linija ”exit”, program se završava, a inače se linija prosleđuje metodu lookup()se linija prosleđuje metodu lookup()

Page 48: Mrezno ra čunarstvo

lookup() metod koristi InetAdress.getByName() da odredi traženi host, bez lookup() metod koristi InetAdress.getByName() da odredi traženi host, bez obzira na format ulaza. getByName() prihvata i ime i dotted quad address.obzira na format ulaza. getByName() prihvata i ime i dotted quad address.lookup() poziva isHostName() da odredi da li je string hostname, dotted lookup() poziva isHostName() da odredi da li je string hostname, dotted quad IPv4 adresa ili IPv6 adresa.quad IPv4 adresa ili IPv6 adresa.isHostName() prvo traži dvotačke, koje ima svaka IPv6 adresa, a hostname isHostName() prvo traži dvotačke, koje ima svaka IPv6 adresa, a hostname nema. Ako nađe dvotačku, vraća false. Provera IPv4 adresa je nema. Ako nađe dvotačku, vraća false. Provera IPv4 adresa je komplikovanija jer ne sadrži nijedan karakter koji se ne može pojaviti u komplikovanija jer ne sadrži nijedan karakter koji se ne može pojaviti u hostname. Metod gleda svaki karakter stringa pa ako su svi cifre i tačke, hostname. Metod gleda svaki karakter stringa pa ako su svi cifre i tačke, pretpostavlja da je string numerička IP adresa i vraća false. Inače, pretpostavlja da je string numerička IP adresa i vraća false. Inače, pretpostavlja da je string hostname i vraća true.pretpostavlja da je string hostname i vraća true.Šta ako nije ni jedno ni drugo? getByName() neće moći da ga reši pa će Šta ako nije ni jedno ni drugo? getByName() neće moći da ga reši pa će izbaciti izuzetak.izbaciti izuzetak.Ako korisnik unese hostname, lookup() vraća odgovarajuću dotted quad ili Ako korisnik unese hostname, lookup() vraća odgovarajuću dotted quad ili heksadekadnu adresu koristeći getHostAddress().heksadekadnu adresu koristeći getHostAddress().Ako korisnik unese IP adresu, koristi se metod getHostName() za nalaženje Ako korisnik unese IP adresu, koristi se metod getHostName() za nalaženje odgovarajućeg hostname-a.odgovarajućeg hostname-a.

Page 49: Mrezno ra čunarstvo

Primer 11: Processing Web Server Log FilesPrimer 11: Processing Web Server Log Files

web serveri prate koji hostovi pristupaju sajtuweb serveri prate koji hostovi pristupaju sajtupodrazumevano, registruju se IP adrese koje se podrazumevano, registruju se IP adrese koje se konektuju na serverkonektuju na servermeđutim, često je moguće dobiti više informacija iz međutim, često je moguće dobiti više informacija iz imena nego iz odgovarajuće IP adrese.imena nego iz odgovarajuće IP adrese.Većina servera ima opciju da čuva hostname-ove Većina servera ima opciju da čuva hostname-ove umesto IP adresa, ali to može narušiti performanse jer umesto IP adresa, ali to može narušiti performanse jer server mora da traži DNS zahtev za svaku adresu.server mora da traži DNS zahtev za svaku adresu.Mnogo je efikasnije logovati IP adrese i konvertovati ih u Mnogo je efikasnije logovati IP adrese i konvertovati ih u hostname-ove kasnije, kada server nije zauzet, ili čak na hostname-ove kasnije, kada server nije zauzet, ili čak na nekoj potpuno drugoj mašininekoj potpuno drugoj mašiniPrimer čita log fajl web servera i štampa linije u kojima je Primer čita log fajl web servera i štampa linije u kojima je IP adresa konvertovana u hostnameIP adresa konvertovana u hostname

Page 50: Mrezno ra čunarstvo

The Common Log File FormatThe Common Log File Format

Većina servera ima standardizovani format log fajlaVećina servera ima standardizovani format log fajlaTipična linija tog fajla izgleda ovako:Tipična linija tog fajla izgleda ovako:205.160.186.76 unknown – 205.160.186.76 unknown – [17/Jun/2003:22:53:58 -[17/Jun/2003:22:53:58 -0500] 0500]

” ”GET /bgs/greenbg.gif HTTP 1. 0” 200 50GET /bgs/greenbg.gif HTTP 1. 0” 200 50web browser na IP adresi 205.160.186.76 zahteva fajl web browser na IP adresi 205.160.186.76 zahteva fajl /bgs/greenbg.gif sa ovog web servera u 10:53 p.m. (i 58 /bgs/greenbg.gif sa ovog web servera u 10:53 p.m. (i 58 sekundi) 17. juna 2003sekundi) 17. juna 2003fajl je pronafajl je pronađen (response code 200) i 50 bajtova đen (response code 200) i 50 bajtova podataka je uspešno preneto browser-u.podataka je uspešno preneto browser-u.

Page 51: Mrezno ra čunarstvo

Prvo polje je IP adresa ili, ako je uključeno Prvo polje je IP adresa ili, ako je uključeno razrešenje DNS-a, hostname sa kog je razrešenje DNS-a, hostname sa kog je napravljena konekcija. Za ovim sledi napravljena konekcija. Za ovim sledi blankoblanko

Za naše svrhe, parsiranje log fajla je Za naše svrhe, parsiranje log fajla je jednostavno: sve do prvog blanka je IP jednostavno: sve do prvog blanka je IP adresa, a sve posle toga ne treba menjatiadresa, a sve posle toga ne treba menjati

Page 52: Mrezno ra čunarstvo

Primer 11 objašnjenjaPrimer 11 objašnjenja

Ime fajla koji se procesuira prosleđuje se programu kao prvi Ime fajla koji se procesuira prosleđuje se programu kao prvi argument komandne linijeargument komandne linijeotvara se FileInputStream fin za taj fajl i na njega ulančava otvara se FileInputStream fin za taj fajl i na njega ulančava InputStreamReader. On se baferiše ulančavanjem na njega InputStreamReader. On se baferiše ulančavanjem na njega instance klase (Safe)BufferedReader.instance klase (Safe)BufferedReader.Fajl se obrađuje linija po linija u while-petljiFajl se obrađuje linija po linija u while-petljiSvaki prolaz kroz petlju smešta jednu liniju u String promenljivu Svaki prolaz kroz petlju smešta jednu liniju u String promenljivu entry.entry.entry se zatim deli u dva podstringa:entry se zatim deli u dva podstringa:ip – koji sadrži sve pre prvog blankaip – koji sadrži sve pre prvog blankatheRest – sve nakon prvog blankatheRest – sve nakon prvog blankapozicija prvog blanka određuje se metodom indexOf()pozicija prvog blanka određuje se metodom indexOf()ip se konvertuje u InetAddress koristeći getByName()ip se konvertuje u InetAddress koristeći getByName()getHostName() zatim traži hostnamegetHostName() zatim traži hostnamekonačno, hostname, blanko i ostatak linije se štampaju na std. izlazkonačno, hostname, blanko i ostatak linije se štampaju na std. izlaz

Page 53: Mrezno ra čunarstvo

Program je efikasniji nego što bi se dalo Program je efikasniji nego što bi se dalo očekivati. Većina web servera generiše očekivati. Većina web servera generiše višestruke unose u log fajlu za jednu stranicu, višestruke unose u log fajlu za jednu stranicu, pošto postoji po unos, ne samo za stranicu, već i pošto postoji po unos, ne samo za stranicu, već i za svaku sliku na straniciza svaku sliku na stranicimnogi posetioci traže veći broj strana sa sajtamnogi posetioci traže veći broj strana sa sajtaDNS pretrage su skupe i nema smisla tražiti DNS pretrage su skupe i nema smisla tražiti svaki sajt svaki put kada se pojavi u log fajlusvaki sajt svaki put kada se pojavi u log fajluklasa InetAddress vrši keširanje traženih adresa. klasa InetAddress vrši keširanje traženih adresa. Ako se ista adresa traži ponovo, može se Ako se ista adresa traži ponovo, može se dohvatiti iz keša mnogo brže nego pomoću dohvatiti iz keša mnogo brže nego pomoću DNS-aDNS-a

Page 54: Mrezno ra čunarstvo

Primer 12. Ubrzanje, thread poolPrimer 12. Ubrzanje, thread pool

Program može biti brži.Program može biti brži.obrada traje više od sekunde po unosuobrada traje više od sekunde po unosutačna brzina zavisi od brzine mrežne konekcije, brzine tačna brzina zavisi od brzine mrežne konekcije, brzine lokalnog i udaljenog DNS servera i opterećenja kada se lokalnog i udaljenog DNS servera i opterećenja kada se izvršava programizvršava programogromne količine vremena program troši čekajući da se ogromne količine vremena program troši čekajući da se vrate zahtevi DNS-avrate zahtevi DNS-aovo je upravo problem koji se rešava multithreadingomovo je upravo problem koji se rešava multithreadingomjedna glavna nit može čitati log fajl i prosleđivati jedna glavna nit može čitati log fajl i prosleđivati pojedinačne unose drugim nitima na procesiranjepojedinačne unose drugim nitima na procesiranje

Page 55: Mrezno ra čunarstvo

thread pool je ovde apsolutno neophodanthread pool je ovde apsolutno neophodanza nekoliko dana čak i manje opterećeni web serveri za nekoliko dana čak i manje opterećeni web serveri mogu lako generisati log fajl sa stotinama hiljada linijamogu lako generisati log fajl sa stotinama hiljada linijapokušaj obrade fajla generisanjem nove niti za svaki pokušaj obrade fajla generisanjem nove niti za svaki unos nije rešenje, posebno pošto glavna nit može čitati unos nije rešenje, posebno pošto glavna nit može čitati unose mnogo brže nego što pojedinačne niti mogu unose mnogo brže nego što pojedinačne niti mogu razrešavati domain name-ove.razrešavati domain name-ove.Dakle, reusing niti je ključna stvar.Dakle, reusing niti je ključna stvar.Broj niti se čuva u parametru numberOfThreads tako da Broj niti se čuva u parametru numberOfThreads tako da se može podesiti VM i mrežnom stekuse može podesiti VM i mrežnom stekuPokretanje prevelikog broja simultanih DNS zahteva Pokretanje prevelikog broja simultanih DNS zahteva takođe može izazvati problemetakođe može izazvati probleme

Page 56: Mrezno ra čunarstvo

PooledWeblog klasaPooledWeblog klasa

Program je podeljen u dve klaseProgram je podeljen u dve klaseprva, PooledWeblog sadrži metod main() i prva, PooledWeblog sadrži metod main() i processLogFile()processLogFile()takođe čuva resurse koji treba da budu deljeni takođe čuva resurse koji treba da budu deljeni od strane nitiod strane nitito su: pool, implementiran kao sinhronizovana to su: pool, implementiran kao sinhronizovana LinkedList i izlazni log out implementiran kao LinkedList i izlazni log out implementiran kao BufferedWriterBufferedWriterPojedinačne niti imaju direktan pristup pool-u, ali Pojedinačne niti imaju direktan pristup pool-u, ali moraju da prođu kroz log() metod kako bi pisale moraju da prođu kroz log() metod kako bi pisale na izlazna izlaz

Page 57: Mrezno ra čunarstvo

Ključni je metod processLogFile() koji, kao i ranije, čita iz Ključni je metod processLogFile() koji, kao i ranije, čita iz log fajla.log fajla.međutim, svaki unos se smešta u pool entries umesto da međutim, svaki unos se smešta u pool entries umesto da se neposredno obrađuje.se neposredno obrađuje.pošto je verovatno da se ovaj metod izvršava mnogo pošto je verovatno da se ovaj metod izvršava mnogo brže od niti koje pristupaju DNS-u, on radi yield nakon brže od niti koje pristupaju DNS-u, on radi yield nakon svakog unosa.svakog unosa.Dalje, on ide da spava ako ima više unosa u pool-u nego Dalje, on ide da spava ako ima više unosa u pool-u nego niti koje su raspoložive za njihovo procesiranje. Količina niti koje su raspoložive za njihovo procesiranje. Količina vremena koje provede spavajući zavisi od broja niti.vremena koje provede spavajući zavisi od broja niti.Kada se pročita poslednji unos, fleg finished se postavlja Kada se pročita poslednji unos, fleg finished se postavlja na true kako bi kazao nitima da mogu da umru nakon što na true kako bi kazao nitima da mogu da umru nakon što završe svoj posao.završe svoj posao.

Page 58: Mrezno ra čunarstvo

LookupThread klasaLookupThread klasarukuje konvertovanjem IP adresa u hostname-ove u unosima log fajlarukuje konvertovanjem IP adresa u hostname-ove u unosima log fajlakonstruktor svakoj niti obezbeđuje referencu na entries pool iz kog uzima konstruktor svakoj niti obezbeđuje referencu na entries pool iz kog uzima svoj posao i referencu na PooledWeblog objekat za koji radisvoj posao i referencu na PooledWeblog objekat za koji radidruga referenca omogućava callback-ove tako da nit može upisati druga referenca omogućava callback-ove tako da nit može upisati konvertovane unose u log fajl i proveriti da li je obrađen i poslednji unos. konvertovane unose u log fajl i proveriti da li je obrađen i poslednji unos. Ona vrši tu proveru pozivom metoda isFinished() kada je pool entries Ona vrši tu proveru pozivom metoda isFinished() kada je pool entries prazan (tj. veličina mu je 0)prazan (tj. veličina mu je 0)ni prazan pool ni isFinished() koji je vratio true nisu sami po sebi dovoljni. ni prazan pool ni isFinished() koji je vratio true nisu sami po sebi dovoljni. isFinished vraća true kada se poslednji unos stavi u pool, a može proteći isFinished vraća true kada se poslednji unos stavi u pool, a može proteći bar mala količina vremena dok se on iz njega ukloni. entries može biti bar mala količina vremena dok se on iz njega ukloni. entries može biti prazan iako ima još mnogo unosa koje treba pročitati ako pojedinačne niti prazan iako ima još mnogo unosa koje treba pročitati ako pojedinačne niti odrade posao brže nego što glavna nit čita log fajlodrade posao brže nego što glavna nit čita log fajlNa ovaj način, korišćenjem niti, postižu se ogromne uštede u vremenu – 10 Na ovaj način, korišćenjem niti, postižu se ogromne uštede u vremenu – 10 do 50 puta brže od sekvencijalne verzije programado 50 puta brže od sekvencijalne verzije programanajveća mana: reorganizacija log fajla (nije nužno isti redosled unosa)najveća mana: reorganizacija log fajla (nije nužno isti redosled unosa)