Föreläsning 1 Nätverk och strömmar

Relevanta dokument
F1 Nätverk och strömmar

Nätverksprogrammering. Tekniker för att skriva program som kommunicerar med varandra över ett nätverk. F1 Nätverk och strömmar.

F2 Java I/O - strömmar Meddelandesändning med TCP

F2 Java I/O - strömmar Meddelandesändning med TCP EDA095 Nätverksprogrammering

F1 Nätverk och meddelandesändning

F1 Nätverk och meddelandesändning

Föreläsning 5 Meddelandesändning med TCP

F5 Meddelandesändning med TCP

Föreläsning 5 Meddelandesändning med TCP

F1 Nätverk och meddelandesändning

F8 Meddelandesändning med UDP

Transport Layer. Transport Layer. F9 Meddelandesändning med UDP EDA095 Nätverksprogrammering. Java och UDP TCP/UDP

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

Inre klasser Anonyma klasser Kloning I/O-ramverket. anonyma klasser

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

Objektorienterad Programkonstruktion. Föreläsning 10 7 dec 2015

F9 Meddelandesändning med UDP

Datakommunika,on på Internet

Tentamen Nätverksprogrammering Lösningsförslag

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

Fördjupad Java. Undantagshantering. Fel

TCP/IP och Internetadressering

Tentamen Nätverksprogrammering Lösningsförslag

Grundläggande datavetenskap, 4p

Grundläggande nätverksteknik. F2: Kapitel 2 och 3

Nätverk och Java, grunder Föreläsning 0: 0: Introduktion till Internet

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Mattias Wiggberg 1. Orientera på Internet. IP-adress. IP-adresserna räcker inte... Mer om IP-adresser

Olika slags datornätverk. Föreläsning 5 Internet ARPANET, Internet började med ARPANET

IT för personligt arbete F2

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

Tentamen Nätverksprogrammering Lösningsförslag

Datakommunikation och Internet

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Föreläsning 6. Designmönstret Decorator I/O-ramverket

Datakommunika,on på Internet

Internet. Internet hur kom det till? Internets framväxt. Ett hierarkiskt uppbyggt telenät Kretskopplat/circuit switching

KomSys Hela kursen på en föreläsning ;-) Jens A Andersson

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

Nätverk grunder Föreläsning 1: 1: Introduktion till Internet

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Grundläggande nätverksteknik. F3: Kapitel 4 och 5

Administration: Grundläggande internetprogrammering

Föreläsning 5. Vägval. Vägval: önskvärda egenskaper. Mål:

Föreläsning 1. På klientsidan... Allmänt. På serversidan... Och dessutom... DD1389 Internetprogrammering 6 hp

5 Internet, TCP/IP och Tillämpningar

Kapitel 5: Lokala nät Ethernet o 802.x. Lokala nät. Bryggan. Jens A Andersson (Maria Kihl)

10 Kommunikation i Java

Tentamen Nätverksprogrammering Lösningsförslag

Språkkonventioner och redigering av tal.

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Kihl & Andersson: Kapitel 6 (+ introduktioner från kap 7, men följ slides) Stallings: 9.5, 14.1, 14.2, Introduktion i 14.3, 16.1

Föreläsning 5: Stora datanät Från användare till användare ARP

Tentamen Nätverksprogrammering Lösningsförslag

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

JAVAUTVECKLING LEKTION 7

Datasäkerhet och integritet

Webbservrar, severskript & webbproduktion

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Från användare till användare ARP. (Maria Kihl)

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Christer Scheja TAC AB

Instuderingsfrågor ETS052 Datorkommuniktion

Java Secure Sockets Extension JSSE. F5 Secure Sockets EDA095 Nätverksprogrammering! Roger Henriksson Datavetenskap Lunds universitet

Hur hänger det ihop? För att kunna kommunicera krävs ett protokoll tcp/ip, http, ftp För att veta var man skall skicka

F4. programmeringsteknik och Matlab

Tentamen i Datorkommunikation den 10 mars 2014

Föreläsning 5: ARP (hur hitta MAC-adress) Från applikation till applikation

DIG IN TO Nätverksteknologier

1 PROTOKOLL. Nätverk. Agenda. Jonas Sjöström

Föreläsning 12. Inre klasser Anonyma klasser Kloning I/O-ramverket

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datainsamling över Internet

Karlstads universitet Institutionen för Informationsteknologi Datavetenskap

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Att skriva till och läsa från terminalfönstret

WWW. Exempel på klientsidan. Överföring av en html-fil. Snyggare variant. Verkligt format. Meddelandeformat för begäran HTTP

Ingenjörsfirman Stéen Java Sida 1 av 1

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

DIG IN TO Nätverksteknologier

OOP Objekt-orienterad programmering

Tentamen Nätverksprogrammering Lösningsförslag

Java Direkt, upplaga 5 Innehåll

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Systemkrav och tekniska förutsättningar

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

DEL 2 - Praktiska programmeringsuppgifter

Socket-programmering. Programmering för distribution. Klient/server ansatsen. Klient/server ansatsen TCP/IP protokollgrafen Java-programering

Transkript:

Föreläsning 1 Nätverk och strömmar EDA095 Nätverksprogrammering Per Andersson Datavetenskap Lunds universitet

Nätverksprogrammering Tekniker för att skriva program som kommunicerar med varandra över ett nätverk. Särskild tonvikt på Internet/IP-baserade nätverk, men generellt tillämpbara tekniker. Praktisk implementering i Java. Samma principer som i andra programmeringsspråk. 2

Kursöversikt Nätverksbegrepp Strömmar Accessa dokument på webben Trådar, asynkrona händelser Socket-baserad kommunikation: TCP, kryptering Paketbaserad kommunikation: UDP, multicast Strömmande media Webbtekniker: HTTP CSS JavaScript, AJAX, DOM 3

Kursmoment 10 föreläsningar 5 labbar obligatorisk grupper om 2 studenter 1 projekt obligatorisk grupper om 3-4 studenter skriftlig tenta obligatorisk Anmäl dig till labbarna: https://sam.cs.lth.se/labs 4

Nätverkstermer nod - korsning eller ändpunkt i nätverket - dator, switch, router, hosts - datorer i nätverket, där program körs länk - tråd eller radio som används för kommunikation mellan två intilliggande noder hopp - kommunikation över en länk Applikationsprogram Applikationsprotokoll Applikationsprogram 5

Klienter och servrar Vanlig arkitektur för applikationer som erbjuder tjänster via nätverk. Engelska: client/server architecture. Klient Ett program som kopplar upp sig (ofta via nätverk) till ett annat program för att begära någon tjänst. Exempel: Webbläsare, e-postprogram. Server Ett program som erbjuder tjänster åt andra program. Exempel: Webbserver, mailserver. 6

Protokoll För att två program ska kunna förstå varandras meddelanden behövs ett protokoll, dvs ett gemensamt språk. Protokoll beskrivs av syntax och grammatik. Tillståndsmaskiner och sekvensdiagram används ofta för att beskriva protokoll. Applikationsprogram Applikationsprotokoll Applikationsprogram Exempel HTTP (HyperText Transfer Protocol) - för kommunikation mellan webbläsare och webbserver. 7

Transaktioner Kommunikationen mellan en klient och en server kan ofta delas upp i en följd av transaktioner. En transaktion kan omfatta sändning av ett antal relaterade meddelanden i olika riktningar. Syftet med en transaktion är att få en primitiv typiskt atomär operation utförd av servern. Exempel Hämta en webbsida från en webbserver (med HTTP): Klienten skickar en begäran till webbservern. Servern skickar den begärda webbsidan. Session Hela livstiden för ett program/inloggning, ofta flera transaktioner. 8

Fysiskt överföringsmedium Applikationsprotokoll är ett protokoll för kommunikation mellan två applikationsprogram. För överföringen behövs ett fysiskt överföringsmedium. Exempel: Ethernet, RadioLAN. Applikationsprogram Logisk förbindelse Applikationsprogram Fysiskt överföringsmedium. "Host-To-Network Layer". Host-To-Network -lagret omvandlar mellan analoga och digitala signaler. 9

packet switch -närverk - Datagram Ett datagram är ett sammanhållet meddelande som sänds som en enhet över ett nätverk. Jämför: Telegram, SMS. Host-To-Network -lagret Endast begränsade möjligheter att skicka datagram i java. Ingen felkontroll/omsändning. Många standarder. Opraktiskt! 10

Internet Layer IP - Internet Protocol Routing Viss felkontroll Oberoende av fysiskt överföringsmedium Applikationsprogram Applikationsprotokoll Applikationsprogram Internetlagret Internet Protocol internetlagret Fysiskt överföringsmedium. "Host-To-Network Layer". Bättre, men fortfarande komplicerat! 11

Transport Layer Bygger vidare på Internet Layer / IP. Applikationsprogram Transportlagret Internetlagret Applikationsprotokoll TCP / UDP IP Applikationsprogram Transportlagret Internetlagret Fysiskt överföringsmedium. "Host-To-Network Layer". 12

TCP/UDP User Datagram Protocol (UDP) Datagram Upp till 65507 byte stora datagram (IPv4) Garanterat korrekta meddelanden. Ej garanterad leverans eller inbördes ordning. Transmission Control Protocol (TCP) Fast (logisk) uppkoppling över nätverket. Dataström data behöver inte delas upp i paket. Automatisk felkontroll/omsändning. Garanterad leverans och inbördes ordning. 13

Adressering För att ett program ska kunna upprätta en nätverksförbindelse behöver det ett sätt att ange vilket annat program det vill koppla upp sig mot. En kombination av IP-nummer och portnummer! IP-nummer Anger vilken dator programmet kör på. Jämför: gatuadress. Portnummer En dator kan ha flera olika program igång som erbjuder nätverkstjänster. Varje program har ett eller flera unika logiska portnummer. Jämför: lägenhetsnummer inom en fastighet. 14

IP-nummer 32 bitar - 4 byte (IPv4) 128 bitar - 16 byte (IPv6) Exempel: 130.235.16.34 (IPv4) 2001:fe0c:0000:0000:0000:0000:00db:1dc0 (IPv6) 2001:fe0c::db:1dc0 (IPv6) 15

Övergång till IPv6 IP-numren i IPv4 slut! IPv4 / IPv6 kommer att användas parallellt ett tag Dubbla IP-adresser under övergångsfasen Moderna OS stöder IPv6 Idag dåligt stöd bland internetleverantörer Liten eller ingen betydelse för oss som applikationsprogrammerare undvik bara att förutsätta IP-adresser på formen X.X.X.X! 16

Domain Name Server Symboliska namn Översätter från läsbara namn till IP-nummer Namnen har hierarkiskt struktur www.cs.lth.se = 130.235.16.34 DNS-service är en distribuerad databas noder har en delmängd referens till noder som vet mer eventual consistency 17

Portnummer Identifierar vilken tjänst på en dator man vill ansluta till. Rent logisk abstraktion ingen fysikalisk motsvarighet. Ett program som accepterar nätverksuppkopplingar, en server, väljer ett ledigt portnummer och väntar på att andra program ska ansluta till just detta portnummer. Port 1-1023 är reserverade för standardtjänster. Exempel: Tjänst Port Protokoll echo 7 TCP/UDP FTP 21 TCP Telnet 23 TCP HTTP 80 TCP Port 1024-65535 är tillgängliga för vanliga applikationer. 18

Internetstandarder Standardprotokoll för kommunikation på Internet fastställs av IETF Internet Engineering Task Force en ganska informell organisation. Applikation, transport- och internet-lagret. Beskrivs i form av RFC Request For Comments. Kod regerar, det finns alltid en referensimplementation. World Wide Web Consortsium (W3C) standardiserar HTML. Exempel: RFC768 UDP RFC791 mfl IP RFC1945 HTTP version 1.0 19

Java I/O Strömmar och filer Ström (eng. Stream) En ström är en sekvensiell följd av bytes (tecken). In- och utmatning sker oftast i form av strömmar: Inmatning från tangentbordet, utskrift till ett terminalfönster. Vi kan skriva bytes till strömmar och vi kan läsa bytes från strömmar. Generell abstraktion. Vi kan upprätta strömmar över ett nätverk: TCP Fil (eng. File) En fil är en ström som lagrats på ett sekundärminne. Exempel: Era Javaprogram är lagrade i textfiler. 20

Strömmar i Java inmatning Klasserna för att hantera strömmar finns i paketet java.io. InputStream FileInputStream FilterInputStream ObjectInputStream BufferedInputStream DataInputStream CipherInputStream* Endast en delmängd... 21

Strömmar i Java utmatning OutputStream FileOutputStream FilterOutputStream ObjectOutputStream DataOutputStream CipherOutputStream* BufferedOutputStream PrintStream 22

InputStream Abstrakt klass som representerar en inkommande ström. Superklass till övriga InputStream-klasser. Innehåller metoder för att läsa bytes. public int abstract read() throws IOException; public int read(byte[] input) throws IOException; public int read(byte[] input,int offset,int length) throws IOException; public long skip(long n) throws IOException; 23

Läsa en sekvens av bytes 1 Läs en sekvens av 10 bytes! byte[] input = new byte[10]; for (int i=0;i<input.length;i++) { int b = in.read(); if (b==-1) break; input[i] = (byte) b; } b==-1 anger att det inte finns mer att läsa. read() returnerar en int (-1 255) cast behövs. Ineffektivt att läsa en byte i taget. 24

Läsa en sekvens av bytes 2 Varför inte använda int read(byte[] input)? byte[] input = new byte[10]; int r = in.read(input); Läser max input.length tecken Garanterar ej att hela input fylls. r anger hur många tecken som faktiskt lästes. 25

Läsa en sekvens av bytes 3 Använd int read(byte[] input,int offset,int length)! byte[] input = new byte[10]; int bytesread = 0; int bytestoread = input.length; while (bytesread<bytestoread) { } int result=in.read(input,bytesread, bytestoread-bytesread); if (result==-1) break; bytesread += result; 26

Mark/Reset Vissa strömmar stödjer att man läser om redan inlästa bytes. public void mark(int readaheadlimit); public reset() throws IOException; public boolean marksupported(); mark() sätter en markering reset() går tillbaka till denna position. readaheadlimit anger buffertstorlek. 27

OutputStream Abstrakt klass som representerar en utgående ström. Superklass till övriga OutputStream-klasser. Innehåller metoder för att skriva bytes. public abstract void write(int b) throws IOException; public void write(byte[] data) throws IOException; public void write(byte[] data, int offset, int length) throws IOException; public void flush() throws IOException; public void close() throws IOException; 28

Filter Objekt av subklasserna till FilterInputStream och FilterOutputStream kan kopplas ihop (kedja) där varje länk bidrag till funktionaliteten. InputStream- respektive OutputStream-objekt utgör alltid ena änden i kedjan. 29

Filter Exempel: GZIP Chiper Buffer Använd en BufferedInputStream för att öka prestanda vid inläsning från fil: InputStream is =...; BufferedInputStream bis = new BufferedInputStream(is); Motsvarande för utmatning: OutputStream os =...; BufferedOutputStream = new BufferedOutputStream(os); 30

Nätverksprogrammering Buffring Buffring av strömmar ökar effektiviteten högre genomströmning per tidsenhet. Ju mer data som sänds / tas emot åt gången ju färre underliggande systemanrop / diskaccesser / nätverkspaket. Klasserna BufferedInputStream / BufferedOutputStream implementerar buffring. VARNING: Glöm inte att anropa flush()! Risk för dödläge: buffert klient server 31

Data(Input/Output)Stream Subklasser till FilterInputStream/FilterOutputStream. Kan användas om man vill skriva annat än bytes på en ström. De konverterar mellan bytes och olika andra datatyper. public void writeboolean(boolean b); public void writebyte(int b); public void writeshort(int s); public void writechar(int c); public void writeint(int i); public void writelong(long l); public void writefloat(float f); public void writedouble(double d); public void writechars(string s); public void writebytes(string s); public void writeutf(string s); public boolean readboolean(); public byte readbyte(); public char readchar(); public short readshort(); public int readint(); public long readlong(); public float readfloat(); public double readdouble(); public String readutf(); Alla operationer kan generera ett IOException. DataInputStream dis = new DataInputStream(is); int x = dis.readint(); 32

Skicka/ta emot tecken Ibland vill man skicka tecken istället för bytes och vill slippa att själv göra omvandlingen i sitt program. Reader/Writer - en parallell klasshierarki till InputStream/ OutputStream som hanterar tecken enligt en given teckenkodning. Vi gör om strömmar till en reader/writer genom att kapsla in den (precis som med FilterInput/OutputStream): OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream()); InputStreamReader in = new InputStreamReader(socket.getInputStream()); 33

Skicka/ta emot strängar Klasserna BufferedReader och PrintWriter representerar sträng- och textorienterade strömmar. De är buffrade och hanterar rader av tecken effektivt via metoden readline(): InputStream is =... OutputStream os =... BufferedReader in = new BufferedReader(new InputStreamReader(is)); PrintWriter out = new PrintWriter(os,true); Se kursboken, kapitel 2, och Javas klassdokumentation! 34

Resurshanteing Strömmar binder upp resurser (minne, portar et.c.) Resurser bind både på klient och server-sidan Stäng alltid en uppkoppling när du är klar 35

Resurshanteing OutputStream out = null; try { out = new OutputStream( ); // do you stuff } catch (IOException ex){ System.err.println(ex.getMessage()); } finally { if(out!= null){ try{ out.close(); } catch(ioexception ex){}; } } 36

Resurshanteing - java 7 try (OutputStream out = new OutputStream( )){ // do you stuff } catch (IOException ex){ System.err.println(ex.getMessage()); } OutputStream implementerar AutoClosable-interfacet. close() anropas alltid automatiskt. 37