14
KLIJENT-SERVER TEHNOLOGIJE Odjel za matematiku 1 Mrežne tehnologije i Python Predavanje 02

KLIJENT-SERVER TEHNOLOGIJE · adresu uspostavljamo TCP/IP vezu Upit DNS-u koji nam prevodi dani string u 32-bitnu IP adresu: Npr. 193.168.69.3 (pitagora) Uspostavljamo TCP/IP vezu

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

  • KLIJENT-SERVER

    TEHNOLOGIJE

    Odjel za matematiku 1

    Mrežne tehnologije i Python

    Predavanje 02

  • Python programski jezik

    Odjel za matematiku 2

    Ponovimo …

    • Python je interpreterski programski jezik kojeg je stvorio Guido van Rossum

    1990.

    • (I da, dobio je ime po seriji Leteći cirkus Monty Pythona)

    • Predpostavlja se osnovno predznanje programiranja u Python jeziku!

    Ukoliko vam nije bilo dovoljno ono što ste naučili o Pythonu na vježbama,

    pogledajte http://www.mathos.hr/racnet/program.html (Literatura koja se

    preporučuje).

    Predavanje 02

    http://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.htmlhttp://www.mathos.hr/racnet/program.html

  • Naš prvi zadatak

    Odjel za matematiku 3

    Saznajte zemljopisnu širinu i dužinu dane adrese

    Latitude + Longitude

    Adresa = ‘Kardinala Alojzija Stepinca, Osijek,

    Croatia’

    Primjer

    Predavanje 02

    • Google Maps API

    • Python Standard Library documentation

    http://docs.python.org/library/

    • Python Package Indeks

    http://pypi.python.org/

    • Rezultat: googlemaps paket

    http://pypi.python.org/pypi/googlemaps/

    http://docs.python.org/library/http://docs.python.org/library/http://docs.python.org/library/http://pypi.python.org/http://pypi.python.org/http://pypi.python.org/pypi/googlemaps/http://pypi.python.org/pypi/googlemaps/http://pypi.python.org/pypi/googlemaps/http://pypi.python.org/pypi/googlemaps/http://pypi.python.org/pypi/googlemaps/

  • Odjel za matematiku 4

    Python kod koristeći googlemaps gotovo rješenje:

    #!/usr/bin/env python

    from googlemaps import GoogleMaps

    address = '207 N. Defiance St, Archbold, OH'

    print GoogleMaps().address_to_latlng(address)

    Predavanje 02

    Naš prvi zadatak

    Saznajte zemljopisnu širinu i dužinu dane adrese

    Latitude + Longitude

  • Odjel za matematiku 5Predavanje 02

    Naš prvi zadatak

    Longitude + Latitude – ispod haube

    • Pokušajmo riješiti isti problem, ali bez pomoći rješenja s strane

    Promotrite sljedeće rješenje u Python-u:

    #!/usr/bin/env python

    import urllib, urllib2

    try:

    import json

    except ImportError: # for Python 2.5

    import simplejson as json

    params = {'q':'Alojzija Stepinca, Osijek, Croatia', 'output': 'json', 'oe': 'utf8'}

    url = 'http://maps.google.com/maps/geo?' + urllib.urlencode(params)

    rawreply = urllib2.urlopen(url).read()

    reply = json.loads(rawreply)

    print reply['Placemark'][0]['Point']['coordinates'][:-1]

  • Odjel za matematiku 6

    Primjetite da u implementaciji bez korištenja gotovih rješenja bolje

    razumijemo što se u kodu dešava

    uspostavljamo putanju k nekoj web adresuhttp://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/

    s te web adrese (očigledno koristeći HTTP protokol) skidamo

    neke podatke strukturirane u java script object object notation formi

    učitavamo podatke u json objekt

    moramo li nužno razumjeti json objekt?

    Predavanje 02

    Naš prvi zadatak

    Longitude + Latitude – ispod haube

    print reply

    {u'Status': {u'code': 200, u'request': u'geocode'}, u'Placemark': [{u'Point': {u'coordinates': [18.6860492, 45.5571403, 0]},

    u'ExtendedData': {u'LatLonBox': {u'west': 18.6829114, u'east': 18.6892067, u'north': 45.5618861, u'south': 45.553646}},

    u'AddressDetails': {u'Country': {u'CountryName': u'Republika Hrvatska', u'AdministrativeArea': {u'AdministrativeAreaName':

    u'Osje\u010dko-baranjska', u'Locality': {u'Thoroughfare': {u'ThoroughfareName': u'Kardinala Alojzija Stepinca'},

    u'LocalityName': u'Osijek'}}, u'CountryNameCode': u'HR'}, u'Accuracy': 6}, u'id': u'p1', u'address': u'Kardinala Alojzija

    Stepinca, Osijek, Croatia'}], u'name': u'Alojzija Stepinca, Osijek, Croatia'}

    http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/http://code.google.com/intl/hr-HR/apis/maps/documentation/geocoding/

  • Odjel za matematiku 7Predavanje 02

    Naš prvi zadatak

    Longitude + Latitude – još dublje ispod haube

    urllib2.urlopen(url).read()

    Prisjetite se kako za dani URL (Uniform Resource Locator) tj. web

    adresu uspostavljamo TCP/IP vezu

    Upit DNS-u koji nam prevodi dani string u 32-bitnu IP adresu:

    Npr. 193.168.69.3 (pitagora)

    Uspostavljamo TCP/IP vezu s serverom zadane IP adrese na

    portu 80

    Saljemo serveru i primamo od servera IP pakete

    Dobra stvar: sav posao je odradila urllib klasa predefinirana u

    standardnoj pythonovoj biblioteci.

  • Odjel za matematiku 8Predavanje 02

    Naš prvi zadatak

    Longitude + Latitude – još dublje, sve do socket-a

    Socket: sučelje između aplikacije, tj. nas programera, i TCP protokola

    Sjećate se da smo završili zadnje predavanje s pojmom socket-a?

  • Odjel za matematiku 9

    #!/usr/bin/env python

    import socket

    sock = socket.socket()

    sock.connect(('maps.google.com', 80))

    sock.sendall(

    'GET /maps/geo?q=Alojzija%Stepinca,%Osijek,%Croatia'

    '&output=json&oe=utf8&sensor=false HTTP/1.1\r\n'

    'Host: maps.google.com:80\r\n'

    'User-Agent: \r\n'

    'Connection: close\r\n'

    '\r\n')

    rawreply = sock.recv(4096)print rawreply

    Python implementacija našeg zadatka koristeći direktno socket

    Predavanje 02

    Naš prvi zadatak

    Longitude + Latitude – još dublje, sve do socket-a

  • Google Maps URL vraća podatke u JSON obliku koje sadrže

    u sebi tražene koordinateURLs sadrže dokumente koje možemo

    dohvatiti pomoću HTTP protokola.

    HTTP koristi socket-e za slanje naredbi

    poput GET.

    Odjel za matematiku 10Predavanje 02

    Naš prvi zadatak

    Stog protokola (Protocol stack)

    Stog protokola u prethodnom primjeru:

    Socket zna poslati i

    primati tekst

  • Još malo o IP protokolu

    Odjel za matematiku 11Predavanje 02

    Struktura IP paketa

    193.198.69.3

    Podaci :

    binarni string

    IP paket

    193.198.69.3

    IP adresa se čita s lijeva na desno:

    Prva dva bytea određuju organizaciju kojoj je pridružena adresa.

    Npr: 193.198.*.* velikim dijelom pripada CarNet-u

    Sljedeći byte određuje podmrežu na kojoj se nalazi računalo

    Npr: 193.198.69.* je CarNet dodijelio našem Odjelu

    Posljednji byte određuje mašinu ili servis kojemu se pristupa

  • Odjel za matematiku 12Predavanje 02

    IP adresiranje

    #!/usr/bin/env python

    import socket

    hostname = 'www.mathos.hr'

    addr = socket.gethostbyname(hostname)print 'The address of', hostname, 'is', addr

    Pretvaranje tekstualne adrese u IP adresu (upit DNS serveru):

    IP adrese oblika:

    127.*.*.*: adrese rezervirane za lokalnu mašinu na kojoj radimo

    127.0.0.1 ili „localhost‟ – najčešće lokalni IP mašine na kojoj jesmo

    10.*.*.* , 172.16–31.*.* , 192.168.*.* : IP adrese rezervirane za privatne

    podmreže (npr. LAN tj. lokalne mreže)

    Nestašica IP adresa: IPv4 vs. IPv6 standard

    IPv4 : adresiranje pomoću 4 bytea

    IPv6 : adresiranje pomoću 16 bytea

    Npr: fe80::fcfd:4aff:fecf:ea4e

  • Odjel za matematiku 13Predavanje 02

    Usmjerivanje prometa (routing)

    ukoliko IP adresa izgleda poput 127.*.*.*, operacijski sustav

    zna da je paket namjenjen nekoj drugoj aplikaciji na istom računalu

    ukoliko IP adresa ima istu podmrežu kao i mašina sama, tada paket

    nikada neće napustiti lokalnu mrežu.

    u suprotnom, računalo usmjerava paket na tzv “gateway računalo”, koje

    povezuje lokalnu mrežu s ostatkom Interneta. Gateway odlučuje kuda

    dalje s paketom.

    Na primjer,

  • Fragmentacija paketa

    Odjel za matematiku 14Predavanje 02

    RFC dokument koji definira Internet Protokol:

    http://tools.ietf.org/html/rfc791

    IP dozvoljava veličinu paketa do 64kB

    Lokalna mreža dozvoljava pakete veličine do 1500 bytea

    Stoga je ponekad nužna fragmentacija paketa na manje pakete

    DF (don‟t fragment) flag

    MTU ili “maximum transmission unit” pojedine podmreže je najveća

    veličina paketa koju neka mreža može prihvatiti