luento 3: sovelluskerros verkkosovelluksen periaatteet ...tietoliikenteen perusteet, syksy 2016 timo...
Post on 13-Jul-2020
3 Views
Preview:
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
Tietoliikenteen perusteet syksy 2016 Timo Karvi 6
Sovellusarkkitehtuuri
palvelupyyntouml
vastaus
Google e-Bay
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
top related