luento 3: sovelluskerros verkkosovelluksen periaatteet ...tietoliikenteen perusteet, syksy 2016 timo...

71
Tietoliikenteen perusteet, syksy 2016 Timo Karvi 16.2.2005 Tietoliikenteen perusteet Luento 3: Sovelluskerros verkkosovelluksen periaatteet, WWW, pistoke Syksy 2017, Timo Karvi

Upload: others

Post on 13-Jul-2020

3 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 1622005

Tietoliikenteen perusteet

Luento 3 Sovelluskerros verkkosovelluksen periaatteet WWW pistoke

Syksy 2017 Timo Karvi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 2

Laumlhettaumljauml (source)

Sovellusk

Kuljetusk

Verkkok

Linkkik

Fyysinen k

Ht Hn M

segmentti Ht

datagrammi

Vastaanottaja (destination)

application

transport

network

link

physical

Ht Hn Hl M

Ht Hn M

Ht M

M

network

link

physical

linkki

fyysinen

Ht Hn Hl M

Ht Hn M

Ht Hn M

Ht Hn Hl M

Reititin

(router)

Kytkin

(switch)

sanoma M

M

kehys

segment

datagram

frame

message

Luennon sisaumlltoumlauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 3

Sisaumlltoumlauml

bull Verkkosovellusten periaatteet

bull World Wide Web ja HTTP

bull Tiedostonsiirto ja FTP

bull Saumlhkoumlposti ja SMTP IMAP

POP3

bull Nimipalvelu ja DNS

bull Vertaistoimijat (peer-to-peer)

bull Pistoke ja sen kaumlyttouml

Oppimistavoitteet

- Osaa selittaumlauml

asiakaspalvelijandashmalliin

perustuvien verkkosovellusten

toimintaperiaatteet

-Tuntee sovellusprotokollien

syntaksia ja semantiikkaa

- Osaa selittaumlauml wwwn ja

saumlhkoumlpostin toimintaideat

Tietoliikenteen perusteet syksy 2016 Timo Karvi 4

VERKKOSOVELLUSTEN PERIAATTEET

Tietoliikenteen perusteet syksy 2016 Timo Karvi 5

Verkkosovellus

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Fig 21 [KR12] bull Sovelluksen ohjelmat eri

isaumlntaumlkoneissa

ndash esim www-selain ja www-palvelin

bull Sovellusprotokolla kuvaa naumliden

sanomanvaumllityksen

ndash Syntaksi semantiikka jaumlrjestys

bull Sanomat vaumllitetaumlaumln kaumlyttaumlen

verkon tarjoamaa kuljetuspalvelua

ndash osa jaumlrjestelmaumln perusrakennetta

ndash sovelluksista riippumatonta

bull Reititys tapahtuu vasta

verkkotasolla mutta

sovellustasolla tiedettaumlvauml osoite

Tietoliikenteen perusteet syksy 2016 Timo Karvi 6

Sovellusarkkitehtuuri

palvelupyyntouml

vastaus

Google e-Bay

Facebook

YouTube

Amazon

bull Asiakas-palvelija-malli (esim selain ja www-palvelin)

ndash Aina toiminnassa oleva palvelinohjelma jolla kiinteauml

tunnettu IP-osoite

ndash Asiakasohjelmat ottavat yhteyttauml palvelimeen ja pyytaumlvaumlt

siltauml palvelua

bull Vertaistoimijamalli (esim BitTorrent eMule Skype)

ndash Vertaisisaumlnnaumlt kommunikoivat suoraan keskenaumlaumln

ndash Ei tarvitse olla aina toiminnassa IP-osoite voi muuttua

ndash Jokainen toimii sekauml palvelijana ettauml asiakkaana

bull Hybridimalli (esim Napster pikaviestimet )

Tietoliikenteen perusteet syksy 2016 Timo Karvi 7

Asiakas-palvelin arkkitehtuuri

Palvelin (server)

bull Aina saatavilla (247)

bull Pysyvauml IP-osoite

bull Palvelinkeskukset (data

centers)

Asiakkaat (clients)

bull Ottavat yhteyttauml palvelimeen

bull Verkkoyhteys voi vaihdella

bull Usein dynaaminen IP-osoite

bull Eivaumlt kommunikoi suoraan

toistensa kanssa

clientserver

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 2: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 2

Laumlhettaumljauml (source)

Sovellusk

Kuljetusk

Verkkok

Linkkik

Fyysinen k

Ht Hn M

segmentti Ht

datagrammi

Vastaanottaja (destination)

application

transport

network

link

physical

Ht Hn Hl M

Ht Hn M

Ht M

M

network

link

physical

linkki

fyysinen

Ht Hn Hl M

Ht Hn M

Ht Hn M

Ht Hn Hl M

Reititin

(router)

Kytkin

(switch)

sanoma M

M

kehys

segment

datagram

frame

message

Luennon sisaumlltoumlauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 3

Sisaumlltoumlauml

bull Verkkosovellusten periaatteet

bull World Wide Web ja HTTP

bull Tiedostonsiirto ja FTP

bull Saumlhkoumlposti ja SMTP IMAP

POP3

bull Nimipalvelu ja DNS

bull Vertaistoimijat (peer-to-peer)

bull Pistoke ja sen kaumlyttouml

Oppimistavoitteet

- Osaa selittaumlauml

asiakaspalvelijandashmalliin

perustuvien verkkosovellusten

toimintaperiaatteet

-Tuntee sovellusprotokollien

syntaksia ja semantiikkaa

- Osaa selittaumlauml wwwn ja

saumlhkoumlpostin toimintaideat

Tietoliikenteen perusteet syksy 2016 Timo Karvi 4

VERKKOSOVELLUSTEN PERIAATTEET

Tietoliikenteen perusteet syksy 2016 Timo Karvi 5

Verkkosovellus

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Fig 21 [KR12] bull Sovelluksen ohjelmat eri

isaumlntaumlkoneissa

ndash esim www-selain ja www-palvelin

bull Sovellusprotokolla kuvaa naumliden

sanomanvaumllityksen

ndash Syntaksi semantiikka jaumlrjestys

bull Sanomat vaumllitetaumlaumln kaumlyttaumlen

verkon tarjoamaa kuljetuspalvelua

ndash osa jaumlrjestelmaumln perusrakennetta

ndash sovelluksista riippumatonta

bull Reititys tapahtuu vasta

verkkotasolla mutta

sovellustasolla tiedettaumlvauml osoite

Tietoliikenteen perusteet syksy 2016 Timo Karvi 6

Sovellusarkkitehtuuri

palvelupyyntouml

vastaus

Google e-Bay

Facebook

YouTube

Amazon

bull Asiakas-palvelija-malli (esim selain ja www-palvelin)

ndash Aina toiminnassa oleva palvelinohjelma jolla kiinteauml

tunnettu IP-osoite

ndash Asiakasohjelmat ottavat yhteyttauml palvelimeen ja pyytaumlvaumlt

siltauml palvelua

bull Vertaistoimijamalli (esim BitTorrent eMule Skype)

ndash Vertaisisaumlnnaumlt kommunikoivat suoraan keskenaumlaumln

ndash Ei tarvitse olla aina toiminnassa IP-osoite voi muuttua

ndash Jokainen toimii sekauml palvelijana ettauml asiakkaana

bull Hybridimalli (esim Napster pikaviestimet )

Tietoliikenteen perusteet syksy 2016 Timo Karvi 7

Asiakas-palvelin arkkitehtuuri

Palvelin (server)

bull Aina saatavilla (247)

bull Pysyvauml IP-osoite

bull Palvelinkeskukset (data

centers)

Asiakkaat (clients)

bull Ottavat yhteyttauml palvelimeen

bull Verkkoyhteys voi vaihdella

bull Usein dynaaminen IP-osoite

bull Eivaumlt kommunikoi suoraan

toistensa kanssa

clientserver

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 3: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 3

Sisaumlltoumlauml

bull Verkkosovellusten periaatteet

bull World Wide Web ja HTTP

bull Tiedostonsiirto ja FTP

bull Saumlhkoumlposti ja SMTP IMAP

POP3

bull Nimipalvelu ja DNS

bull Vertaistoimijat (peer-to-peer)

bull Pistoke ja sen kaumlyttouml

Oppimistavoitteet

- Osaa selittaumlauml

asiakaspalvelijandashmalliin

perustuvien verkkosovellusten

toimintaperiaatteet

-Tuntee sovellusprotokollien

syntaksia ja semantiikkaa

- Osaa selittaumlauml wwwn ja

saumlhkoumlpostin toimintaideat

Tietoliikenteen perusteet syksy 2016 Timo Karvi 4

VERKKOSOVELLUSTEN PERIAATTEET

Tietoliikenteen perusteet syksy 2016 Timo Karvi 5

Verkkosovellus

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Fig 21 [KR12] bull Sovelluksen ohjelmat eri

isaumlntaumlkoneissa

ndash esim www-selain ja www-palvelin

bull Sovellusprotokolla kuvaa naumliden

sanomanvaumllityksen

ndash Syntaksi semantiikka jaumlrjestys

bull Sanomat vaumllitetaumlaumln kaumlyttaumlen

verkon tarjoamaa kuljetuspalvelua

ndash osa jaumlrjestelmaumln perusrakennetta

ndash sovelluksista riippumatonta

bull Reititys tapahtuu vasta

verkkotasolla mutta

sovellustasolla tiedettaumlvauml osoite

Tietoliikenteen perusteet syksy 2016 Timo Karvi 6

Sovellusarkkitehtuuri

palvelupyyntouml

vastaus

Google e-Bay

Facebook

YouTube

Amazon

bull Asiakas-palvelija-malli (esim selain ja www-palvelin)

ndash Aina toiminnassa oleva palvelinohjelma jolla kiinteauml

tunnettu IP-osoite

ndash Asiakasohjelmat ottavat yhteyttauml palvelimeen ja pyytaumlvaumlt

siltauml palvelua

bull Vertaistoimijamalli (esim BitTorrent eMule Skype)

ndash Vertaisisaumlnnaumlt kommunikoivat suoraan keskenaumlaumln

ndash Ei tarvitse olla aina toiminnassa IP-osoite voi muuttua

ndash Jokainen toimii sekauml palvelijana ettauml asiakkaana

bull Hybridimalli (esim Napster pikaviestimet )

Tietoliikenteen perusteet syksy 2016 Timo Karvi 7

Asiakas-palvelin arkkitehtuuri

Palvelin (server)

bull Aina saatavilla (247)

bull Pysyvauml IP-osoite

bull Palvelinkeskukset (data

centers)

Asiakkaat (clients)

bull Ottavat yhteyttauml palvelimeen

bull Verkkoyhteys voi vaihdella

bull Usein dynaaminen IP-osoite

bull Eivaumlt kommunikoi suoraan

toistensa kanssa

clientserver

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 4: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 4

VERKKOSOVELLUSTEN PERIAATTEET

Tietoliikenteen perusteet syksy 2016 Timo Karvi 5

Verkkosovellus

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Fig 21 [KR12] bull Sovelluksen ohjelmat eri

isaumlntaumlkoneissa

ndash esim www-selain ja www-palvelin

bull Sovellusprotokolla kuvaa naumliden

sanomanvaumllityksen

ndash Syntaksi semantiikka jaumlrjestys

bull Sanomat vaumllitetaumlaumln kaumlyttaumlen

verkon tarjoamaa kuljetuspalvelua

ndash osa jaumlrjestelmaumln perusrakennetta

ndash sovelluksista riippumatonta

bull Reititys tapahtuu vasta

verkkotasolla mutta

sovellustasolla tiedettaumlvauml osoite

Tietoliikenteen perusteet syksy 2016 Timo Karvi 6

Sovellusarkkitehtuuri

palvelupyyntouml

vastaus

Google e-Bay

Facebook

YouTube

Amazon

bull Asiakas-palvelija-malli (esim selain ja www-palvelin)

ndash Aina toiminnassa oleva palvelinohjelma jolla kiinteauml

tunnettu IP-osoite

ndash Asiakasohjelmat ottavat yhteyttauml palvelimeen ja pyytaumlvaumlt

siltauml palvelua

bull Vertaistoimijamalli (esim BitTorrent eMule Skype)

ndash Vertaisisaumlnnaumlt kommunikoivat suoraan keskenaumlaumln

ndash Ei tarvitse olla aina toiminnassa IP-osoite voi muuttua

ndash Jokainen toimii sekauml palvelijana ettauml asiakkaana

bull Hybridimalli (esim Napster pikaviestimet )

Tietoliikenteen perusteet syksy 2016 Timo Karvi 7

Asiakas-palvelin arkkitehtuuri

Palvelin (server)

bull Aina saatavilla (247)

bull Pysyvauml IP-osoite

bull Palvelinkeskukset (data

centers)

Asiakkaat (clients)

bull Ottavat yhteyttauml palvelimeen

bull Verkkoyhteys voi vaihdella

bull Usein dynaaminen IP-osoite

bull Eivaumlt kommunikoi suoraan

toistensa kanssa

clientserver

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 5: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 5

Verkkosovellus

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Fig 21 [KR12] bull Sovelluksen ohjelmat eri

isaumlntaumlkoneissa

ndash esim www-selain ja www-palvelin

bull Sovellusprotokolla kuvaa naumliden

sanomanvaumllityksen

ndash Syntaksi semantiikka jaumlrjestys

bull Sanomat vaumllitetaumlaumln kaumlyttaumlen

verkon tarjoamaa kuljetuspalvelua

ndash osa jaumlrjestelmaumln perusrakennetta

ndash sovelluksista riippumatonta

bull Reititys tapahtuu vasta

verkkotasolla mutta

sovellustasolla tiedettaumlvauml osoite

Tietoliikenteen perusteet syksy 2016 Timo Karvi 6

Sovellusarkkitehtuuri

palvelupyyntouml

vastaus

Google e-Bay

Facebook

YouTube

Amazon

bull Asiakas-palvelija-malli (esim selain ja www-palvelin)

ndash Aina toiminnassa oleva palvelinohjelma jolla kiinteauml

tunnettu IP-osoite

ndash Asiakasohjelmat ottavat yhteyttauml palvelimeen ja pyytaumlvaumlt

siltauml palvelua

bull Vertaistoimijamalli (esim BitTorrent eMule Skype)

ndash Vertaisisaumlnnaumlt kommunikoivat suoraan keskenaumlaumln

ndash Ei tarvitse olla aina toiminnassa IP-osoite voi muuttua

ndash Jokainen toimii sekauml palvelijana ettauml asiakkaana

bull Hybridimalli (esim Napster pikaviestimet )

Tietoliikenteen perusteet syksy 2016 Timo Karvi 7

Asiakas-palvelin arkkitehtuuri

Palvelin (server)

bull Aina saatavilla (247)

bull Pysyvauml IP-osoite

bull Palvelinkeskukset (data

centers)

Asiakkaat (clients)

bull Ottavat yhteyttauml palvelimeen

bull Verkkoyhteys voi vaihdella

bull Usein dynaaminen IP-osoite

bull Eivaumlt kommunikoi suoraan

toistensa kanssa

clientserver

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 6: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 6

Sovellusarkkitehtuuri

palvelupyyntouml

vastaus

Google e-Bay

Facebook

YouTube

Amazon

bull Asiakas-palvelija-malli (esim selain ja www-palvelin)

ndash Aina toiminnassa oleva palvelinohjelma jolla kiinteauml

tunnettu IP-osoite

ndash Asiakasohjelmat ottavat yhteyttauml palvelimeen ja pyytaumlvaumlt

siltauml palvelua

bull Vertaistoimijamalli (esim BitTorrent eMule Skype)

ndash Vertaisisaumlnnaumlt kommunikoivat suoraan keskenaumlaumln

ndash Ei tarvitse olla aina toiminnassa IP-osoite voi muuttua

ndash Jokainen toimii sekauml palvelijana ettauml asiakkaana

bull Hybridimalli (esim Napster pikaviestimet )

Tietoliikenteen perusteet syksy 2016 Timo Karvi 7

Asiakas-palvelin arkkitehtuuri

Palvelin (server)

bull Aina saatavilla (247)

bull Pysyvauml IP-osoite

bull Palvelinkeskukset (data

centers)

Asiakkaat (clients)

bull Ottavat yhteyttauml palvelimeen

bull Verkkoyhteys voi vaihdella

bull Usein dynaaminen IP-osoite

bull Eivaumlt kommunikoi suoraan

toistensa kanssa

clientserver

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 7: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 7

Asiakas-palvelin arkkitehtuuri

Palvelin (server)

bull Aina saatavilla (247)

bull Pysyvauml IP-osoite

bull Palvelinkeskukset (data

centers)

Asiakkaat (clients)

bull Ottavat yhteyttauml palvelimeen

bull Verkkoyhteys voi vaihdella

bull Usein dynaaminen IP-osoite

bull Eivaumlt kommunikoi suoraan

toistensa kanssa

clientserver

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 8: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 8

Vertaisverkko (P2P) arkkitehtuuri

bull Ei keskitettyauml palvelinta

bull Vertaisisaumlnnaumlt kommunikoivat

suoraan keskenaumlaumln

bull pyytaumlvaumlt palveluja toisiltaan ja

antavat palveluja toisilleen

ndash Skaalautuu automaattisestindash uudet

vertaisisaumlnnaumlt tuovat mukanaan

sekauml uutta palvelukysyntaumlauml ettauml

uutta palvelukapasiteettia

bull Vertaisisaumlntiauml liittyy ja poistuu

IP-osoitekin voi vaihtua

ndash Verkon hallinta on monimutkaista

peer-peer

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 9: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 9

Prosessien kommunikoinnista

prosessi sovellus jota

suoritetaan isaumlntaumlkoneella

bull Prosessit samalla koneella

prosessien vaumllinen

kommunikointi (inter-process

communication) joko yhteistauml

muistia tai viestien vaihtoa

kaumlyttaumlen (KJ maumlaumlrittelee

vaihtoehdot)

bull Prosessit eri koneilla

Kommunikointi aina viestien

(messages) vaihdolla

Asiakasprosessi ottaa

yhteyttauml aloittaa

Palvelinprosessi odottaa

yhteydenottoa

HUOM vertaisisaumlnnillauml

on sekauml asiakas- ettauml

palvelinprosesseja

asiakkaat palvelimet

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 10: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 10

Sovelluksen rajapinta tieto-liikenteeseen Pistokkeet (sockets)

bull Prosessi laumlhettaumlauml ja vastaanottaa sanomia (messages)

pistokkeen (socket) kautta

bull Pistoketta voi ajatella ovena

ndash Laumlhettaumlvauml prosessi tyrkkaumlauml sanoman ulos ovesta

ndash Laumlhettaumlvauml prosessi luottaa ettauml oven takana oleva

kuljetuspalvelu toimittaa sanoman vastaanottajan ovelle

Internet

controlled

by OS

controlled by app developer

transport

application

physical

link

network

process

transport

application

physical

link

network

process socket

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 11: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 11

bull Pistoke (socket) (verkkosovelluksen ohjelmointirajapinta API)

bull yhteyden muodostaminen lue kirjoita sanoma

bull Prosessi kirjoittaa verkkoon ja lukee verkosta laumlhes samalla tavoin kuin

kirjoittaisi tiedostoon ja lukisi tiedostosta

bull lsquoluukkursquo tai lsquoovirsquo josta dataa sisaumlaumln ulos

bull Laumlhetys (send) anna sanoma KJlle

bull Vastaanotto (receive) ota sanoma KJltauml

bull Sovellus odottaa jos sanoma ei ole vielauml saapunut

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Ohjelmoija valitsee kaumlyttaumlaumlkouml KJ kuljetuskerroksella yhteydellistauml vai

yhteydetoumlntauml palvelua

Sovelluksen rajapinta tieto-liikenteeseen Pistoke (socket)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 12: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 12

Prosessien kommunikointi TCP-pistokkeita kaumlyttaumlen

TCP

puskurit

Sovellus

prosessi

pistoke

Internet

TCP

puskurit

pistoke

Sovellus prosessi

Sovelluksen tekijaumln

alue

KJ KJ

KJ = kaumlyttoumljaumlrjestelmauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 13: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 13

Laumlhtevauml liikenne

bull Prosessi pyytaumlauml kuljetuspalvelua

KJn palvelupyynnoumlllauml send

bull Kuljetuskerros hoitaa omat

tehtaumlvaumlnsauml ja kutsuu

verkkokerroksen rutiinia

bull Verkkokerros tekee hommansa ja

kutsuu laiteajurin rutiinia

bull Laiteajuri vie datan ja komennot

verkkokortin ohjaimen rekistereihin

bull Verkkokortti siirtaumlauml bitit linkille

(linkkikerros ja fyysinen siirto)

Tuleva liikenne

bull Verkkokortti ottaa vastaa linkiltauml tulevat

bitit (fyysinen siirto ja linkkikerros)

bull ja aiheuttaa keskeytyksen

bull KJn laiteajuri siirtaumlauml bitit verkkokortilta

keskusmuistiin

bull Ajuri kutsuu verkkokerroksen rutiinia

joka suorittaa omat toimintonsa

bull Verkkokerros kutsuu kuljetuskerroksen

rutiinia joka tekee omat toimensa

bull Sanoma prosessille vasta kun se sitauml

pyytaumlauml palvelupyynnoumlllauml receive

KJn rajapinta laitteistoon

KJn kannalta tietoliikenne normaalia siirraumlntaumlauml (IOta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 14: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 14

bull Sanomissa oltava laumlhettaumljaumln ja vastaanottajan IP-

osoite ja porttinumero

bull IP-osoite rarr oikea kone

bull koneen (verkkokortin) yksiloumlivauml 32-bittinen tunniste

bull osoitteen verkko-osa yksiloumli verkon

bull osoitteen koneosa yksiloumli koneen verkossa

bull Porttinumero rarr oikea prosessi

bull Yleisillauml palveluilla standardoidut tunnetut porttinumerot

bull www-palvelin kuuntelee porttia 80

bull Postipalvelin kuuntelee porttia 25

bull KJ osaa liittaumlauml porttinumeron prosessiin

Osoittaminen

wwwianaorg

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 15: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 15

looginen lsquopaumlaumlstauml-paumlaumlhaumlnrsquo yhteys

asiakas-prosesseja palvelinprosessi

Portteja

(portti-

numero)

2184815135 21852745

80 3256 1024 1068

kuljetus-

yhteys

Sovellus

-yhteys HTTP

TCPUDP

Esim verkko kone

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 16: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 16

Kuljetuskerroksen palveluja sovelluksille

bull Tiedon eheys (data integrity)

bull Jotkut sovellukset tarvitsevat taumlysin luotettavan tiedon siirron (kuten www saumlhkoumlposti tiedostojensiirto)

bull Jotkut taas sietaumlvaumlt haumlvioumlitauml tiedonsiirrossa (audio)

bull Ajoitukset (timing) bull Jotkut sovellukset

vaativat lyhyitauml siirtoviipeitauml (IP-puhelut verkkopelit)

bull Suoritusteho (throughput)

bull Jotkut sovellukset tarvitsevat tietyn minimikapasiteetin toimiakseen (multimedia)

bull Jotkut sopeutuvat siihen kapasiteettiin jonka saavat

bull Turvallisuus (security)

bull Tiedon suojaus salaus eheys hellip

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 17: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 17

Kuljetuspalvelun laatuvaatimuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 18: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 18

Kuljetusprotokollat TCP (Transmission Control Protocol) [RFC 793]

bull Yhteydellinen palvelu (connection-oriented)

bull Yhteyden muodostus ennen datan siirtoa (handshaking)

bull Kaksisuuntainen TCP-yhteys (full-duplex)

bull Yhteyden purku (shutdown)

bull Luotettava kuljetuspalvelu

bull Jaumlrjestyksen saumlilyttaumlvauml tavuvirta sovellukselle

bull segmenttinumerot kuittaukset uudelleenlaumlhetykset

bull Vuonvalvonta (flow control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos vastaanottaja ei ehdi kaumlsitellauml

bull Ruuhkanvalvonta (congestion control)

bull Laumlhettaumljauml hiljentaumlauml vauhtia jos reitittimet eivaumlt ehdi kaumlsitellauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 19: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 19

Kuljetusprotokollat UDP (User Datagram Protocol) [RFC768]

bull Kevyt kuljetuspalvelu pieni yleisrasite

bull Ei yhteyden muodostusta eikauml purkua

bull Ei takuita sanoman perillemenosta

bull Sanoman segmentit vain laumlhetetaumlaumln verkkoon

bull Sanoman segmenttejauml voi puuttua ja ne voivat saapua

epaumljaumlrjestyksessauml virheelliset yleensauml hylaumltaumlaumln

bull Ei vuonvalvontaa ei ruuhkanvalvontaa

bull UDP voi laumlhettaumlauml niin paljon kuin haluaa

bull Huom TCP ja UDP ei takuita siirtonopeudelle eikauml

viipeelle =gt ei mitaumlaumln aikatakuita (ns rsquobest effortrsquo-palvelu)

bull Ei myoumlskaumlaumln datan salakirjoitusta =gt SSL (Secure Socket Layer)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 20: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 20

Kumpi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 21: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 21

TCPn turvallisuus ja suojaaminen

TCP amp UDP

bull Ei salausta

bull Pistokkeelle annettu

selvaumlkielinen salasana

kulkee Internetissauml

salaamattomana

SSL

bull Tarjoaa salatun TCP-

yhteyden

bull Datan eheys

bull Osapuolten todennus

SSL on sovelluskerroksella

bull Sovellus kaumlyttaumlauml SSL-

kirjastoa joka kaumlyttaumlauml TCPtauml

SSL-pistokerajapinta (API)

Pistokkeelle annettu

selvaumlkielinen salasana

(cleartext passwd) kulkee

Internetissauml salattuna

Luku 7 (Luento 11 tai 12)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 22: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 22

WORLD WIDE WEB WWW HTTP

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 23: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 23

WWW ja HTML (Hyper Text Markup Language)

bull WWW-sivu WWW-dokumentti

bull HTML-tekstiauml jossa viittauksia muihin objekteihin

bull muu HTML-tiedosto kuva- tai aumlaumlnitiedosto Java applet

hellip

bull Sivu muodostuu usean tiedoston sisaumllloumlstauml jotka noudetaan

palvelijalta

bull Viittaus URL-osoitteella (Uniform Resource Locator)

bull httpwwwsomeschooledusomeDeptpicgif

koneen nimi Viitatun objektin

polkunimi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 24: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 24

HTML (HyperText Markup Language)

bull Standardi siitauml kuinka sivun rakenne kuvataan

bull Muotoilut eri osien sijoittelu sivuille

bull Viittaukset muihin objekteihin

bull SGML (Standard Generalized Markup Language)

bull yleinen merkkauskieli

bull kertoo kuinka dokumentit muotoillaan ~ladontamerkinnaumlt

bull XML (Extensible Markup Language )

bull rakenteellinen tietosisaumllloumln kuvaus myoumls merkitys kuvattu

bull Naumlistauml enemmaumln kurssilla 582304 XML-metakieli

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 25: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 25

HTTP (HyperText Transfer Protocol)

[RFC 1945 RFC 2616]

bull WWWn sovellusprotokolla

bull Tekstimuotoiset sanomat

bull pyyntouml ndash vastaus

bull Asiakas = joku selain

bull pyytaumlauml noutaa ja naumlyttaumlauml objektit

bull Palvelija = joku web-palvelu

bull etsii objektin (tiedoston) koneen hakemistosta

bull ja laumlhettaumlauml sen vastauksena asiakkaalle

PC jossa

Firefox-selain

palvelin

jossa

Apache Web

-palvelu

Iphone jossa

Safari-selain

Fig 26 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 26: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 26

HTTP protokollan perustoiminta

Kaumlyttaumlauml TCPtauml

bull Asiakas avaaTCP -

yhteyden (luo pistokkeen)

palvelimelle porttiin 80

bull Palvelija hyvaumlksyy TCP-

yhteyden asiakkaaseen

bull HTTP-sanomia

(sovellustason protokollan

mukaisesti) laumlhetetaumlaumln

selaimen (HTTP-asiakas)

ja www-palvelimen (HTTP-

palvelija) vaumllillauml

bull TCP-yhteys suljetaan

HTTP on ldquotilatonrdquo (stateless) protokolla

bull Palvelija ei muista mitaumlaumln edellisistauml pyynnoumlistauml

Tilansaumlilyttaumlvaumlt protokollat ovat monimutkaisia

Yhteyden historia (tila) taumlytyy pitaumlauml tallessa

Jos palvelija tai asiakas vikaantuu niiden kaumlsitys tilasta voi olla erilainen ja vaatia yhdenmukaistamista

HUOM

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 27: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 27

HTTP ja yhteyden saumlilyvyys

Ei saumlilytauml

(non-persistent)

bull Asiakas avaa TCP-

yhteyden jokaiselle

HTTP-pyynnoumllle

erikseen

ndash Palvelin sulkee

yhteyden aina

vastausviestin jaumllkeen

bull Jokaiselle elementille

oma yhteys

Saumlilyttaumlvauml

(persistent)

bull Asiakas avaa yhden

TCP-yhteyden jonka

yli siirretaumlaumln kaikki

tarvittavat elementit

ndash Palvelin ei sulje

yhteyttauml vastausviestin

jaumllkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 28: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 28

bull Kiertoviive (Round-trip time RTT)

aika joka kuluu pikkupaketin

siirtoon palvelimelle ja takaisin

bull Vastausaika = 2 RTT

+ siirtoaika

1 RTT TCP-yhteyden muodostus

1 RTT pyyntouml + ensimmaumlisten

vastausbittien saapuminen

Tiedoston siirtoaika

Vastausaika (response time) yhdelle TCP-yhteydelle

RTT

RTT

Aloita TCP-

yhteyden

muodostus

HTTP

request

HTTP

response

vastaanotettu

Siirto-

aika

aika

Fig 27 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 29: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 29

Suorituskyky

bull Jos sivulla viitataan 10 objektiin (ja yhteys ei saumlily) bull 11 peraumlkkaumlistauml TCP-yhteyden muodostusta ja purkua

bull KJ varaa ja vapauttaa puskuritilaa muodostuksiin kuluu

kaikkiaan 22 RTT

bull Avataan useita rinnakkaisia yhteyksiauml Puskuritilat yhteyksille

bull Kaumlytetaumlaumln saumlilyvaumlauml TCP-yhteyttauml (persistent) bull Oletus uusimmissa standardeissa Palvelin jaumlttaumlauml yhteyden

(toistaiseksi) sulkematta Ajastin on saumlaumldettaumlvissauml

bull Seuraavat samalle palvelimelle kuuluvat pyynnoumlt ja vastaukset

kaumlyttaumlvaumlt samaa yhteyttauml

bull Liukuhihnoitettu (pipelining) liukuhihnoittamaton bull Seuraava pyyntouml laumlhtee jo ennenkuin edelliseen on saatu

vastaus ei laumlhde

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 30: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 30

HTTP-pyyntouml yleinen rakenne

GET jokuhakemistosivuhtml HTTP11

metodi SP URL SP versio CR LF

Otsakekenttauml kentaumln arvo CR LF

CR LF

Runko-osa

kaumlytoumlssauml esim POST-metodissa

Otsakekenttauml kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml SP=rsquospacersquo eli

vaumllilyoumlnti

CR + LF = rivin

paumlaumlttaumlminen

13 ja 10

(desim)

historia

tulostimen

ohjauksessa

Tyhjauml rivi

pyyntoumlrivi

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 31: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 31

Esimerkki HTTP-pyyntouml

Pyyntoumlrivi GET POST HEAD ndashmetodi

Otsakeriveillauml vaumllitetaumlaumln parametritietoja

GET somedirpagehtml HTTP11

Host wwwsomeschooledu

User-Agent Mozilla40

Connection close

Accept-language fr

otsakerivit

Yksi tyhjauml rivi merkkinauml

sanoman loppumisesta (Ylimaumlaumlraumlinen carriage return line feed)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 32: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 32

HTTP-pyyntoumlmetodeja (HTTP11 httpwwww3orgprotocolsrfc2616rfc2616html)

bull GET Nouda objekti (download)

ndash nouda objekti vain jos annettu ehto paumltee (conditional GET)

If-Modified-Since If-Unmodified-Since

If-Match If-None-Match or If-Range

bull HEAD Nouda vain otsaketiedot

bull POST Voidaan myoumls laumlhettaumlauml tietoa (esimlomakkeen taumlyttouml)

ndash olemassa olevien dokumenttien kommentointi

ndash sanomien laumlhettaumlminen uutisryhmiin tai ilmoitustauluille

bull PUT Talleta objekti palvelimelle (upload)

ndash polkunimi pyyntoumlrivillauml talletettava tieto runko-osassa

bull DELETE Poista objekti palvelimelta

Web

-ju

lkais

u -

tyoumlk

alu

t k

aumly

ttaumlvaumlt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 33: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 33

Otsakerivit

Host WWWjokupaikkafi kone jossa dokumentti on

Connection close sulje yhteys laumlhetyksen jaumllkeen

User-agent Mozilla40 selaimen tyyppi

Accept-languagefi dokumentin kieli

Otsakekenttauml kentaumln arvo CR LF

Lisaumltietoja

httpenwikipediaorgwikiList_of_HTTP_headers

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 34: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 34

Esimerkki web-sivusta

lthtmlgt

lttitlegtRegistrationlttitlegt

ltbodygt

lth1gtRegistrationlth1gt

lth2gtPlease enter your name and email addresslth2gt

ltform method=rdquoGETrdquo action=httpgt

Firstltinput type = rdquotext name=rdquofirstrdquogt

Lastltinput type = rdquotextrdquo name=rdquolastrdquogt

Emailltinput type=rdquotextrdquo name=rdquoemailrdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt

ltformgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 35: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 35

HTTP-vastaus yleinen rakenne

versio SP statuskoodi SP fraasi CR LF

Otsakekentaumln nimi SP kentaumln arvo CR LF

CR LF

Runko-osa (entity body)

Otsakekentaumln nimi SP kentaumln arvo CR LF

hellip Lisaumlauml otsakerivejauml

tyhjauml rivi

statusrivi

otsakerivit

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 36: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 36

HTTP11 200 OK

Connection close

Date Thu 22 Feb 2007 120015 GMT

Server Apache130 (Unix)

Last-Modified Mon 29 Jan 2007 092324 GMT

Content-Length 6821

Content-Type texthtml

data data data data data hellip

Esimerkki HTTP-vastaus

Pyydetty data

esim HTML-

tiedosto

Statusrivi

Vastauksen

aikaleima

Datan

aikaleima

Otsake-

rivejauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 37: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 37

Vastaussanoman statusrivillauml (1 rivillauml) esim

200 OK Pyyntouml onnistui pyydetty objekti mukana vastauksessa

301 Moved Permanently Objekti on siirretty uusi URL on mukana

vastauksen otsakekentaumlssauml Location Asiakas tekee uuden

noudon uudesta URLsta

302 Moved Temporarily Siirretty tilapaumlisesti

400 Bad Request Palvelija ei ymmaumlrtaumlnyt pyyntoumlauml

403 Forbidden Ei ole oikeutta lukea pyydettyauml tiedostoa

404 Not Found Pyydettyauml objektia ei loumlydetty

500 Internal Server Error Virhe palvelimessa

505 HTTP Version Not Supported Palvelija ei tue asiakkaan kaumlyttaumlmaumlauml

HTTP-versiota Syntaksissa on jotain liian uutta tai liian vanhaa

HTTP statuskoodeja ja fraaseja

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 38: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 38

Kokeile itse (=leiki selainta)

1 Telnet yhteys kiinnostavaan www-palvelimeen

2 Kirjoita GET HTTP pyyntouml

3 Tutki saamaasi HTTP vastausta www-palvelimelta

(vaihtoehto telnetille Wireshark - analysointiohjelma)

avaa TCP yhteyden koneeseen cispolyedu

(HTTPn oletusporttiin) 80

Kaikki mitauml kirjoitat siirtyy yhteyttauml pitkiin ko

koneeseen ja porttiin

telnet cispolyedu 80

GET ~ross HTTP11

Host cispolyedu

Taumlmauml on minimaalinen (mutta kelvollinen)

GET pyyntouml palvelimelle

Ethaumln unohda tyhjaumlauml riviauml viestin lopusta

(kaksi rivinvaihtoa)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 39: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 39

Evaumlsteet (cookies)

bull HTTP on tilaton protokolla bull Palvelija ei talleta mitaumlaumln

istuntoon liittyvaumlauml

bull Selain (eli asiakas) bull Tallettaa asiakaskoneelle

(tiedostoon) palvelimen pyynnoumlstauml ja sen tarpeita varten kaumlyttaumljaumlkohtaista tietoa (= evaumlsteen)

bull Laumlhettaumlauml tiedot palvelijalle joka pyynnoumln yhteydessauml

bull Evaumlste voi olla sidottu tiettyyn verkkotunnisteeseen tai polkuun

bull Evaumlsteiden talletus ja laumlhetys

bull HTTP-vastauksessa otsakerivi Set-cookie ldquotietordquo

bull HTTP-pyynnoumlssauml otsakerivi Cookie ldquotietordquo

bull Palvelin bull Yllaumlpitaumlauml tietokantaa

kaumlyttaumljistauml (back-end database)

bull Yksikaumlsitteiset kaumlyttaumljaumltunnisteet (tav numero)

Varmenteet viikolla 6

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 40: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 40

Mihin evaumlsteitauml kaumlytetaumlaumln

bull Kaumlyttaumljien tunnistamiseen bull Palveluntarjoaja muistaa

kaumlyttaumljaumln edellisestauml sanomasta

bull Ensimmaumlisellauml kaumlyttoumlkerralla tietojen kyselyauml

bull Jatkossa tunnistusevaumlste mukana sanomissa

bull Istunnon vaiheen (tilan) tallentamiseen

bull Todennus vain kertaalleen esim www-postinlukuohjelman yhteydessauml

bull Ostoskorina bull Selaile palveluntarjoajan sivuilla

ja keraumlauml ostokset koriin

bull Laumlhetauml lopuksi tilaus

bull Vaumlaumlrinkaumlyttouml Mainosposti

bull Yksityisyys

bull Palveluntarjoaja saa koottua tietoa kaumlyttaumljaumlstauml

bull Hakukoneilla voi keraumltauml lisaumlauml

httpwwwcookiecentralcom

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 41: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 41

Evaumlsteet esimerkki

client server

usual http response msg

usual http response msg

cookie file

one week later

usual http request msg

cookie 1678 cookie-

specific

action

access

ebay 8734 usual http request msg Amazon server

creates ID

1678 for user create entry

usual http response

set-cookie 1678 ebay 8734

amazon 1678

usual http request msg

cookie 1678 cookie-

specific

action

access ebay 8734

amazon 1678

backend

database

Fig 210 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 42: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 42

Evaumlsteiden vaaroja

bull Evaumlsteisiin ei pidauml varastoida mitaumlaumln sensitiivistauml tietoa

selvaumlkielisenauml

bull Evaumlsteiden avulla hyoumlkkaumlaumljauml saattaa anastaa istunnon

bull Sulje istunto aina kun olet lopettanut

bull Poista evaumlsteet koneeltasi saumlaumlnnoumlllisesti Taumlmauml

palvelee muiden seikkojen ohella yksityisyyden suojaa

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 43: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 43

Proxy-palvelin eli verkkovaumllimuisti

bull Saumlilyttaumlauml kopioita haetuista objekteista

bull Pyyntouml ohjautuu

ndash ensin vaumllimuistiin

ndash haetaan verkon yli vasta

jos ei loumlydy vaumllimuistista

bull Etuja

ndash lyhentaumlauml vastausaikaa

ndash vaumlhentaumlauml verkkoliikennettauml

ndash vaumlhentaumlauml palvelimen kuormaa

[Myoumls asiakaskone voi yllaumlpitaumlauml vaumllimuistia]

client

Proxy server

client origin server

origin server

Fig 211 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 44: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 44

Yhteyslinkin kapasiteetti ei riitauml

bull Oletetaan

bull Haettavan objektin koko on 1 Mb

bull 15 pyyntoumlaumlsek =gt 15 Mbps

bull Viive Internetin reitittimeltauml

palvelimelle ja takaisin = 2 sec

bull Taumllloumlin

bull paikallisverkon kaumlyttoumlaste = 15

bull ei ruuhkautunut =gt siirtoaika

muutamia kymmeniauml ms

bull Reititinlinkin kaumlyttoumlaste = 100

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

mins + msecs

origin servers

public Internet

institutional network 100 Mbps LAN

15 Mbps access link

Paha

pullonkaula

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 45: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 45

Yhteyslinkin kapasiteetti ei riitauml -gt Nopeampi yhteys

bull Parannus

bull Hankitaan nopeampi yhteys

esim 100 Mbps

bull Taumllloumlin

bull Paikallisverkon kaumlyttoumlaste = 15

bull Reititinlinkin kaumlyttoumlaste = 15

bull Saantiaika = Internet delay +

Access delay + LAN delay = 2 sec +

msecs + msecs

bull Mitaumlhaumln nopeampi linkki maksaa

bull Voi olla kallis ratkaisu

origin servers

public Internet

institutional network 100 Mbps LAN

100 Mbps access link

Fig 212 [KR12]

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 46: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 46

bull Parannus Asennetaan proxy-palvelin

bull Oletetaan

bull osumatodennaumlkoumlisyys (hit rate)= 04

(tyypillisesti vaumllillauml 02-07)

bull Taumllloumlin 40 pyynnoumlistauml loumlytyy heti laumlheltauml

bull Reititinlinkin kaumlyttoumlaste putoaa 60iin

bull ei jonotusviipeitauml saantiaika ~10 ms

bull 60 pyynnoumlistauml palvelimelta saakka

bull Saantiaika = Internet delay + Access

delay + LAN delay

= 06 (2+ 001) sec + 04001 sec

= 12 secs

institutional network

origin servers

public Internet

100 Mbps LAN

15 Mbps access link

institutional cache

Fig 213 [KR12]

Yhteyslinkin kapasiteetti ei riitauml -gt Proxy-palvelin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 47: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 47

Conditional GET

bull Tavoite Palvelin laumlhettaumlauml

objektin uudelleen vain jos

vaumllimuistin kopio on

vanhentunut (stale)

ndash vain vaumlhaumln siirrettaumlvaumlauml tietoa

ndash pienempi linkin kaumlyttoumlaste

bull vaumllimuisti kerro tallennetun

kopion aikaleima osana HTTP

GET pyyntoumlauml

If-modified-since ltdategt

bull palvelin HTTP vastauksessa ei

oliota jos kopio on ajantasalla

HTTP10 304 Not Modified

object

modified

after

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10

304 Not Modified

object

not

modified

before

ltdategt

HTTP request msg If-modified-since

ltdategt

HTTP response HTTP10 200 OK

ltdatagt

client server

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 48: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 48

Muita URL-osoitteita

bull fileCwebshtmlmottlegif

Avaa paikallinen tiedosto ( asiakkaan tiedostojaumlrjestelmaumlssauml)

Selain ei generoi HTTP - pyyntoumlauml KJ huolehtii

bull ftpuscedupubsmyfiledoc

Hae tiedosto ftp-protokollaa kaumlyttaumlen

bull newshyopiskeluthttili

Avaa uutistenlukuohjelman kaumlyttoumlliittymauml ja muodosta yhteys

uutispalvelimeen

bull mailtooskariolematoncshelsinkifi

Avaa postiohjelman kaumlyttoumlliittymauml vaumllitauml saumlhkoumlposti

postipalvelimelle

bull mmsvideoavi

Avaa multimediasoitin

Nouda MultiMedia Streaming - protokollaa kaumlyttaumlen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 49: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 49

XSS-hyoumlkkaumlys (ei kuulu kurssiin)

bull XSS Cross-Site Scripting

bull Hyoumlkkaumlaumljauml voi ujuttaa koodiaan web-sivulle

Esimerkiksi

lthtmlgt

lttitlegtSign My Guestbooklttitlegt

ltbodygt

Sign my guestbook

ltform action=rdquosignphprdquo method=rdquoPOSTrdquogt

ltinput type=rdquotextrdquo name=rdquonamerdquogt

ltinput type=rdquotextrdquo name=rdquomessagerdquo size=rdquo40rdquogt

ltinput type=rdquosubmitrdquo value=rdquoSubmitrdquogt ltformgtltbodygt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 50: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 50

XSS(2) (ei kurssiin)

bull Kun kaumlyttaumljauml kirjoittaa kommentin sivu ohjaa

kommentin POST-muuttujan avulla sivulle signphp

bull Nyt pahantahtoinen kaumlyttaumljauml voikin kirjoittaa puhtaan

tekstikommentin sijasta vaikkapa javascriptiauml

bull Jos taumlmaumln jaumllkeen toinen kaumlyttaumljauml vierailee sivulla haumln

laukaisee javascriptin

bull Riippuu javascript-koodista mihin ongelmiin kaumlyttaumljauml

joutuu

bull Taumlstauml hyoumlkkaumlyksestauml on muita hienostuneempia

versioita

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 51: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 51

XSS(3) (ei kurssiin)

bull Paras torjunta on huolellinen syoumltteiden tarkistus ja

sanitointi

bull Eraumls varotoimi on estaumlauml javascriptien suoritus

asiakkaan puolella

bull Hyoumlkkaumlaumljaumlt ovat kehittaumlneet ovelia tapoja kiertaumlauml esim

sanitointia Eraumls tapa on kaumlyttaumlauml URL-koodia Jokaisella

merkillauml on oma URL-koodinsa ja selaimet tuntevat

taumlmaumln koodiston

bull Toinen hyoumlkkaumlystapa on pilkkoa koodi pieniin palasiin

jotka sitten yhdistetaumlaumln myoumlhemmin

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 52: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 52

CSRF-hyoumlkkaumlys (ei kurssiin)

bull CSRF = Cross-Site Request Forgery

bull Tarkastellaan yksinkertaista esimerkkiauml jossa kaumlyttaumljauml

puuhailee verkkopankissa tutkimassa tilejaumlaumln

bull Samaan aikaan kun pankkiyhteys on auki haumln

innostuu surfailemaan sivulle wwwevilsitecom jossa

sijaitsee Javascript-koodi

ltscriptgt

documentlocation=rdquohttpwwwnaivebankcom

TransferFundsphpamount=10000ampfromID=1234amptoID=

5678rdquo

ltscriptgt

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 53: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 53

CSRF(2) (ei kurssiin)

bull Kun kaumlyttaumljaumln selain kohtaa taumlmaumln koodin selain

ohjautuu kaumlyttaumljaumln pankkiin ja erityisesti sivulle joka

yrittaumlauml siirtaumlauml rahaa kaumlyttaumljaumln tililtauml

bull Hyoumlkkaumlys onnistuu jos kaumlyttaumljauml on aikaisemmin

todentunut pankille

bull Esimerkki on tietenkin epaumlrealistinen sillauml mikaumlaumln

pankki ei siirrauml rahoja varmistamatta siirtoa ensin

kaumlyttaumljaumlltauml

bull Toiseksi pankkisivulta ei ilmeisesti voi poistua ilman

ettauml istunto katkeaa

bull Toisaalta monissa sovelluksissa ei ole taumlllaisia

varmistuksia

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 54: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 54

CSRF(3) (ei kurssiin)

bull Vaumlltauml avaamasta tuntemattomia linkkejauml saumlhkoumlpostissa

tai www-sivuilla

bull Henkiloumlkohtaiset tiedot tulisi aina vaumllittaumlauml HTTPSn

kautta

bull Tutki URLt ja ole huolellinen varmenteiden kanssa

bull Sulje selaimen ActiveX- ja Java-toiminnot ja salli

Javascript vasta selaimen huomautuksen jaumllkeen

bull Kirjaudu ulos palveluista kun olet lopettanut palvelun

kaumlyttaumlmisen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 55: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 55

VERKKO-OHJELMOINNISTA

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 56: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 56

Verkkosovellus

Kirjoita vain sovellusohjelma

bull Jota suoritetaan

paumlaumltelaitteissa (end systems)

bull Joka kommunikoi verkon yli

bull Esim www-palvelu

(palvelinohjelma ja selain)

Aumllauml kirjoiteta sovellustason

ohjelmaa verkon ytimen

laitteille

bull Ne eivaumlt suorita

sovellusohjelmia

bull Niiden toiminta ei muutu

sovellusten muuttuessa

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 57: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 57

Pistoke ndash pikakertaus alkuosan kalvoista

bull Sovellus luo pistokkeen (porttinumero KJltauml jos sovellus ei muuta kerro)

bull Yksi pistoke per porttinumero

bull Palvelimella on pysyvauml (standardi)portti ja kutakin asiakasyhteyttauml

varten luotu tilapaumlinen portti (yhteysportti)

bull Asiakasohjelmalle tilapaumlinen KJn valitsema

bull Kaksisuuntainen (full duplex)

bull Samaan pistokkeeseen sekauml kirjoitetaan ettauml siitauml luetaan

bull Laumlhetys (send) - Kirjoita pistokkeeseen

bull Vastaanotto (receive) - Lue pistokkeesta

bull Alunperin Berkeley UNIXin (BSD) mukana

bull HUOM Rajapinta sovelluksen (sovelluskerros) ja

kuljetuspalvelun(kuljetuskerros) vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 58: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 58

TCP-kuljetuspalvelu

bull Yhteyspyyntouml palvelun

porttiin

bull Palvelija luo yhteyttauml

varten uuden portin

ndash Voi palvella useita

yhteyspyyntoumljauml

bull Tavallisesti palvelija luo

yhteyttauml varten myoumls

oman prosessin

bull Lue kirjoita tavuja

80

2345

1567

229

Welcoming socket = vastaanottopistoke

Connection socket = yhteyspistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 59: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 59

TCP-kuljetuspalvelu

Ota yhteys

laumlhetauml

vastaanota

dataa

sulje

yhteys

Luo lsquopysyvaumlrsquo pistoke

SOCKET

BIND

LISTEN

server

client

ACCEPT connreq

conn ack

Kuljetus-

palvelun

tuottaja

esim TCP

CONNECT(SERVER)

SOCKET

Jaumlauml

kuunte-

lemaan

Luo

pistoke

CLOSE

RECEIVE data

RECEIVE data

SEND(DATA)

SEND(DATA)

CLOSE disconreq

discon ack

KJ KJ

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 60: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 60

Yhteydellinen

Luotettava

Tavuvirta

Client

TCP-kuljetuspalvelu

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 61: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 61

bull from socket import

bull serverName = rsquoservernamersquo

bull serverPort = 12000

bull clientSocket = socket(AF_INET SOCK_STREAM)

bull clientSocketconnect((serverNameserverPort))

bull sentence = raw_input(lsquoInput lowercase sentencersquo)

bull clientSocketsend(sentence)

bull modifiedSentence = clientSocketrecv(1024)

bull print lsquoFrom Serverrsquo modifiedSentence

bull clientSocketclose()

Esimerkkisovellus TCP-asiakas

Python TCPClient

Lue kaumlyttaumljaumln naumlppaumlilemauml syoumlte

Luo TCP-pistoke

palvelimen servername

porttiin 12000

Pythonin pistoke-kirjasto

Laumlhetauml viesti palvelimelle

Laumlhetyksessauml ei enaumlauml

tietoa vastaanottajasta

Sulje pistoke

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 62: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 62

bull from socket import

bull serverPort = 12000

bull serverSocket = socket(AF_INETSOCK_STREAM)

bull serverSocketbind((lsquorsquoserverPort))

bull serverSocketlisten(1)

bull print lsquoThe server is ready to receiversquo

bull while 1

bull connectionSocket addr = serverSocketaccept()

bull

bull sentence = connectionSocketrecv(1024)

bull capitalizedSentence = sentenceupper()

bull connectionSocketsend(capitalizedSentence)

bull connectionSocketclose()

Esimerkkisovellus TCP-palvelija

Python TCPServer

Luo TCP vastaanottopistoke

Palvelin aloittaa saapuvien

TCP-pyyntoumljen odottamisen

Ikuinen silmukka

Palvelin odottaa accept()-kutsussa saapuvia pyyntoumljauml kutsu palauttaa uuden pistokkeen kullekin yhteydelle

Lukee tavuja pistokkeesta

(ei osoitetta kuten UDP)

Sulkee vain yhteyden pistokkeen

(ei vastaanottopistoketta)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 63: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 63

Vastaava TCP-asiakas Javalla

63

import javaio import javanet class TCPClient public static void main(String argv[]) throws Exception String sentence String modifiedSentence BufferedReader inFromUser = new BufferedReader(new InputStreamReader(Systemin)) Socket clientSocket = new Socket(hostname 12000) DataOutputStream outToServer = new DataOutputStream(clientSocketgetOutputStream()) BufferedReader inFromServer = new BufferedReader(new InputStreamReader( clientSocketgetInputStream())) sentence = inFromUserreadLine() outToServerwriteBytes(sentence + n) modifiedSentence = inFromServerreadLine() Systemoutprintln(FROM SERVER + modifiedSentence) clientSocketclose()

yhteyspyyntouml

Sulkee myoumls TCP-

yhteyden

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 64: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 64

Vastaava TCP-palvelija Javalla import javaio import javanet

class TCPServer

public static void main(String argv[]) throws Exception

String clientSentence

String capitalizedSentence

ServerSocket welcomeSocket = new ServerSocket(12000)

while(true)

Socket connectionSocket = welcomeSocketaccept()

BufferedReader inFromClient = new BufferedReader(

new InputStreamReader(connectionSocketgetInputStream()))

DataOutputStream outToClient =

new DataOutputStream(connectionSocketgetOutputStream())

clientSentence = inFromClientreadLine()

capitalizedSentence = clientSentencetoUpperCase() + n

outToClientwriteBytes(capitalizedSentence)

Yhteyspistokkeen

luonti

Palvelijan toiminta

pyynnoumln ja

vastauksen vaumllissauml

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 65: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 65

UDP-kuljetuspalvelu

bull Ei kaumlttelyauml yhteydenmuodostusta purkua

bull Ei-luotettava

bull Sovellusprosessi lukee ja kirjoittaa kokonaisia yksittaumlisiauml sanomia

bull Laumlhettaumljauml kertoo KJlle sanoman lisaumlksi kohteen IP-osoitteen ja

portin

ndash POSIX send(sockfd msg[] msg_len flags addr[] addr_len)

bull Vastaanottaja saa KJltauml mahdollista vastausta varten laumlhettaumljaumln

IP-osoitteen ja portin

ndash POSIX recvfrom(sockfd msg[] msg_len flags addr[] addr_len)

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 66: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 66

Yhteydetoumln

Epauml-

luotettava

Ei takaa

sanomien

jaumlrjestystauml

Client

23

UDP-kuljetuspalvelu

22

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 67: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 67

UDP-esimerkki

Kuljetuspalvelu

Asiakas Palvelija

Aiempi painos

KuRo08 Fig 235 ja 236

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 68: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 68

from socket import

serverName = lsquohostnamersquo

serverPort = 9876

clientSocket = socket(socketAF_INET

socketSOCK_DGRAM)

message = raw_input(rsquoInput lowercase sentencersquo)

clientSocketsendto(message(serverName serverPort))

modifiedMessage serverAddress =

clientSocketrecvfrom(2048)

print modifiedMessage

clientSocketclose()

Esimerkkisovellus UDP-asiakas

Python UDPClient

Luo UDP-pistoke

palvelimen

hostname

porttiin 9876

Liitauml pistokkeeseen

palvelimen nimi ja portti

laumlhetauml merkkijono

Tulosta vastaus

Sulje pistoke

Lue vastaus pistokkeesta

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 69: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 69

from socket import

serverPort = 9876

serverSocket = socket(AF_INET SOCK_DGRAM)

serverSocketbind(( serverPort))

print ldquoThe server is ready to receiverdquo

while 1

message clientAddress =

serverSocketrecvfrom(2048)

modifiedMessage = messageupper()

serverSocketsendto(modifiedMessage

clientAddress)

Esimerkkisovellus UDP-palvelija

Python UDPServer

Luo UDP-pistoke

Sido pistoke paikalliseen

porttiin numero 9876

Ikuinen silmukka

Lue sanoma UDP-pistokkeesta sanomassa on mukana asiakkaan IP ja porttinumero

Laumlhetauml muokattu

merkkijono (takaisin)

asiakkaalle

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 70: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 70

Vastaava UDP-asiakas Javalla

70

import javaio import javanet

class UDPClient

public static void main(String args[ ]) throws Exception

BufferedReader inFromUser =

new BufferedReader(new InputStreamReader(Systemin))

DatagramSocket clientSocket = new DatagramSocket()

InetAddress IPAddress = InetAddressgetByName(hostname)

byte[ ] sendData = new byte[1024]

byte[ ] receiveData = new byte[1024]

String sentence = inFromUserreadLine() sendData = sentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress 9876)

clientSocketsend(sendPacket)

DatagramPacket receivePacket = new DatagramPacket(receiveDatareceiveDatalength)

clientSocketreceive(receivePacket)

String modifiedSentence = new String(receivePacketgetData())

Systemoutprintln(FROM SERVER + modifiedSentence)

clientSocketclose()

IP-osoitteen

selvittaumlminen

Vapauttaa pistokkeen

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data

Page 71: Luento 3: Sovelluskerros verkkosovelluksen periaatteet ...Tietoliikenteen perusteet, syksy 2016 Timo Karvi 6 Sovellusarkkitehtuuri palvelupyyntö vastaus Google, e-Bay, Facebook, YouTube,

Tietoliikenteen perusteet syksy 2016 Timo Karvi 71

Vastaava UDP-palvelija Javalla

71

import javaio import javanet

class UDPServer

public static void main(String args[]) throws Exception

DatagramSocket serverSocket = new DatagramSocket(9876)

byte[] receiveData = new byte[1024]

byte[] sendData = new byte[1024]

while(true)

DatagramPacket receivePacket =

new DatagramPacket(receiveData receiveDatalength)

serverSocketreceive(receivePacket)

String sentence = new String(receivePacketgetData())

InetAddress IPAddress = receivePacketgetAddress()

int port = receivePacketgetPort()

String capitalizedSentence = sentencetoUpperCase()

sendData = capitalizedSentencegetBytes()

DatagramPacket sendPacket =

new DatagramPacket(sendData sendDatalength IPAddress port)

serverSocketsend(sendPacket)

Pura paketti

data IP-osoite

ja portti

Laumlhetauml muokattu data