I socket.

Slides:



Advertisements
Presentazioni simili
Prof. Carla Fanchin – L.S. Tron
Advertisements

Socket Java Alberto Ferrari.
Programmazione con socket
Programmazione socket
La rete in dettaglio: rete esterna (edge): applicazioni e host
Come programmare servizi di rete?
Programmazione distribuita in Java
Reti di Calcolatori IL LIVELLO TRASPORTO Protocolli TCP e UDP.
Reti di Calcolatori1 Il modello Client/Server La comunicazione Se sintetizziamo uno scenario completo possiamo identificare diverse interfacce.
Cosa è una applicazione distribuita?
Distributed System ( )7 TCP/IP four-layer model.
Servizi Internet Claudia Raibulet
Protocolli di rete. Sommario  Introduzione ai protocolli di rete  Il protocollo NetBEUI  Il protocollo AppleTalk  Il protocollo DLC  Il protocollo.
Applicazione Presentazione Sessione Trasporto Rete Data link Fisico OSI Processo / Applicazione Trasporto Rete- Internet Interfaccia di.
INTERNET PROTOCOL SUITE FACOLTA’ DI INGEGNERIA Corso di Laurea Specialistica in Ingegneria delle Telecomunicazioni Docente: Prof. Pasquale Daponte Tutor:
INTERNET E INTRANET Classe VA SIA. La Storia di INTERNET ’ – ARPANET 1969 – anno di nascita università Michigan - Wayne 1970 – – INTERNET.
1 Il livello transport. Concetti fondamentali - Canale logico e canale fisico 2 Quando un segnale deve essere trasmesso, viene inviato su un Canale, cioè.
Socket programming in Java La realizzazione di un server in Java consente di scrivere una sola versione eseguibile su diverse piattaforme. Il linguaggio.
Socket programming in Java La realizzazione di un server in Java consente di scrivere una sola versione eseguibile su diverse piattaforme. Il linguaggio.
UNIVERSITA' DEGLI STUDI DI PERUGIA Facoltà di Scienze Matematiche, Fisiche e Naturali Corso di Laurea Magistrale in Informatica Anno Accademico
Corso di Alta formazione in TL&OS Modulo 1.3 Reti e Servizi - lezione 1 Modulo 1.3 Reti e servizi 1. Introduzione al Networking Connettere il PC in rete;
A dvanced N etwork T echnologies Lab oratory Infrastrutture e Protocolli per Internet Laboratorio 5 Politecnico di Milano Stefano NapoliAlberto Pollastro.
Università degli Studi - “ G. d'Annunzio ” Chieti - Pescara FACOLTÀ DI ECONOMIA Corso di laurea in Economia Informatica/s Seminario di: Giovanni Placentino.
S.Rosta 1 Le Reti Informatiche modulo 8 Prof. Salvatore Rosta
H T M L Hyper Text Markup Language L' HTML è un linguaggio di markup usato per la creazione di documenti ipertestuali sotto forma di pagine web.
S.Rosta 1 Le Reti Informatiche modulo 10 Prof. Salvatore Rosta
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Protocolli per la sicurezza. Le tre AAA Ai livelli più bassi del protocollo ISO/OSI i meccanismi di sicurezza garantiscono le tre AAA Autenticazione Autorità.
Rete e comunicazione Appunti.
Configurazione Router IR794- IG601
NAT, Firewall, Proxy Processi applicativi.
modulo 5 Prof. Salvatore Rosta
Vulnerability Assessment
TCP/IP.
DNS Domain Name Server.
Sale Force Automation.
Come comunicano i processi ?
Rete e comunicazione Appunti.
Pronto.
Dal problema al processo risolutivo
Applicazione web basata su web service e web socket
TCP/IP. Sommario  Introduzione al TCP/IP  Indirizzi IP  Subnet Mask  Frame IP  Meccanismi di comunicazione tra reti diverse  Classi di indirizzi.
CRITTOGRAFIA Per crittografia si intende la protezione delle informazioni mediante l'utilizzo di codici e cifre. La crittografia è un componente fondamentale.
Trasmettitori e ricevitori
Dal problema al processo risolutivo
GridFlex: gestione di software
Amministrazione dei servizi di stampa
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Asynchronous JavaScript and XML
modulo 6 Prof. Salvatore Rosta
analizzatore di protocollo
SUBNETTING E SUPERNETTING
Internet.
istalliamo l’ambiente di sviluppo - ide
Realizzato da: Giacomo Dionigi
Predisposizione e presentazione della domanda di nullaosta
INTERNET «IL MONDO DI OGGI»
Programmare.
Posta Elettronica Certificata
Concetti introduttivi
Programmazione e Laboratorio di Programmazione
© 2007 SEI-Società Editrice Internazionale, Apogeo
Firewalling.
Scambio dati integrazione Specifiche DATEX II
Corso base per Operatori di Protezione Civile
Laboratorio II, modulo “Skype”.
Il Livello di Trasporto
Predisposizione e presentazione della domanda di nullaosta
Programmazione e Laboratorio di Programmazione
RETI.
Transcript della presentazione:

I socket

Le porte di comunicazione e i socket La comunicazione tra client e server avviene tramite messaggi I messaggi sono costruiti al livello applicativo e variano in base al protocollo applicativo (es. HTTP, FTP ….) Un processo su un host (es. client) per inviare un messaggio ad un altro host (es. server) deve identificare in maniera univoca il processo destinatario Problema: ogni PC ha una sola porta fisica di connessione alla rete, se più applicazioni da parte di uno stesso host devono accedere alla rete devono essere riconosciute dai server Soluzione: indirizzo IP + porte logiche Questo meccanismo prende il nome di socket

Le porte logiche Una porta ha un valore numerico rappresentabile con 2 byte (16 bit) I valori che può assumere vanno da 0 - 65.535

Le porte logiche “well-known” Le porte da 0 a 1.023 sono riservate per le applicazioni Le porte di uno stesso protocollo sono diverse in base al servizio (TCP/UDP)

Le porte logiche “Registered” I numeri di porta da 1.024 a 4.9151 sono riservati a porte registrate e usati da alcuni servizi Possono essere anche usate dai client

Le porte logiche “Dynamic/Private” I numeri di porta da 49.152 a 65.535 sono liberi Possono essere assegnati ai processi applicativi

Esempio Caso di un server sul quale sono disponibili più servizi: invio di E-mail: protocollo applicativo SMTP, il client deve inviare un messaggio opportunamente codificato alla porta TCP 25 del server sito web: protocollo applicativo HTTP, il client deve inviare un messaggio opportunamente codificato alla porta TCP 80 del server servizio DNS: trasformare il nome di un calcolatore in un indirizzo IP, il client invia una richiesta alla porta UDP 53 del server In generale: PER CHIEDERE UN SERVIZIO AD UN SERVER BISOGNA SPECIFICARE L’IP DEL SERVER E LA PORTA LOGICA CHE INDICA IL TIPO DI SERVIZIO

SOCKET Un socket è formato da una coppia <indirizzo IP: numero della porta> host C IP: 132.80.46.32 host A IP: 150.45.65.32 80 3301 3300 Due applicazioni dell’host A host A: <150.45.65.32:3301> host A: <150.45.65.32:3300> e un’applicazione dell’host B host B: <178.145.35.21 :3301> comunicano alla stessa porta 80 dell’host C richiedendo un servizio HTTP host B IP: 178.145.35.21 3301

SOCKET Il client deve conoscere l’indirizzo IP e il numero di porta usati dal server (es: il servizio HTTP del server è sulla porta 80) Il numero di porta logica è libero a scelta tra quelli disponibili (es: 3301 oppure 3300) e deve essere trasmesso al server nel segmento di richiesta di connessione al server in modo che quest’ultimo possa successivamente inviare le risposte Allo stesso server possono arrivare contemporaneamente: richiesta da client diversi che potrebbero usare la stessa porta o richieste da porte diverse dallo stesso client

Programmazione SOCKET Come si realizza a livello di codice al comunicazione tra client e server in rete? Tutti i Sistemi Operativi espongono un’interfaccia di programmazione (API) per i due principali protocolli del livello di trasporto UDP e TCP Il protocollo UDP (User Datagram Protocol) prevede la trasmissione di messaggi denominati datagram I singoli datagram sono inoltrati in rete senza garantire al mittente che essi raggiungeranno la destinazione Il protocollo UDP lascia al programmatore il compito di garantire l’integrità della comunicazione tra mittente e destinatario

Programmazione SOCKET Il protocollo TCP (Transport Control Protocol) prevede la trasmissione di messaggi denominati bytestream Questo protocollo garantisce l’affidabilità della comunicazione ( a meno di gravi errori di comunicazione in rete) nel trasferimento di tutti i singoli byte senza errori o perdite I server TCP sono di tipo concorrente: quando ricevono una connessione di un client generano un nuovo processo che gestisce lo specifico client e resta in ascolto di altre richieste da parte di altri client

Programmazione SOCKET Si possono quindi individuare due tipi fondamentali di socket: stream socket (Protocollo TCP) datagram socket (Protocollo UDP) Le funzioni più utilizzate per il linguaggio Java: socket/serverSocket: crea un nuovo socket close: termina l’utilizzo di un socket bind: collega un indirizzo di rete ad un socket listen: aspetta messaggi in ingresso accept: comincia ad un utilizzare una connessione in ingresso connect: crea una connessione con un host remoto send: trasmette dati su una connessione attiv recv: riceve dati da una connessione attiva

Stream Socket Con gli Stream Socket si realizza una connessione sequenziale, asimmetrica, affidabile basata su stream di byte di lunghezza variabile Ogni processo (client/server) crea un endpoint richiamando la funzione socket() Server: si mette in ascolto di un collegamento e quando gli arriva la richiesta la esaudisce accept() e subito dopo crea un nuovo socket in ascolto di nuove connessioni Client: fa una richiesta di connessione al server e quando viene accettata si stabilisce il collegamento Client e server si scambiano i messaggi (read() e write()) fino alla chiusura della connessione che viene effettuata con la funzione close()

Server TCP Stream Socket In un server TCP abbiamo due tipi di socket: Connection socket: per accettare connessioni ed è condiviso Data socket: un socket per le operazioni di read() e write(), NON condiviso

Connection e Data Socket Client A IP: 150.45.65.32 Server IP 132.80.46.32 connect Data socket Connection socket send/receive Client B IP: 178.145.35.21 connect Data socket send/receive Data socket In Java due classe: ServerSocket(int port) per creare una connection socket specificando il numero di porta su cui rimanere in ascolto Socket(InetAdress addres, int port) per creare una data socket a seguito di una connessione

Lato Server: mettersi in attesa di una connessione Creare un’istanza della classe java.net.ServerSocket specificando il numero di porta su cui rimanere in ascolto. ServerSocket serverSocket = new  ServerSocket(4567); Chiamare il metodo accept() che fa in modo che il server rimanga in ascolto di una richiesta di connessione (la porta non deve essere già in uso) Socket socket=serverSocket.accept(); Quando il metodo completa la sua esecuzione la connessione col client è stabilita e viene restituita un’istanza di java.net.Socket connessa al client remoto.

Lato Client: aprire una connessione Aprire un socket specificando indirizzo IP e numero di porta del server.   Socket socket = new  Socket(“127.0.0.1”,  4567) All’indirizzo e numero di porta specificati ci deve essere in ascolto un processo server. Se la connessione ha successo si usano (sia dal lato client che dal lato server) gli stream associati al socket per permettere la comunicazione tra client e server (e viceversa) Scanner in  = new  Scanner(socket.getInputStream()); PrintWriter out =  new PrintWriter(socket.getOutputStream());

Datagram Socket Si realizza una comunicazione che permette di scambiare dati senza connessione (i messaggi contengono l’indirizzo di destinazione e provenienza) mediante il trasferimento di datagrammi che inoltrano messaggi di dimensione variabile, senza garantire ordine o arrivo dei pacchetti, quindi si ha una comunicazione inaffidabile. Sono supportate nel dominio Internet dal protocollo UDP. Operativamente, ogni processo crea il proprio endpoint richiamando la primitiva che crea il socket e successivamente: il server si mette in attesa di ricevere i dati e alla loro ricezione può inviare un risposta; il client invia il pacchetto di dati al server può mettersi in attesa di una risposta con le stesse primitive che ha utilizzato il server; Al termine della comunicazione il socket viene chiuso. Il loro vantaggio è quello di trasferire velocemente i dati e non esistono differenze tra le chiamate effettuate dai vari processi coinvolti nella comunicazione

JAVA SOCKET Le operazioni necessarie per un trasferimento di dati tra due host sono le seguenti: Un server apre un canale di comunicazione su una determinata porta e rimane in ascolto, in attesa di una richiesta di connessione (ServerSocket); un host client fa una richiesta di connessione a un server Socket (con indirizzo IP e address port conosciuti: socket sul client); il server accetta la connessione del client e così viene instaurato un canale di comunicazione tra i due host.

JAVA SOCKET Java utilizza la classe Socket per la creazione degli oggetti che permettono di stabilire un canale di comunicazione tra un client e un server attraverso il quale si comunica utilizzando due stream Le classi che Java mette a disposizione per l’utilizzo dei socket sono: classe InetAddress; classe ServerSocket; classe Socket

Classe InetAddress La classe InetAddress mette a disposizione diversi metodi per astrarre informazioni dal particolare tipo di indirizzo IP specificato Non sono previsti costruttori e l’unico modo per creare un oggetto di classe InetAddress prevede l’utilizzo di metodi statici, e in particolare sa stessa di effettuare le dovute traduzioni

Classe InetAddress public String getHostName() restituisce il nome dell’host che corrisponde all’indirizzo IP dell’InetAddress; se il nome non è ancora noto (per esempio se l’oggetto è stato creato specificando un indirizzo IP numerico), verrà cercato tramite il DNS; se tale ricerca fallisce, verrà restituito l’indirizzo IP numerico sotto forma di stringa public String getHostAddress() simile al precedente, restituisce però l’indirizzo IP numerico, sotto forma di stringa, corrispondente all’oggetto InetAddress. public byte[] getAddress() l’indirizzo IP numerico restituito sarà sotto forma di matrice di byte; l’ordinamento dei byte è high byte first (che è l’ordinamento tipico della rete) della macchina locale;

La classe Socket Permette di definire una connessione client-server via TCP su entrambi i lati, sia client che server. La differenza tra client e server sta nella modalità di creazione di un oggetto di questo tipo: nel server l’oggetto Socket viene creato dal metodo accept() della classe ServerSocket; il client dovrà provvedere a creare un’istanza di Socket: per creare un socket con un server in esecuzione su un certo host è sufficiente creare un oggetto di classe Socket specificando nel costruttore l’indirizzo Internet dell’host e il numero di porta. Dopo che l’oggetto Socket è stato istanziato, è possibile ottenere (tramite appositi metodi) due stream (uno di input e uno di output): tramite essi è possibile comunicare con l’host, e riceverne messaggi.