300 likes | 411 Views
PROTOCOLLO ICQ. 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.
E N D
PROTOCOLLO ICQ 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 Wide Web, ma non era consentita alcuna forma di interconnessione tra gli utenti on-line. • JULE 1996 - Yair Goldfinger (26 anni), Arik Vardi (27 anni), Sefi Vigiser (25 anni) e Ammon Amir (24 anni) costituirono la Mirabilis, con lo scopo di creare un nuovo modo di comunicare in Internet. • NOVEMBER 1996 – fu sviluppata la prima versione dell’ICQ • Col tempo il protocollo ICQ ha subito diverse modifiche. Attualmente vi sono otto versioni del protocollo ICQ, ognuna delle quali è compatibile con la precedente. TUTTO CIO’ CHE SI CONOSCE SUL PROTOCOLLO ICQ E’ STATO OTTENUTO DALLA SPERIMENTAZIONE, ANALIZZANDO I PACCHETTI TRASMESSI E RICEVUTI DAI PROGRAMMI STANDARD.
ICQ: ELEMENTI NECESSARI • PC connesso ad Internet • Programma “client” sul pc • Registrazione al server Mirabilis
ICQ suona come “I SEEK YOU” COS’E’ L’ICQ? 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 utente un Numero Identificativo Universale (UIN) • Quando un utente si connette ad Internet, l’ISP gli assegna un indirizzo IP SERVER Mirabilis 12345678 131.156.5.9 AGGIORNA 76540213 87643902 170.23.8.12 43896863 IP:131.156.5.9 IP:170.23.8.12 05876584 Anna è on-line Bob è on-line ANNA BOB SEND MESSAGES UIN: 87643902 UIN: 12345678
IL PROTOCOLLO ICQ ARCHITETTURA Login message Login message • Due tipi di comunicazione: Client-Client e Client-Server • L’ICQ, a livello di trasporto, utilizza sia il protocollo UDP sia il protocollo TCP UDP UDP TCP UDP messages
CLIENT-SERVER • Protocollo UDP • Porta 4000 (o superiori) • Numero di sequenza • “Acknowledgement” per ogni pacchetto inviato dal client al server e viceversa UDP UDP
CLIENT-SERVERFORMATO PACCHETTI: HEADER PACCHETTI INVIATI DAL CLIENT AL SERVER:
CLIENT-SERVERFORMATO PACCHETTI: HEADER PACCHETTI INVIATI DAL SERVER AL CLIENT:
COMUNICAZIONE CLIENT-SERVER 1. FASE DI REGISTRAZIONE REG_NEW_USER UIN LOGIN_PACKET IP dinamico, #porta TCP LOGIN_REPLY
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 LengthContent(if fixed) DesignationDescription 1 byte xx NUM_CONTACTS Number of UINs in this packet 4 bytes xx xx xx xx UIN_1 1st UIN in your contact list ............. 4 bytes xx xx xx xx 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 • Telefonare on-line • Chat • Game • Invio di messaggi vocali
CLIENT - CLIENT • Inizialmente è necessaria una connessione UDP • 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 LOGIN_PACKET TCP_MSGPORT */porta che il client accetterà per le connessioni TCP PASSWORD */max 8 caratteri TCP_MSGIP */indirizzo IP del client TCP_FLAG */il client può instaurare una connessione TCP? */0x004=si 0x006=no STATUS */lo stato del client durante il login TCP_VER */versione del protocollo TCP usata dal client SEQ_LOGIN */numero di sequenza: uno per ogni “login_packet” invio login_packet invio login_packet Aspetta login_reply Off-line riceve login_reply no “user_on_line” && time-out invio ACK On line e aspetta “user_on_line” no “user_on_line” && no time-out Aspetta ACK invio “keep alive” L riceve “user_on_line” Connessione TCP invio ACK IPOTESI: un solo utente nella “contact_list”
CONNESSIONE UDP LATO SERVER riceve “login_packet” non riceve ACK invio login_reply invia “login_reply” Aspetta login Aspetta ACK Non riceve keep alive riceve ACK time-out && utenti off-line L Utente off-line Cerca utenti on-line L Aspetta “keep alive” invia “user_on_line” riceve “keep alive” invio ACK non riceve ACK Aspetta ACK invia “user_on_line” IPOTESI: un solo utente nella “contact_list”
COMUNICAZIONE TCP 1. FASE DI HANDSHAKE FORMATO INIT_PACKET LengthNameDescription 2 byte LENGTH Lunghezza di questo pacchetto 1 byte INIT_IDENT Identifica questo pacchetto come inizializzazione 4 byte MY_UIN l’UIN del client che invia questo pacchetto 4 byte MY_IP l’IP del client che invia questo pacchetto 4 byte MY_PORT 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 LengthNameDescription 2 byte LENGTH Lunghezza di questo pacchetto 4 byte UIN 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 • 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 Client B Client A Richiesta TCP Richiesta TCP
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”: • SINGLE CHAT SESSION: gli utenti connessi sono solo due. • MULTI CHAT SESSION: gli utenti connessi sono più di due
“SINGLE CHAT SESSION” • 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
SINGLE CHAT SESSION PACCHETTO DI RICHIESTA SessionLength /always 0x0001 for single chat session Chat_Session /always 0x00 for single chat session Chat Port /always 0x0000 Client B Client A PACCHETTO ACK SessionLength /always 0x0001 in the ACK Chat_Session /always 0x00 in the ACK Chat Port /listen()port in intel order Client B Client A
“MULTI CHAT SESSION” • IL RICHIEDENTE E’ IN UNA CHAT SESSION • IL RECEIVER E’ GIA’ IN UNA CHAT SESSION • SIA IL RICHIEDENTE CHE IL RECEIVER SONO GIA’ IN UNA CHAT SESSION SI DISTINGUONO TRE CASI:
“MULTI CHAT SESSION” 1° CASO: IL RICHIEDENTE E’ IN UNA CHAT SESSION • 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
MULTI CHAT SESSION PACCHETTO DI RICHIESTA SessionLength /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 SessionLength /always 0x0001 in the ACK Chat_Session /always 0x00 in the ACK Chat Port /listen()port in intel order Client B Client A
“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 SESSION ICQ NON PERMETTE LA FUSIONE TRA DUE “CHAT SESSION” L’OPZIONE “JOIN” PUO’ ESSERE SELEZIONATA DA UN SOLO CLIENT • Se uno dei due client seleziona l’opzione JOIN “MULTI CHAT SESSION” • Se nessuno seleziona l’opzione JOIN “SINGLE CHAT SESSION”
PACCHETTI DI SETUP FASE DI INIZIALIZZAZIONE Client A Client B 1° pacchetto UIN, Nick 2° pacchetto UIN, Nick, IP, Count, “altri membri” IP, Port 3° pacchetto
CHAT SESSION CONNESSIONE TCP CONTRARIA 0.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