Sovellukset (osa 2) ja verkkoohjelmointi



Samankaltaiset tiedostot
1/27/15. Sovellukset (osa 2) Sisältö: sovellusarkkitehtuurit. Lyhenteitä ja terminologiaa. Internet-protokollapino

1/20/15. Sovellukset 1: sähköposti, web, verkkoohjelmointi. Sisältö. Sovellusten historiaa. Verkkosovellus ja protokolla

Sovellukset 1: sähköposti, web, verkkoohjelmointi

Sovellukset (osa 2) CSE-C2400 Tietokoneverkot Sanna Suoranta. Tietokoneverkot 2015

3. Kuljetuskerros 3.1. Kuljetuspalvelu

OSI ja Protokollapino

Ryhmän kokoonpano. Kaikki kalvot on jaettu tasan ryhmän jäsenten kesken

1/13/15. Tietokoneverkot. Tämä luento

Chapter 2 Application Layer

Yhteenveto. CSE-C2400 Tietokoneverkot

Kuljetuskerros. Tietokoneverkot. Matti Siekkinen Pasi Sarolahti

Tietoliikenne II (2 ov)

Sovellukset (osa 2) CSE-C2400 Tietokoneverkot Sanna Suoranta

ELEC-C7241 Tietokoneverkot Kuljetuskerros

Tietoliikenne II (2 ov)

kynnysarvo (threshold)

3. Kuljetuskerros 3.1. Kuljetuspalvelu

Tietokoneverkot. CSE-C2400 Tietokoneverkot (5 op) 2015 Sanna Suoranta. Sanna Suoranta Tietokoneverkot 2015

kynnysarvo (threshold)

Tietoliikenteen perusteet

Luento 3: Sovelluskerros verkkosovelluksen periaatteet, WWW, pistoke

S Tietoliikennetekniikan perusteet. Pakettikytkentäiset verkot. Helsinki University of Technology Networking Laboratory

Yhteenveto. CSE-C2400 Tietokoneverkot Matti Siekkinen

kynnysarvo (threshold) varoitusarvo = tästä lähtien syytä varoa ruuhkaa aluksi 64 K RTT

Tietoliikenteen perusteet

Kertaus. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2013

Kertaus. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2011

Siltojen haitat. Yleisesti edut selvästi suuremmat kuin haitat 2/19/ Kytkin (switch) Erittäin suorituskykyisiä, moniporttisia siltoja

Salausmenetelmät (ei käsitellä tällä kurssilla)

Miten Internet toimii. Tuomas Aura T Johdatus tietoliikenteeseen kevät 2013

Chapter 2 Application Layer

Tietoliikenne II. Syksy 2005 Markku Kojo. Tietoliikenne II (2 ov,, 4 op) Page1. Markku Kojo Helsingin yliopisto Tietojenkäsittelytieteen laitos

S Teletekniikan perusteet

ELEC-C7241 Tietokoneverkot Ohjelmointiprojekti

Pertti Pennanen OSI 1 (4) EDUPOLI ICTPro

3. Kuljetuskerros 3.1.

Verkko-ohjemointia. TCP vs. UDP Socket, ServerSocket Datagrammit RMI

Tehtävä 2: Tietoliikenneprotokolla

Netemul -ohjelma Tietojenkäsittelyn koulutusohjelma

JWT 2016 luento 11. to klo Aulikki Hyrskykari. PinniB Aulikki Hyrskykari

3. Kuljetuskerros 3.1. Kuljetuspalvelu End- to- end

ICMP-sanomia. 3. IP-kerroksen muita protokollia ja mekanismeja ICMP (Internet Control Message Protocol)

TCP/IP-protokollat ja DNS

Verkkoliikennettä Java[ssa lla] Jouni Smed

3/31/15. Yhteenveto. Tällä luennolla. Sovellukset. Internet-protokollapino. Sovellukset. Sovellusarkkitehtuurit

3. IP-kerroksen muita protokollia ja

Tietoliikenne I (muuntokoulutettaville) 2 ov Syksy 2002 Luennot Liisa Marttinen 11/6/2002 1

Tietoliikenne I (muuntokoulutettaville) 2 ov syksy 2003 Luennot Liisa Marttinen

Tietoliikenne I (muuntokoulutettaville) 2 ov syksy 2003 Luennot Liisa Marttinen

Tietoliikenne I 2 ov kevät 2003

Tulevaisuuden Internet. Sasu Tarkoma

Tietoliikenne I 2 ov kevät 2002

Tietoliikenne I 2 ov kevät 2004

Tietoliikenne I 2 ov kevät 2004

PUSH palvelut mobiilikehityksessä: Android ja Windows phone 7. Pauli Kettunen

Chapter 3 Transport Layer. Kuljetuskerros

Mikä on internet, miten se toimii? Mauri Heinonen

Tietoverkkojen turvallisuus. Tuomas Aura T Johdatus tietoliikenteeseen kevät 2012

Järjestelmäarkkitehtuuri (TK081702)

Tietokone. Tietokone ja ylläpito. Tietokone. Tietokone. Tietokone. Tietokone

Tietoverkkojen turvallisuus. Tuomas Aura T Johdatus tietoliikenteeseen kevät 2011

Microsoft Outlook Web Access. Pikaohje sähköpostin peruskäyttöön

HOJ J2EE & EJB & SOAP &...

ELEC-C7241 Tietokoneverkot Sovelluskerros

HSMT J2EE & EJB & SOAP &...

WWW-sivu. Miten Internet toimii? World Wide Web. HTML-koodi. HTTP-istunto URL <#>

Linux palomuurina (iptables) sekä squid-proxy

Päivitysohje Opus Dental

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Tekninen suunnitelma - StatbeatMOBILE

Tikon Ostolaskujenkäsittely versio SP1

Kuva maailmasta Pakettiverkot (Luento 1)

Tietoliikenne I 2 ov syksy 2001

Laitteessa tulee olla ohjelmisto tai uudempi, tarvittaessa päivitä laite

Kertaus. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2012

Tiedonsiirto- ja rajapintastandardit

Luottamuksellinen sähköposti Trafissa

Kuljetus- ja verkkokerrokset. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2011

Miten Internet toimii?

Pertti Pennanen DOKUMENTTI 1 (5) EDUPOLI ICTPro

GroupWise Calendar Publishing Host User

Tietoliikenneohjelmointi. v. 0.01

Tekninen suunnitelma - StatbeatMOBILE

T Tietokoneverkot kertaus

K U U L A L A A K E R I LUOTTAMUKSELLINEN 1(6)

Siltojen haitat Yleisesti edut selvästi suuremmat kuin haitat

Aditro Tikon ostolaskujen käsittely versio 6.2.0

Linkkikerros, tiedonsiirron perusteet. Jyry Suvilehto T Johdatus tietoliikenteeseen ja multimediatekniikkaan kevät 2013

S Tietoliikennetekniikan perusteet. Piirikytkentäinen evoluutio. Annukka Kiiski

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

Yhteenveto / kertaus. Tuomas Aura T Johdatus Tietoliikenteeseen kevät 2013

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.3.0

Ohje luottamuksellista tietoa sisältävien sähköpostiviestien lähettämiseen ja vastaanottamiseen

Internet ja tietoverkot 2015 Harjoitus 5: (ISO/OSI-malli: Verkkokerros, TCP/IP-malli: internet-kerros)

Kuljetus- ja sovelluskerroksen tietoturvaratkaisut. Transport Layer Security (TLS) TLS:n suojaama sähköposti

Aditro Tikon ostolaskujen käsittely versio SP1

Internet ja tietoverkot 2015 Harjoitus 7: Kertaus

Lisää reititystä. Tietokoneverkot 2009 (4 op) Syksy Futurice Oy. Lisää reititystä. Jaakko Kangasharju

Office365 Tampereen yliopiston normaalikoulussa

TW- EAV510: PORTIOHJAUS (VIRTUAL SERVER) ESIMERKISSÄ VALVONTAKAMERAN KYTKEMINEN VERKKOON

Transkriptio:

Sovellukset (osa 2) ja verkkoohjelmointi CSE-C2400 Tietokoneverkot 21.1.2014 Matti Siekkinen Tietokoneverkot 2014 Sisältö adaptoitu seuraavista lähteistä: J.F. Kurose and K.W. Ross: Computer Networking: A Top-Down Approach 6th ed. -kirjan lisämateriaali, T. Lindholm, S. Tarkoma: Johdatus tietotekniikkaan-kurssin Sovelluskerros-luennon materiaali, S. Sorvakko: Tietokoneverkot-kurssin Network Programming-luennon materiaali.

Lyhenteitä ja terminologiaa P2P = peer-to-peer (vertaisverkko) DHT = Distributed Hash Table (Hajautettu tiivistetaulu) VoIP = Voice over IP (Internet-puhelu) Churn = vertaisverkossa päätelaitteiden poistuminen ja uusien saapuminen Chunk = BitTorrentissa tiedoston palanen BitTorrent = vertaisverkkoa käyttävä tiedostonjakelusovellus Tracker = BitTorrentin seurantapalvelin Torrent = joukko BitTorrentia ajavia päätelaitteita jotka jakavat samaa tiedostoa Overlay network = päätelaitteiden muodostama sovellustason looginen verkko (kuoriverkko) Topologia = verkon rakenne, miten laitteet ovat yhteydessä toisiinsa

Internet-protokollapino Ohjelmistot (software) Sähköposti Facebook Web-selain Käyttöjärjestelmä (operating system, OS) Laiteajurit (drivers) Toteuttaa hajautetun palvelun Sovelluskerros Kuljetuskerros Verkkokerros Linkkikerros Fyysinen kerros Erottaa sovellukset toisistaan yhdessä koneessa ja huolehtii yhteyksistä palvelun osien välillä Erottaa Internetverkon koneet toisistaan ja huolehtii yhteyksistä niiden välillä Sama kuin yllä, mutta lähiverkossa

Sisältö Jatkoa sovelluksille: vertaisverkot (P2P) Asiakas-palvelin vs. vertaisverkot BitTorrent Hajautetut tiivistetaulut (DHT) Verkko-ohjelmointi soketeilla TCP ja UDP soketit ja käyttö Blokkaava vs. blokkaamaton soketti Web-ohjelmointi ja WebSocket

Vertaisverkot (P2P) Toisenlainen sovellusarkkitehtuuri kuin asiakas-palvelin Ei 24/7 palvelimia Päätelaitteet viestivät suoraan toistensa kanssa Sekä asiakas että palvelin Päätelaitteet (peer) eivät aina verkossa, IP osoitteet vaihtuvat Esimerkkejä sovelluksista: tiedostonjakelu (BitTorrent) median suoratoisto (KanKan) VoIP eli IP-puhelut (Skype)

Tiedostonjakelu: asiakas-palvelin vs vertaisverkot Kauanko kestää jakaa tiedosto (F tavua) yhdeltä palvelimelta N:lle päätelaitteelle(pl)? Päätelaitteiden ylä- ja alakaistat ovat rajallisen levyiset u s : palvelimen lähetysnopeus tiedosto, koko F palvelin u s u 1 d 1 u 2 d 2 d i : päätelaitteen i latausnopeus u N d N verkko (riittävästi kaistaa) d i u i u i : päätelaitteen i lähetysnopeus 6

Tiedoston jakoon kuluva aika: asiakaspalvelin palvelin: lähettää N kopiota tiedostosta peräkkäin: yhteen lähetykseen kuluva aika: F/u s N lähet. kuluva aika: NF/u s PL (asiakas): jokainen vastaanottaa yhden kopion d min = pienin asiakkaan latausnopeus hitaimman asiakkaan latausaika: F/d min kasvaa lineaarisesti N:n funktiona time to distribute F to N clients using client-server approach D c-s > max{nf/u s,,f/d min } F u s verkko d i u i

Tiedoston jakoon kuluva aika: vertaisverkko palvelin: lähettää väh. yhden kopion yhden kopion lähetysaika: F/u s v PL: jokainen lataa yhden kopion min latausaika: F/d min u s verkko v PL: yhteensä lataavat NF tavua max lähetysnopeus (rajoittaa max latausnopeutta) on u s + Σu i F d i u i F:n jakoon N asiakkaalle kuluva aika vertaisverkon avulla D P2P > max{f/u s,,f/d min,,nf/(u s + Σu i )} kasvaa lineaarisesti N:n funktiona mutta tämä samoin, koska jokainen asiakas lisää verkon kapasiteettia

Asiakas-palvelin vs. vertaisverkko: vertailua asiakkaan lähetysnopeus = u, F/u = 1h, u s = 10u, d min u s 3.5 Minimum Distribution Time 3 2.5 2 1.5 1 0.5 P2P Client-Server vertaisverkko on itseskaalautuva (self scaling) 0 0 5 10 15 20 25 30 35 N

Sisältö Jatkoa sovelluksille: vertaisverkot (P2P) Asiakas-palvelin vs. vertaisverkot BitTorrent Hajautetut tiivistetaulut (DHT) Verkko-ohjelmointi soketeilla TCP ja UDP soketit ja käyttö Blokkaava vs. blokkaamaton soketti Web-ohjelmointi ja WebSocket

Tiedostonjakelu vertaisverkoissa: BitTorrent tiedosto jaettu 256Kb palasiin (chunks) PL:t (peers) torrentissa lähettävät ja vastaanottavat tiedostonpalasia tracker: pitää kirjaa torrentiin osallistuvista PL:sta Lissu liittyy saa listan muista PL:sta trackerilta ja alkaa vaihdella tiedostonpalasia muiden torrentin PL:n kanssa torrent: tietyn tiedoston palasia jakavien PL:n joukko

Tiedostonjakelu vertaisverkoissa: BitTorrent torrentiin liittyvä PL: ei vielä tiedostonpalasia, kerryttää lataamalla muilta rekisteröityy trackeriin saadakseen PL-listan, muodostaa yhteyden osaan PL:sta ( naapurit ) PL:t lähettävät toisilleen palasia samalla kun lataavat niitä PL voi vaihtaa naapureita joiden kanssa käy vaihtokauppaa palasista churn: PL:ita poistuu ja uusia liittyy kun koko tiedosto ladattu, PL voi joko poistua (itsekäs) tai jäädä torrentin osaksi auttamaan muita lataajia (altruistinen)

BitTorrent: tiedostonpalasten treidaus tiedostonpalasten lataaminen: eri PL:lla eri tiedostonpalaset tietyllä ajanhetkellä Lissu pyytää aika ajoin jokaiselta naapuriltaan listan palasista jotka heillä on rarest first: Lissu pyytää seuraavaksi naapurien kesken harvinaisimmat palaset palasten lähettäminen: tit-for-tat Rankkaa naapurit niiden lähetysnopeuden mukaan Lähetä palasia top-4 naapurille muut naapurit: ei latausta tai lähetystä (choked) top-4 rankkaus 10s välein Valitse 30s välein satunnainen naapuri ja ala lähettää palasia optimistic unchoke uusi naapuri voi päästä top-4:ään

BitTorrent: tit-for-tat (1) Lissu valkkaa satunnaisesti Penan ( optimistic unchoke ) (2) Lissu rankkautuu Penan top-4:een; Pena alkaa myös lähettää (3) Pena rankkautuu Lissun top-4:een Mitä nopeammin lähettää, sitä parempien naapurien kanssa voi tehdä vaihtokauppaa ja ladata tiedoston nopeammin.

Sisältö Jatkoa sovelluksille: vertaisverkot (P2P) Asiakas-palvelin vs. vertaisverkot BitTorrent Hajautetut tiivistetaulut (DHT) Verkko-ohjelmointi soketeilla TCP ja UDP soketit ja käyttö Blokkaava vs. blokkaamaton soketti Web-ohjelmointi ja WebSocket

Hajautetut tiivistetaulut (DHT) Tiivistetaulu Hajautetut tiivistetaulut Ympyrämalliset DHT:t ja kuoriverkot (overlay) Churn ja hajautetut tiivistetaulut

Yksinkertainen tietokanta Tietokanta joka tallentaa (avain, arvo) pareja: avain: hlön nimi; arvo: sotu Avain Arvo John Washington 132-54-3570 Diana Louise Jones 761-55-3791 Xiaoming Liu 385-41-0902 Rakesh Gopal 441-89-1956 Linda Cohen 217-66-5609. Lisa Kobayashi 177-23-0199 avain: elokuvan nimi; arvo: IP-osoite

Tiivistetaulu (Hash table) Numeerinen avain helpottaa käsittelyä avain = tiiviste(alkup. avain) (tiiviste=hash) Alkuperäinen avain Avain Arvo John Washington 8962458 132-54-3570 Diana Louise Jones 7800356 761-55-3791 Xiaoming Liu 1567109 385-41-0902 Rakesh Gopal 2360012 441-89-1956 Linda Cohen 5430938 217-66-5609. Lisa Kobayashi 9290124 177-23-0199

Hajautettu tiivistetaulu Eli Distributed Hash Table (DHT) Hajautetaan (avain, arvo) parit miljooniin PL:iin Parit jaetaan tasan PL:n kesken Ensimmäiset kehitetty 2001 Chord, CAN, Pastry, Tapestry: kaikki julkaistu samana vuonna Peruskäsitteen alkuperä vanhempi (hajautetut tietokannat) Valtava määrä tutkimusta sittemmin

Hajautettu tiivistetaulu: ominaisuudet Mikä tahansa PL:sta voi tehdä kyselyn tietokantaan avaimen avulla Tietokanta palauttaa vastaavan arvon Kyselyyn vastaaminen vaatii muutamien viestien lähetyksen PL:n kesken Jokainen PL pitää muistissa vain pienen osan toisista PL:sta Churn: tietokanta ei saa mennä rikki

Avain-arvo parien jakaminen Jokaisella PL:lle annetaan ID Yleensä valitaan satunnaisesti yleisesti: avain-arvo pari annetaan sen PL:n hoidettavaksi jonka oma ID on lähinnä avainta useimmiten: lähin PL on se jonka ID tulee ensimmäisenä avaimen jälkeen esim. ID avaruus {0,1,2,3,,63} 8 PL:a: 1,12,13,25,32,40,48,60 avain = 51 à PL 60 tallentaa avain = 60 à PL 60 tallentaa avain = 61 à PL 1 tallentaa

Hajautetun tiivistetaulun rakenne Rakenne/topologia määrittää sen miten kyselyt prosessoidaan Viestien reititys Ympyrässä PL tietää vain heti seuraavan naapurin 60 Chord noudattaa ympyrämallia Monia muita rakenteita on kehitetty 48 40 1 32 12 25 13

Hajautettu tiivistetaulu on kuoriverkko Kuoriverkko = overlay network Vain osajoukko fyysisen verkon PL:sta osallistuu Tieto siirtyy silti fyysisen verkon topologian mukaisesti Kuoriverkon topologiaa voidaan muokata helposti Fyysistä topologiaa ei

Kyselyn prosessointi ympyrässä Tarvitaan keskimäärin O(N) viestiä prosessoimaan kysely kun DHT:n koko on N 60 48 arvo 1 12 Mitä arvoa avain 53 vastaa? 25 13 40 32

Optimointia: Oikotiet 60 48 arvo 1 12 25 Mitä arvoa avain 53 vastaa? 13 Tradeoff: reititystaulun koko vs. lähetysten määrä! 40 32 Seuraajan ja edeltäjän lisäksi pidetään muistissa oikoteitä (shortcuts) Kyselyn prosessointi lyhenee: 6à 3 viestiä O(log N) naapuria muistissa ja O(log N) viestiä per kysely on mahdollista oikoteiden avulla

Churnin hallinta 1 3 15 4 12 5 10 8 esimerkki: PL 5 poistuu äkisti PL:t muistavat kaksi seuraavaa naapuria PL:t tarkistavat naapurien elonmerkit à ping viestin aika ajoin Seuraava naapuri poistuu à valitse sitä seuraava uudeksi seuraajaksi

15 Churnin hallinta 12 10 1 3 4 PL:t muistavat kaksi seuraavaa naapuria PL:t tarkistavat naapurien elonmerkit à ping viestin aika ajoin Seuraava naapuri poistuu à valitse sitä seuraava uudeksi seuraajaksi 8 esimerkki: PL 5 poistuu äkisti PL 4 huomaa PL 5:n poistuneen à PL 8 seuraajaksi PL 4 kysyy PL 8:lta kuka sen seuraaja on à PL 8:n seuraaja omaksi toiseksi seuraajaksi

Haasteet ja sovellutukset Sovellutuksia BitTorrent käyttää hajautettua tiivistetaulua (Kademlia) Tavallaan hajautettu trackeri: avain=torrent, arvo=iposoitteet Käytetään keskitettyjen trackerien lisäksi Cassandra NoSQL tietokanta Käyttäjiä mm. Facebook, Netflix, reddit, Twitter Amazonin Dynamo tietokanta DynamoDB korvasi Haasteita Epätäsmälliset kyselyt Range queries, esim. MUSE* Tiivistefunktiot rikkovat (tarkoituksella) alkuperäisten avainten järjestyksen Kuormantasaus Churn, heterogeeniset PL:t, epätasainen avainten suosio (kyselyt) Topologia: kuoriverkko vs. fyysinen verkko Viestien reititys maapallon laidalta toiselle ja takaisin Mobiililaitteet ja jatkuva ylläpitoliikenne à akunkesto 28

Sisältö Jatkoa sovelluksille: vertaisverkot (P2P) Asiakas-palvelin vs. vertaisverkot BitTorrent Hajautetut tiivistetaulut (DHT) Verkko-ohjelmointi soketeilla TCP ja UDP soketit ja käyttö Blokkaava vs. blokkaamaton soketti Web-ohjelmointi ja WebSocket

Verkko-ohjelmointi soketeilla tavoite: opitte ohjelmoimaan asiakas-palvelin sovelluksia jotka viestivät käyttäen soketteja soketti/pistoke: ovi sovellusprosessin ja kuljetuskerroksen protokollan (TCP tai UDP) välissä sovellus prosessi soketti sovellus prosessi sovelluskehittäjän kontrollissa kuljetus verkko linkki fyysinen Internet kuljetus verkko linkki fyysinen käyttöjärjestelmä hallitsee

Sokettirajapinta (socket API) Käyttöjärjestelmä tarjoaa rajapintoja IP-verkkoon Sokettirajapinta eli socket API (Application Programming Interface) Yleisin rajapinta nimeltä Berkeley sockets Alkuperäinen versio BSD-Unixissa v 1983 Nykyään käytännössä joka käyttöjärjestelmässä Sisältää keskeiset funktiot joiden avulla sovelluskehittäjä voi toteuttaa verkon yli viestivän sovelluksen Ohjelmien rajapinta TCP- ja UDP- pohjaiseen tiedonsiirtoon

Sokettiohjelmointi Kaksi sokettityyppiä, erilaiset kuljetuspalvelut UDP: epäluotettava datagrammipalvelu TCP: luotettava bittivirtapalvelu Esimerkkisovellus: Asiakas lukee rivin käyttäjän kirjoittamia merkkejä ja lähettää ne palvelimelle Palvelin vastaanottaa datan ja muuntaa merkit isoiksi kirjaimiksi Palvelin lähettää muunnetun tekstin asiakkaalle Asiakas vastaanottaa muunnetun tekstin ja printtaa sen näytölle

Sokettiohjelmointi UDP:llä UDP ei luo yhteyttä asiakkaan ja palvelimen välille ei kättelyä ennen tiedonsiirtoa lähettäjän pitää määrittää vastaanottajan IP-osoite (tai nimià DNS) ja porttinumero jokaisessa viestissä vastaanottaja näkee lähettäjän IP osoitteen ja porttinumeron saapuneesta paketista à tilaton protokolla UDP on epäluotettava Viestit ei välttämättä mene perille Viestit voi saapua eri järjestyksessä kuin missä ne lähetettiin Sovelluksen näkökulmasta epäluotettava tiedonsiirto viestimuotoisena (datagrammi) asiakkaan ja palvelimen välillä

Asiakas/palvelin UDP-soketit palvelin (osoitteessa palvelinip) asiakas luo soketti, portti= x: serversocket = socket(af_inet,sock_dgram) lue datagrammi soketista serversocket kirjoita vastaus sokettiin serversocket lisää mukaan asiakkaan osoite, porttinumero luo soketti: clientsocket = socket(af_inet,sock_dgram) Luo datagrammi käyttäen palvelimen IP-osoitetta ja porttia x; lähetä datagrammi clientsocketilla lue datagrammi soketista clientsocket sulje clientsocket

Esimerkkisovellus: UDP-asiakas sisällytä Pythonin socket kirjasto luo UDP-soketti tallenna input viesti Liitä palvelimen osoite ja porttinro viestiin; lähetä sokettiin lue vastaus soketista ja tallenna string muuttujaan printtaa vastaus ja sulje soketti Python UDPClient from socket import * servername = hostname serverport = 12000 clientsocket = socket(socket.af_inet, socket.sock_dgram) message = raw_input( Input lowercase sentence: ) clientsocket.sendto(message,(servername, serverport)) modifiedmessage, serveraddress = clientsocket.recvfrom(2048) print modifiedmessage clientsocket.close()

Esimerkkisovellus: UDP-palvelin Python UDPServer luo UDP soketti sido soketti paikalliseen porttiin 12000 ikuinen silmukka lue viesti ja asiakkaan IP osoite ja porttinro soketista lähetä muokattu viesti takaisin asiakkaalle from socket import * serverport = 12000 serversocket = socket(af_inet, SOCK_DGRAM) serversocket.bind(('', serverport)) print The server is ready to receive while 1: message, clientaddress = serversocket.recvfrom(2048) modifiedmessage = message.upper() serversocket.sendto(modifiedmessage, clientaddress)

Sokettiohjelmointi TCP:llä Asiakas ottaa yhteyttä palvelimeen Palvelinprosessi pitää olla valmiiksi käynnissä Palvelin on luonut soketin joka vastaanottaa uuden asiakkaan Asiakkaan soketti muodostaa TCP yhteyden Sovelluskoodi spesifioi palvelimen IP-osoitteen ja TCP porttinron Palvelin luo yhteydenmuodostuksen aikana uuden soketin prosessille joka palvelee kyseistä asiakasta Mahdollistaa usean samanaikaisen asiakkaan Lähettäjän IP-osoite ja porttinro erottaa asiakkaat toisistaan Sovelluksen näkökulmasta TCP soketti on luotettava bittivirran siirtopalvelu 2-37

Asiakas/palvelin TCP-soketit palvelin (osoite hostid) luo soketti, portti=x, saapuville asiakkaille: serversocket = socket() asiakas odota saapuvaa asiakasta connectionsocket = serversocket.accept() lue kysely soketista connectionsocket kirjoita vastaus sokettiin connectionsocket sulje connectionsocket TCP yhteyden muodostus luo soketti, muodosta yhteys: osoite=hostid, portti=x clientsocket = socket() lähetä kysely sokettiin clientsocket lue vastaus soketista clientsocket sulje clientsocket

Esimerkkisovellus: TCP-asiakas Python TCPClient luo TCP soketti, palvelimen portti 12000 Ei tarvita palvelimen nimeä/osoitetta/porttia from socket import * servername = servername serverport = 12000 clientsocket = socket(af_inet, SOCK_STREAM) clientsocket.connect((servername,serverport)) sentence = raw_input( Input lowercase sentence: ) clientsocket.send(sentence) modifiedsentence = clientsocket.recv(1024) print From Server:, modifiedsentence clientsocket.close()

Esimerkkisovellus: TCP-palvelin Python TCPServer luo TCP soketti uuden asiakkaan vastaanottamiseksi palvelin alkaa kuunnella saapuvia TCP asiakkaita ikuinen luuppi palvelin blokkaa accept() funktiossa kunnes uusi asiakas saapuu, luodaan uusi soketti palautusarvona lue tavut soketista (muttei läh. osoitetta kuten UDP soketin kanssa) sulje asiakkaan soketti (ei vastaanottosokettia) from socket import * serverport = 12000 serversocket = socket(af_inet,sock_stream) serversocket.bind((,serverport)) serversocket.listen(1) print The server is ready to receive while 1: connectionsocket, addr = serversocket.accept() sentence = connectionsocket.recv(1024) capitalizedsentence = sentence.upper() connectionsocket.send(capitalizedsentence) connectionsocket.close()

Blokkaava soketti Normaalisti soketti on blokkaava Esim. kaikki aiemmat esimerkit Ohjelman suoritus pysähtyy kunnes jotain tapahtuu, esim: accept() kunnes uusi asiakas saapuu (yhteysavaus) recv() kunnes uutta dataa saapuu Hyöty: helppo ohjelmoida Haitta: vain yksi aktiivinen soketti per säie (thread) Monta sokettia vaatii yhtä monta threadia à overhead Palvelin tai vertaisverkkoasiakas 41

Blokkaamaton soketti Soketti voidaan määritellä blokkaamattomaksi Esim. fcntl(sockfd, F_SETFL, O_NONBLOCK); Nyt esim. read() ei blokkaa Jos ei dataa, palauttaa -1 ja asettaa errno == EAGAIN tai EWOULDBLOCK Etu: voidaan hoitaa monta sokettia per säie Haitta: Sokettien jatkuva pollaaminen kuormittaa CPU:ta Fiksumpikin tapa on olemassa Tarvitaan uusi funktio: select() 42

Blokkaamaton soketti: select() select()-funktion avulla voidaan tarkistaa monta sokettia kerralla Blokkaa kunnes: Jossain soketeista tapahtuu jotakin TAI Ajastin kuluu loppuun O_NONBLOCK ei vaikutusta Palauduttuaan on muokannut bittikartat Esim. merkkaa readfds ne joista voi lukea bittikartta kirjoitettavista FD:sta (soketit) int select(int ndfs, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); suurin käytetty file bittikartta luettavista descriptor (FD) nro FD:sta (soketit) poikkeustilanteet kauanko enintään odotetaan (NULL ikuisesti, 0 ei ollenkaan) 43

Vielä soketeista Asiakasohjelma on mahdollista tehdä ilman sokettiohjelmointiakin Käytetään valmiita kirjastoja jotka piilottaa soketit Kirjastokoodi hoitaa tarvittavat soketit automaattisesti Esim. java.net API: URL luokan openstream() metodi Kirjastokoodin pitää yleensä tukea asiakas-palvelin protokollaa URL voidaan käyttää esim. HTTP-asiakkaan ohjelmoinnissa 44

Sisältö Jatkoa sovelluksille: vertaisverkot (P2P) Asiakas-palvelin vs. vertaisverkot BitTorrent Hajautetut tiivistetaulut (DHT) Verkko-ohjelmointi soketeilla TCP ja UDP soketit ja käyttö Blokkaava vs. blokkaamaton soketti Web-ohjelmointi ja WebSocket

Web-ohjelmointi Isohko joukko paradigmoja, tekniikoita, teknologioita, protokollia Ajax, REST, SOAP, XML, JSON, SPDY, HTML5, JavaScript CSS, WebRTC, Websocket Kurssi T-110.5140 Network Application Frameworks käsittelee tarkemmin Websocket Kehitetty osana HTML5:ttä Kätevämpi soketti Web-ohjelmointiin Toteutetaan selaimissa ja Web-palvelimissa Korkeamman tason abstraktio kuin TCP/UDP-soketti Mahdollistaa kahdensuuntaisen viestinnän 46

Miksi WebSocket? HTTP on kysely/vastaus protokolla à soveltuu asiakaslähtöiseen tiedon hakemiseen Web sivujen lataus: HTTP GET (+sivun URL), HTTP 200 OK (+sivun sisältö) HTTP vaatii aina kyselyn ennen vastausta à palvelin ei voi lähettää mitään spontaanisti Monet modernit Web-sovellukset tarvitsevat palvelinlähtöisen push -mekanismin Reaaliaikaiset päivitykset ja synkronointi Pikaviestintä ja some, sähköposti, pelit, sensoridata, 47

Palvelimen push HTTP:n avulla Polling : Asiakas tekee jatkuvasti kyselyjä Turhaa kuormaa palvelimelle Kauhea overhead, ei skaalaudu Long polling : Palvelin viivyttää vastausta jos uutta dataa ei ole Vaatii silti kyselyn per vastaus à lisäliikenne ja mahd. viive Vastauksessa aina HTTP otsakkeet à lisäliikenne HTTP otsakkeet suhteellisen isot (voi olla 8KB) à hyvin merkittävä pienille viestille Ei sovellu lyhyin väliajoin puskevilla sovelluksilla (esim. pelit) 48

WebSocket: aito push Aloitetaan HTTP protokollalla ja vaihdetaan WebSocketiin HTTP Upgrade otsake Full-duplex viestintä Kumpikin osapuoli voi lähettää viestin koska vaan Websocketin kautta Lähetetään vain data, ei HTTP-headereita 2-tavun framing Websocket toimii TCP:n päällä Yksi TCP yhteys per Websocket TCP-yhteyttä tarkkaillaan ja pidetään elossa Heartbeat-viesteillä (timeout) Alla on siis käytössä TCP-soketti! 49

WebSocket: JavaScript esimerkki // luodaan uusi WebSocket-objekti var socket = new WebSocket("ws://echo.websocket.org? encoding=text"); // Lähetetään viesti socket.send('hello, WebSocket'); // Callback-funktiot tapahtumille socket.onopen = function(event) { socket.send('hello, WebSocket'); }; socket.onmessage = function(event) { alert(event.data); } socket.onclose = function(event) { alert('closed'); } 50

Yhteenveto Sovellusarkkitehtuureita on erilaisia Asiakas-palvelin Vertaisverkot Pilvipalvelut voitaisiin vielä erotella näistä Vertaisverkot Self scaling ominaisuus BitTorrentissa insentiivit jakaa rakennettu protokollaan Hajautettu tiivistetaulu (DHT) on avain-arvo tietokanta ja muodostaa kuoriverkon Sokettiohjelmointi Sokettirajapinta sovellusten ja kulj. kerroksen välissä TCP ja UDP soketeilla ohjelmoidaan hieman eri tavalla select() funktion avulla voidaan käsitellä monia soketteja WebSocket on korkeamman tason abstraktio Toteutus käyttää TCP sokettia 51

Internetin protokollapino Sovelluskerros (application) Kuljetuskerros (transport) Verkkokerros (network) Linkkikerros (link layer) Fyysinen kerros (physical) Ensi viikon luento Sovellukset (viesti, message) Päätepiste mille sovellukselle päätelaitteessa? (segmentti, segment) Päätelaite minne Internet-verkossa? (paketti, packet) Päätelaite mille laitteelle lähiverkossa? (kehys, frame) Bitit piuhaan/ilmaan (fyysisenä signaalina) 52