di Del Grosso Serafina Corso di laurea specialistica

  • Slides: 30
Download presentation
di Del Grosso Serafina Corso di laurea specialistica in Economia Informatica Università degli studi

di Del Grosso Serafina Corso di laurea specialistica in Economia Informatica Università degli studi “G. D’Annunzio” Pescara A. A. 2005 -2006

ICQ: UN PO’ DI STORIA Ø Fino al 1996, era possibile collegarsi al World

ICQ: UN PO’ DI STORIA Ø Fino al 1996, era possibile collegarsi al World Wide Web, ma non era consentita alcuna forma di interconnessione tra gli utenti on-line. TUTTO CIO’ CHE SI CONOSCE Ø JULE SUL 1996 PROTOCOLLO - Yair Goldfinger (26 Arik Vardi (27 ICQanni), E’ STATO anni), Sefi Vigiser (25 anni) e Ammon Amir (24 anni) OTTENUTO DALLA costituirono la Mirabilis, con lo scopo di creare un nuovo SPERIMENTAZIONE, modo di comunicare in Internet. ANALIZZANDO I PACCHETTI Ø NOVEMBER 1996 – fu sviluppata la prima versione TRASMESSI E RICEVUTI DAI dell’ICQ PROGRAMMI STANDARD. Ø Col tempo il protocollo ICQ ha subito diverse modifiche. Attualmente vi sono otto versioni del protocollo ICQ, ognuna delle quali è compatibile con la precedente.

ICQ: ELEMENTI NECESSARI Ø PC connesso ad Internet Ø Programma “client” sul pc Ø

ICQ: ELEMENTI NECESSARI Ø PC connesso ad Internet Ø Programma “client” sul pc Ø Registrazione al server Mirabilis

COS’E’ L’ICQ? ICQ suona come “I SEEK YOU” ICQ è uno dei primi “istant

COS’E’ L’ICQ? ICQ suona come “I SEEK YOU” ICQ è uno dei primi “istant messaging” che dà la possibilità di instaurare delle conversioni tra utenti on-line.

COME FUNZIONA ICQ: UN ESEMPIO • In fase di installazione, ICQ assegna ad ogni

COME FUNZIONA ICQ: UN ESEMPIO • In fase di installazione, ICQ assegna ad ogni utente un Numero Identificativo Universale (UIN) • Quando un utente si connette ad Internet, l’ISP gli assegna un indirizzo IP SERVER Mirabilis UIN 12345678 IP : 1 P I e -lin na è on Bo b An BOB UIN: 12345678 43896863 0. 2 5 . 1 1 3 87643902 : 17 è on 3. 8. 05876584 12 -lin e SEND MESSAGES 131. 156. 5. 9 76540213 AGGIORNA . 9 5 6. IP ANNA UIN: 87643902 170. 23. 8. 12

IL PROTOCOLLO ICQ es m in Lo g UDP TCP UDP messages ge UDP

IL PROTOCOLLO ICQ es m in Lo g UDP TCP UDP messages ge UDP sa es § L’ICQ, a livello di trasporto, utilizza sia il protocollo UDP sia il protocollo TCP m § Due tipi di comunicazione: Client-Client e Client-Server n gi sa Lo ge ARCHITETTURA

CLIENT-SERVER • Protocollo UDP • Porta 4000 (o superiori) • Numero di sequenza •

CLIENT-SERVER • Protocollo UDP • Porta 4000 (o superiori) • Numero di sequenza • “Acknowledgement” per ogni pacchetto inviato dal client al server e viceversa UDP

CLIENT-SERVER FORMATO PACCHETTI: HEADER PACCHETTI INVIATI DAL CLIENT AL SERVER: Length Name Description 2

CLIENT-SERVER FORMATO PACCHETTI: HEADER PACCHETTI INVIATI DAL CLIENT AL SERVER: Length Name Description 2 byte VERSION Identifies the packet as an ICQ packet 4 byte UIN The sender’s UIN 4 byte SESSION_ID A random number 2 byte COMMAND Code for service the server should provide 2 byte SEQ_NUM 1 Start at a random number 2 byte SEQ_NUM 2 Start at 1 4 byte CHECKCODE variable PARAMETERS 0 or more parameters (depending on COMMAND)

CLIENT-SERVER FORMATO PACCHETTI: HEADER PACCHETTI INVIATI DAL SERVER AL CLIENT: Length Name Description 2

CLIENT-SERVER FORMATO PACCHETTI: HEADER PACCHETTI INVIATI DAL SERVER AL CLIENT: Length Name Description 2 byte VERSION Identifies the packet as an ICQ packet 4 byte SESSION_ID Same as in client login packet 2 byte COMMAND Code for service the server should provide 2 byte SEQ_NUM 1 2 byte SEQ_NUM 2 4 byte UIN 4 byte CHECKODE variable PARAMETERS The client’s UIN Parameters for the command being sent

COMUNICAZIONE CLIENT-SERVER 1. FASE DI REGISTRAZIONE REG_NEW_USER UIN LOGIN_PACKET IP dinam ico, #po rta

COMUNICAZIONE CLIENT-SERVER 1. FASE DI REGISTRAZIONE REG_NEW_USER UIN LOGIN_PACKET IP dinam ico, #po rta TCP LOGIN_REPLY

COMUNICAZIONE CLIENT-SERVER 2. LISTA DEI CONTATTI Il client comunica al server l’elenco degli utenti

COMUNICAZIONE CLIENT-SERVER 2. LISTA DEI CONTATTI Il client comunica al server l’elenco degli utenti con i quali desidera interagire. CONTACT_LIST ACK FORMATO DEL PACCHETTO Length Content(if fixed) Designation Description 1 byte xx 4 bytes xx xx. . . 4 bytes xx xx NUM_CONTACTS UIN_1 Number of UINs in this packet 1 st UIN in your contact list UIN_n Last UIN in your contact list Il client può, in ogni momento, aggiungere nuovi utenti alla propria lista dei contatti, mediante l’invio del pacchetto “ADD_TO_LIST”

CLIENT-CLIENT • Invio di messaggi, e -mail, url, contatti, file • Video conferenze •

CLIENT-CLIENT • Invio di messaggi, e -mail, url, contatti, file • Video conferenze • Telefonare on-line • Chat • Game • Invio di messaggi vocali

CLIENT - CLIENT • Inizialmente è necessaria connessione UDP una • La connessione diretta

CLIENT - CLIENT • Inizialmente è necessaria connessione UDP una • La connessione diretta tra client utilizza il protocollo TCP • “Acknowledgement” • Ogni tipo di connessione (Chat, File, Message) ha una propria “listening socket” • Tipicamente le porte TCP utilizzate sono nell’intervallo 1200 -1300 TCP UDP

CONNESSIONE UDP LATO CLIENT non riceve login_reply invio login_packet LOGIN_PACKET invio login_packet TCP_MSGPORT Aspetta

CONNESSIONE UDP LATO CLIENT non riceve login_reply invio login_packet LOGIN_PACKET invio login_packet TCP_MSGPORT Aspetta login_reply */porta che il client accetterà per le connessioni TCP PASSWORD */max 8 caratteri Off-line TCP_MSGIP TCP_FLAG Aspetta ACK STATUS */indirizzo IP del client no “user_on_line” && time-out*/il client può riceve login_reply invio ACK instaurare una connessione TCP? no “user_on_line” On line && no time-out invio “keep alive” */0 x 004=si 0 x 006=noe aspetta L “user_on_line” */lo stato del client durante il login TCP_VER */versione del protocollo TCP usata dal client riceve “user_on_line” SEQ_LOGIN invio ACK uno per ogni “login_packet” */numero di sequenza: TCP IPOTESI: un solo utente nella “contact_list” Connessione

CONNESSIONE UDP LATO SERVER Aspetta login riceve “login_packet” non riceve ACK invia “login_reply” invio

CONNESSIONE UDP LATO SERVER Aspetta login riceve “login_packet” non riceve ACK invia “login_reply” invio login_reply Aspetta ACK Non riceve keep alive riceve ACK Utente off-line Aspetta “keep alive” time-out && utenti off-line L L Cerca utenti on-line invia “user_on_line” riceve “keep alive” invio ACK Aspetta ACK IPOTESI: un solo utente nella “contact_list” non riceve ACK invia “user_on_line”

COMUNICAZIONE TCP 1. FASE DI HANDSHAKE FORMATO INIT_PACKET Length 2 byte 1 byte 4

COMUNICAZIONE TCP 1. FASE DI HANDSHAKE FORMATO INIT_PACKET Length 2 byte 1 byte 4 byte Name LENGTH INIT_IDENT MY_UIN MY_IP MY_PORT Description Lunghezza di questo pacchetto Identifica questo pacchetto come inizializzazione l’UIN del client che invia questo pacchetto l’IP del client che invia questo pacchetto Porta TCP dalla quale il client riceverà messaggi NOTE: • Questo messaggio è lo stesso per ogni tipo di socket: Chat, File, Message. • Per questo messaggio il lato receiver non invierà alcuna risposta

COMUNICAZIONE TCP 2. INVIO DEL MESSAGGIO FORMATO CHANNEL_MESSAGE Length 2 byte Name LENGTH Description

COMUNICAZIONE TCP 2. INVIO DEL MESSAGGIO FORMATO CHANNEL_MESSAGE Length 2 byte Name LENGTH Description Lunghezza di questo pacchetto 4 byte UIN del “sender” 2 byte VERSION Versione del protocollo ICQ 2 byte MSG_COMMAND Tipo di messaggio 2 byte LENGTH Lunghezza del messaggio Variable MESSAGE Testo del messaggio 4 byte IP Indirizzo IP del sender 4 byte PORT Porta TCP per i messaggi in entrata 2 byte TCP_SEQUENCE Numero di sequenza

CONNESSIONE TCP CONTRARIA P TC a st ie P TC 7. 8. ch 6.

CONNESSIONE TCP CONTRARIA P TC a st ie P TC 7. 8. ch 6. Ri 5. st a 4. ie 3. Client B Client A ch 2. Il client A scrive un messaggio da inviare al client B Il client A tenta una connessione al client B ma non ci riesce Il client A invia il pacchetto “TCP_REQUEST” al server il server aggiunge al pacchetto “TCP_REQUEST”, l’IP e la Porta TCP del client A e lo invia al client B Il client B si connette al client A e invia il pacchetto “INIT_PACKET” Il client A invia al client B il messaggio costruito al punto 1 Il client B legge il messaggio Da questo momento in poi la comunicazione continua come se il client A si fosse appena connesso al client B Ri 1.

ICQ CHAT COS’E’ UNA “CHAT SESSION”? CONNESSIONE TRA DUE O PIÙ UTENTI IN CUI

ICQ CHAT COS’E’ UNA “CHAT SESSION”? CONNESSIONE TRA DUE O PIÙ UTENTI IN CUI I MESSAGGI INVIATI E RICEVUTI VENGONO VISUALIZZATI IN UNA STESSA FINESTRA. OGNI “CHAT SESSION” HA UNA PROPRIA “listen()socket”

ICQ CHAT DUE TIPOLOGIE DI “CHAT SESSION”: 1. SINGLE CHAT SESSION: gli utenti connessi

ICQ CHAT DUE TIPOLOGIE DI “CHAT SESSION”: 1. SINGLE CHAT SESSION: gli utenti connessi sono solo due. 2. MULTI CHAT SESSION: gli utenti connessi sono più di due

“SINGLE CHAT SESSION” 1. 2. 3. 4. 5. 6. Il client A chiede al

“SINGLE CHAT SESSION” 1. 2. 3. 4. 5. 6. Il client A chiede al client B di entrare in chat Il client A crea una “chat listen()socket” che non sarà inviata al client B ma sarà utilizzata se qualcuno vuole unirsi alla chat Il client B accetta la richiesta e crea una listen()socket che invierà al client A, inserendola nel pacchetto ACK Il client A tenta una connessione sulla porta indicatogli nell’ACK Il client A e il client B sono connessi Pacchetti di setup

SINGLE CHAT SESSION PACCHETTO DI RICHIESTA Client B Session. Length /always 0 x 0001

SINGLE CHAT SESSION PACCHETTO DI RICHIESTA Client B Session. Length /always 0 x 0001 for single chat session Chat_Session /always 0 x 00 for single chat session Chat Port /always 0 x 0000 Client A PACCHETTO ACK Client B Client A Session. Length /always 0 x 0001 in the ACK Chat_Session /always 0 x 00 in the ACK Chat Port /listen()port in intel order

“MULTI CHAT SESSION” SI DISTINGUONO TRE CASI: 1. IL RICHIEDENTE E’ IN UNA CHAT

“MULTI CHAT SESSION” SI DISTINGUONO TRE CASI: 1. IL RICHIEDENTE E’ IN UNA CHAT SESSION 2. IL RECEIVER E’ GIA’ IN UNA CHAT SESSION 3. SIA IL RICHIEDENTE CHE IL RECEIVER SONO GIA’ IN UNA CHAT SESSION

“MULTI CHAT SESSION” 1° CASO: IL RICHIEDENTE E’ IN UNA CHAT SESSION 1. 2.

“MULTI CHAT SESSION” 1° CASO: IL RICHIEDENTE E’ IN UNA CHAT SESSION 1. 2. 3. 4. 5. 6. 7. Il messaggio iniziale conterrà la lista di tutti gli altri utenti della chat session e la listen()socket che è stata creata quando il client A ha inviato, per la prima volta, il messaggio di richiesta di una chat. Il client B accetta la richiesta e crea una sua chat listen()socket che sarà inserita nell’ACK Dopo aver ricevuto l’ACK, il client A tenta una connessione sulla listen()socket del client B La connessione è creata e i pacchetti di setup vengono scambiati Nei pacchetti di setup il client A fornisce informazioni sugli altri membri della chat Il client B tenta una connessione con gli altri membri La connessione viene creata e i pacchetti di setup vengono scambiati tra tutti i membri.

MULTI CHAT SESSION PACCHETTO DI RICHIESTA Session. Length /length of the chat session Chat_Session

MULTI CHAT SESSION PACCHETTO DI RICHIESTA Session. Length /length of the chat session Chat_Session /list of all those in the session Chat Port /chat listen()port for this session in intel order Client B Client A PACCHETTO ACK Client B Client A Session. Length /always 0 x 0001 in the ACK Chat_Session /always 0 x 00 in the ACK Chat Port /listen()port in intel order

“MULTI CHAT SESSION” 2° CASO: IL RECEIVER E’ IN UNA CHAT SESSION Il richiedente

“MULTI CHAT SESSION” 2° CASO: IL RECEIVER E’ IN UNA CHAT SESSION Il richiedente non sa che il receiver è in una chat session Il richiedente chiederà una ”single chat session” … COSA CAMBIA? Il receiver quando riceve la richiesta deciderà se: • unire il client richiedente alla chat session già aperta (JOIN OPTION) L’ACK conterrà la listen()socket della chat session creata precedentemente I pacchetti di setup conterranno le informazioni sugli altri membri • creare una nuova single chat session con il client richiedente

“MULTI CHAT SESSION” 3° CASO: IL RECEIVER E IL RICHIEDENTE SONO IN UNA CHAT

“MULTI CHAT SESSION” 3° CASO: IL RECEIVER E IL RICHIEDENTE SONO IN UNA CHAT SESSION ICQ NON PERMETTE LA FUSIONE TRA DUE “CHAT SESSION” L’OPZIONE “JOIN” PUO’ ESSERE SELEZIONATA DA UN SOLO CLIENT 1. Se uno dei due client seleziona l’opzione JOIN 2. Se nessuno seleziona l’opzione JOIN “MULTI CHAT SESSION” “SINGLE CHAT SESSION”

PACCHETTI DI SETUP FASE DI INIZIALIZZAZIONE Client A 1° pacchetto Client B UIN, Nic

PACCHETTI DI SETUP FASE DI INIZIALIZZAZIONE Client A 1° pacchetto Client B UIN, Nic k bri” 2° pacchetto m e m i r t, “alt n u o C , ick, IP N , N I U 3° pacchetto IP, Port

CHAT SESSION CONNESSIONE TCP CONTRARIA 0. 1. 2. 3. 4. 5. 6. 7. 8.

CHAT SESSION CONNESSIONE TCP CONTRARIA 0. 1. 2. 3. 4. 5. 6. 7. 8. Il client A fa una richiesta di chat al client B Il client B accetta la richiesta e il client B invia l’indirizzo IP e la Porta con il messaggio ACK Il client A tenta una connessione al client B ma non ci riesce Il client A invia il pacchetto “TCP_REQUEST” al server il server aggiunge al pacchetto “TCP_REQUEST”, l’IP e la Porta TCP del client A e lo invia al client B Il client B tenta una connessione al client A e ci riesce Il client B invia il pacchetto “INIT_PACKET” al client A Il client A e il client B si scambiano i pacchetti di setup Inizia la chat session

RIFERIMENTI Ø www. icqinfo. com Ø www. icq. com Ø www. mirabilis. com

RIFERIMENTI Ø www. icqinfo. com Ø www. icq. com Ø www. mirabilis. com