HTTP adaptation layer per generico protocollo di scambio dati



Documenti analoghi
J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

Introduzione alle applicazioni di rete

appunti delle lezioni Architetture client/server: applicazioni client

Cenni di programmazione distribuita in C++ Mauro Piccolo

Reti di Telecomunicazione Lezione 8

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Protocolli applicativi: FTP

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

I Socket. Laboratorio Software M. Grotto R. Farina

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Esempi di applicazioni internet. WEB Trasferimento File Posta Elettronica Sistema dei nomi di dominio (DNS)

Esercitazione [6] Client/Server con Socket

Approfondimento di Marco Mulas

La sicurezza nel Web

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 24 Gennaio 2005, ore 15.00

Reti di Telecomunicazione Lezione 7

Informatica per la comunicazione" - lezione 8 -

Inizializzazione degli Host. BOOTP e DHCP

ARCHITETTURA DI RETE FOLEGNANI ANDREA

Esercizio 2. Client e server comunicano attraverso socket TCP

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Socket & RMI Ingegneria del Software - San Pietro

Il Protocollo HTTP e la programmazione di estensioni Web

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

Programmazione dei socket con TCP #2

I/O su Socket TCP: read()

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca. Parte II Lezione 5

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

CORSO DI RETI SSIS. Lezione n.2. 2 Novembre 2005 Laura Ricci

Seminario di Sistemi Distribuiti RPC su SOAP

DNS-Tunneling. Reference to. Ettore di Giacinto Luca Montunato

Transmission Control Protocol

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Reti di Calcolatori. Il software

TECNOLOGIE E PROGETTAZIONE DI SISTEMI INFORMATICI E DI TELECOMUNICAZIONI

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

GENERALITÀ. Unità: Canali di comunicazione:

Reti e Sistemi per l Automazione MODBUS. Stefano Panzieri Modbus - 1

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Venerdì 18 Febbraio 2005, ore 9.30

Telematica II 12. Esercitazione/Laboratorio 4

Reti di Telecomunicazione Lezione 6

Prova in itinere - Rete Internet (ing. Giovanni Neglia) Mercoledì 23 Maggio 2007, ore 15.00

P2-11: BOOTP e DHCP (Capitolo 23)

Controllo Winsock di Visual Basic

DATAGRAM SOCKET. Angelastro Sergio Diomede Antonio Viterbo Tommaso

Manuale di Aggiornamento BOLLETTINO. Rel H4. DATALOG Soluzioni Integrate a 32 Bit

GENERAZIONE PREVENTIVI

Do-Dots Protocollo di comunicazione

Esercizi (1-2): da: TCP/IP Sockets in C (Donahoo-Calvert)

Le caselle di Posta Certificata attivate da Aruba Pec Spa hanno le seguenti caratteristiche:

I canali di comunicazione

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

Il formato MIME. Che cosa è MIME?

SSL: applicazioni telematiche SSL SSL SSL. E-commerce Trading on-line Internet banking... Secure Socket Layer

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Martedì 15 Novembre 2005

Reti di Telecomunicazioni Mobile IP Mobile IP Internet Internet Protocol header IPv4 router host indirizzi IP, DNS URL indirizzo di rete

Introduzione alla Posta Elettronica Certificata (PEC): le regole tecniche

Parte II: Reti di calcolatori Lezione 7

9 Febbraio 2015 Modulo 2

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 7 Febbraio 2005, ore 15.00

Indirizzi Internet e. I livelli di trasporto delle informazioni. Comunicazione e naming in Internet

Soluzione dell esercizio del 12 Febbraio 2004

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

PROGRAMMA SVOLTO DI INFORMATICA ANNO SCOLASTICO 2013/2014. DOCENTE: Villani Chiara

MANUALE UTENTE FORMULA PEC

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Prova completa Mercoledì 2 Marzo 2005, ore 14.30

Client - Server. Client Web: il BROWSER

FPf per Windows 3.1. Guida all uso

Opzioni del Socket. Socket Options. Opzioni di Livello Socket. Livello delle Opzioni

Internet, così come ogni altra rete di calcolatori possiamo vederla suddivisa nei seguenti componenti:

Socket TCP. prima parte

Invio SMS. DM Board ICS Invio SMS

Tesina esame Programmazione di Sistemi Mobile realizzata da Roberto Giuliani matricola Sockets e DatagramSocket

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.

VPN CIRCUITI VIRTUALI

Altri tipi di connessione

Corso di Sistemi di Elaborazione delle informazioni. Reti di calcolatori 2 a lezione a.a. 2009/2010 Francesco Fontanella

DISPOSIZIONI DELL AUTORITA PER L ENERGIA ELETTRICA E IL GAS IN TEMA DI STANDARD DI COMUNICAZIONE

Reti diverse: la soluzione nativa

L ISTRUZIONI PER L USO Strumenti, metodi e criticità per creare, gestire e conservare la posta elettronica

Introduzione. Livello applicativo Principi delle applicazioni di rete. Stack protocollare Gerarchia di protocolli Servizi e primitive di servizio 2-1

RoutingInternet Protocol. Algoritmi di instradamento di tipo Distance vector

Note di rilascio. Aggiornamento disponibile tramite Live Update a partire dal. Il supporto per Windows XP e Office 2003 è terminato

POSTA ELETTRONICA (TRADIZIONALE e CERTIFICATA) FIRMA DIGITALE PROTOCOLLO INFORMATICO. Maurizio Gaffuri 11 ottobre 2007

rsystem Maximiliano Marchesi

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Internet e protocollo TCP/IP

LABORATORIO DI SISTEMI

Posta Elettronica Certificata obbligo e opportunità per le Imprese e la PA

Transcript:

HTTP adaptation layer per generico protocollo di scambio dati Sandro Cavalieri Foschini 101786 Emanuele Richiardone 101790 Programmazione in Ambienti Distribuiti I - 01FQT prof. Antonio Lioy A.A. 2002-2003

Cos è HClib? HTTP Channel Library realizza un HTTP adaptation layer Libreria sviluppata in linguaggio C per realizzare un interfaccia utile al programmatore per implementare con facilità una connessione HTTP. Il programmatore, anziché impiegare le funzioni di rete standard offerte dal SO *NIX, ha a disposizione 7 funzioni principali (più alcune altre di supporto), per inviare in maniera trasparente un qualsiasi dato attraverso un canale HTTP con la tradizionale architettura client/server. La comunicazione tra i due host si affida al protocollo affidabile TCP e segue le disposizioni dettate dallo standard HTTP/1.0 (RFC1945). I dati che transitano tra i due capi possono essere di tipo ASCII o binario. In entrambi i casi è possibile inviare il dato così come è (sfruttando per i binari la caratteristica 8-bit clean del protocollo) oppure sfruttare le gli algoritmi di codifica e decodifica integrati nella libreria. Sono stati inseriti elementi del formato MIME 1.0 (RFC2045 e successivi). Tra le codifiche dati previste vi sono la base64 (qualsiasi dato) e la quoted-printable (solo per dati testuali).

Come creare un client? ricevere dati da un server tramite GET create_hclib() get_hclib() oppure spedire dati a un server tramite POST create_hclib() post_hclib()

Come creare un client? GET create_hclib() getaddrinfo() socket() connect() setsockopt() La funzione inizializza la connessione verso il server richiesto, imposta l intervallo di tempo dopo il quale in assenza di risposta del server la connessione cade. Richiede in ingresso il nome e porta del server a cui connettersi, il valore (in secondi) per il timeout. Ritorna il valore del socket descriptor se l operazione si è conclusa con successo. get_hclib() send() recv() elabora La funzione spedisce la richiesta, aspetta la risposta con i dati e, se necessario,decodifica. Richiede in ingresso il socket descriptor creato dalla precedente funzione. In uscita fornisce il buffer ricevuto e a sua lunghezza, la codifica a cui è stato sottoposto al buffer e il tipo MIME del dato ivi contenuto.

Come creare un client? POST create_hclib() getaddrinfo() socket() connect() setsockopt() post_hclib() elabora send() (header) send() (body) recv() check La funzione inizializza la connessione verso il server richiesto, imposta l intervallo di tempo dopo il quale in assenza di risposta del server la connessione cade. Richiede in ingresso il nome e porta del server a cui connettersi, il valore (in secondi) per il timeout. Ritorna il valore del socket descriptor se l operazione si è conclusa con successo. La funzione codifica (se necessario) i dati, li spedisce con la richiesta e aspetta e verifica la risposta. Richiede in ingresso il socket descriptor creato dalla precedente funzione, il buffer che contiene i dati da inviare, la sua lunghezza, l encoding con il quale codificare i dati e il loro tipo MIME. In uscita restituisce il valore 0 se l operazione si e conclusa con successo, oppure un codice d errore.

Come creare un server? listen_hclib() accept_hclib() send_hclib() oppure listen_hclib() accept_hclib() recv_hclib() spedisce dati a un client che ne fa richiesta con GET aspetta di ricevere dati da un client con POST

listen_hclib() socket() setsockopt() bind() listen() Come creare un server? SEND La funzione inizializza il socket, lo fa attendere su una porta fissata e restituisce il socket passivo. Richiede in ingresso il numero della porta su cui attendere e il numero backlog di connessioni client da tenere accodate in attesa. Restituisce il socket descriptor in attesa, o un codice d errore. accept_hclib() accept() send_hclib() elabora recv() check header send() close() La funzione (bloccante!) aspetta che un client si connetta sul sd inizializzato dalla funzione precedente. Ritorna un sd connesso. La funzione codifica (se necessario) i dati da inviare riceve l header della richiesta e lo controlla, spedisce la risposta e chiude la connessione. Richiede in ingresso il socket descriptor connesso dalla precedente funzione, il buffer da inviare, la sua lunghezza, l encoding a cui verranno sottoposti i dati e il loro tipo MIME.

listen_hclib() socket() setsockopt() bind() listen() Come creare un server? RECV La funzione inizializza il socket, lo fa attendere su una porta fissata e restituisce il socket passivo. Richiede in ingresso il numero della porta su cui attendere e il numero backlog di connessioni client da tenere accodate in attesa. Restituisce il socket descriptor in attesa, o un codice d errore. accept_hclib() accept() recv_hclib() recv() check header recv() send() close() elabora La funzione (bloccante!) aspetta che un client si connetta sul sd inizializzato dalla funzione precedente. Ritorna un sd connesso. La funzione riceve l header della richiesta, riceve il corpo, spedisce la risposta (di avvenuta ricezione) e -se necessario- decodifica i dati. Richiede in ingresso il socket descriptor connesso dalla funzione precedente. In uscita fornisce il buffer riempito con i dati spediti dalla POST, la sua lunghezza, quale encoding è avvenuto sul buffer e il tipo MIME dei suoi dati.

Come creare un server? listen_hclib() csd=accept_hclib(lsd) Ciclo di ricezione recv_hclib(csd) recv_hclib(csd) recv_hclib(csd) recv_hclib(csd) close(lsd) recv_hclib(csd)

Gestione pacchetti TCP Il grafico illustra le due situazioni: mentre nella richiesta di GET non si verificano problemi (il lato server deve leggere una richiesta composta dal solo header che è contenuto in un solo pacchetto), nella richiesta POST la send() del client non sa quanti dati ricevere. Problema: la recv() del server (evidenziata in blu nel grafico a fianco) non sa a priori quanti dati deve ricevere dalla send() del client, e in seguito a send() il client non può terminare la connessione in quanto dopo aver spedito deve ancora ricevere la conferma della ricezione corretta dal server. La soluzione è utilizzare due send() dal lato client e due recv() dal alto server: si creano due connessioni una dopo l altra. Nella prima trasmissione è spedito il solo header, che contiene l intestazione della richiesta con i campi HTTP e MIME. Prima di accettare altri dati con la seconda recv(), il server provvede ad elaborare l header avendo quindi a disposizione il numero di byte del corpo: così sa anche quando può terminare la ricezione.

Problema: ricezione di dati che non rimangono tutti in una singola MTU, quindi dati frammentati in diversi pacchetti a livello TCP. Sia la read() che la recv() senza flag ad ogni chiamata ritornano un solo pacchetto TCP, che al massimo può essere grande come l MTU minima sul suo tragitto (path MTU). Il problema può essere parzialmente risolto con un ciclo di read() o con una recv() cha abbia impostato come flag MSG_WAITALL: in questo modo la funzione legge tutto quello che arriva sullo stack fino ad una serie di eventi: Il numero di byte letti raggiunge il valore specificato La funzione riceve un segnale La connessione termina Frammentazione Ci interessa l ultimo punto. Nel caso del GET di un dato dal server, dopo aver inviato il messaggio richiesto lungo magari molte MTU, chiude la connessione con close(); si è quindi stabilito il valore massimo di byte da leggere che rappresenta il massimo ricevibile dalla funzione. La recv() grazie al suddetto flag MSG_WAITALL ritorna quando sono stati letti tutti i dati inviati.

Come è fatto un pacchetto? Full-Request del client post_hclib() POST / HTTP/1.0 Content-type: text/plain; charset= iso5589-1" Content-lenght: 12 MIME-Version: 1.0 Content-transfer-encoding: 8bit data, data, data...

Come è fatto un pacchetto? Full-Response del server send_hclib() HTTP/1.0 200 OK Content-type: text/plain; charset= iso5589-1" Content-lenght: 12 MIME-Version: 1.0 Content-transfer-encoding: 8bit Server: HClib/1.0 data, data, data...

Come è fatto un pacchetto? Full-Request del client get_hclib() GET / HTTP/1.0 Full-Response del server recv_hclib() HTTP/1.0 200 OK Content-type: text/plain; charset= iso5589-1" Content-lenght: 12 MIME-Version: 1.0 Content-transfer-encoding: 8bit Server: HClib/1.0

get_hclib() send_hclib() Diagramma a traliccio illustrativo sulle tempistiche e sul contenuto dei pacchetti in transito, nel caso di richiesta del client (GET) di un dato, che verrà spedito dal server con la SEND. Sullo sfondo (in grigio chiaro) le chiamate alle funzioni di rete effettuate dalle funzioni della libreria (in colore nero). I pacchetti in blu contengono i dati che il programmatore vuole inviare sulla rete.

post_hclib() recv_hclib() Diagramma a traliccio illustrativo sulle tempistiche e sul contenuto dei pacchetti in transito, nel caso di spedizione del client (POST) di un dato, che verrà ricevuto dal server con la RECV. Sullo sfondo (in grigio chiaro) le chiamate alle funzioni di rete effettuate dalle funzioni della libreria (in colore nero). I pacchetti in blu contengono i dati che il programmatore vuole inviare sulla rete.

Codifiche Utilizzata per testo. 7 bit. Adegua le ISO locali (8 bit). quoted-printable Associa ai caratteri non stampabili, estesi e speciali una serie di tre caratteri (un = e due caratteri ASCII standard che rappresentano il valore esadecimale del carattere). Comporta un aumento della lunghezza del messaggio che può raggiungere il triplo della lunghezza originale. Converte un dato qualsiasi perché agisce a livello binario. 6 bit utilizzati della tabella ASCII (7 bit). base64 Comporta un aumento della lunghezza del messaggio pari a circa 1/3 della lunghezza originale. Testo codificato formattato su righe di 76 caratteri (al massimo).