di Del Grosso Serafina Corso di laurea specialistica in Economia Informatica Università degli studi G. DAnnunzio Pescara A.A
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 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 dellICQ 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 ICQ è uno dei primi istant messaging che dà la possibilità di instaurare delle conversioni tra utenti on-line. COSE LICQ?
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, lISP gli assegna un indirizzo IP UIN: SERVER Mirabilis IP: AGGIORNA BOB ANNA UIN: IP: SEND MESSAGES Anna è on-line Bob è on-line UINIP
IL PROTOCOLLO ICQ ARCHITETTURA Due tipi di comunicazione: Client-Client e Client-Server LICQ, a livello di trasporto, utilizza sia il protocollo UDP sia il protocollo TCP UDP TCP Login message messages
CLIENT-SERVER UDP Protocollo UDP Porta 4000 (o superiori) Numero di sequenza Acknowledgement per ogni pacchetto inviato dal client al server e viceversa
CLIENT-SERVER FORMATO PACCHETTI: HEADER LengthNameDescription 2 byteVERSIONIdentifies the packet as an ICQ packet 4 byteUINThe senders UIN 4 byteSESSION_IDA random number 2 byteCOMMANDCode for service the server should provide 2 byteSEQ_NUM1Start at a random number 2 byteSEQ_NUM2Start at 1 4 byteCHECKCODE variablePARAMETERS0 or more parameters (depending on COMMAND) PACCHETTI INVIATI DAL CLIENT AL SERVER:
LengthNameDescription 2 byteVERSIONIdentifies the packet as an ICQ packet 4 byteSESSION_IDSame as in client login packet 2 byteCOMMANDCode for service the server should provide 2 byteSEQ_NUM1 2 byteSEQ_NUM2 4 byteUINThe clients UIN 4 byteCHECKODE variablePARAMETERSParameters for the command being sent CLIENT-SERVER FORMATO PACCHETTI: HEADER PACCHETTI INVIATI DAL SERVER AL CLIENT:
COMUNICAZIONE CLIENT-SERVER 1. FASE DI REGISTRAZIONE REG_NEW_USER UIN LOGIN_PACKET LOGIN_REPLY IP dinamico, #porta TCP
COMUNICAZIONE CLIENT-SERVER 2. LISTA DEI CONTATTI CONTACT_LIST ACK Il client comunica al server lelenco degli utenti con i quali desidera interagire. FORMATO DEL PACCHETTO Length Content(if fixed) Designation Description 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 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 linvio del pacchetto ADD_TO_LIST
CLIENT-CLIENT Invio di messaggi, , 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 nellintervallo UDP TCP
LATO CLIENT Off-line invio login_packet Aspetta login_reply non riceve login_reply invio login_packet riceve login_reply invio ACK On line e aspetta user_on_line no user_on_line && no time-out no user_on_line && time-out invio keep alive Aspetta ACK riceve user_on_line invio ACK Connessione TCP IPOTESI: un solo utente nella contact_list CONNESSIONE UDP 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
CONNESSIONE UDP LATO SERVER Aspetta login riceve login_packet Aspetta ACK non riceve ACK invio login_reply riceve ACK invia user_on_line time-out && utenti off-line Aspetta keep alive riceve keep alive invio ACK Aspetta ACK invia login_reply Cerca utenti on-line Non riceve keep alive Utente off-line IPOTESI: un solo utente nella contact_list non riceve ACK invia user_on_line
COMUNICAZIONE TCP 1. FASE DI HANDSHAKE FORMATO INIT_PACKET Length Name Description 2 byte LENGTH Lunghezza di questo pacchetto 1 byte INIT_IDENT Identifica questo pacchetto come inizializzazione 4 byte MY_UIN lUIN del client che invia questo pacchetto 4 byte MY_IP lIP 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 Length Name Description 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 Client A Client B Richiesta TCP 1.Il client A scrive un messaggio da inviare al client B 2.Il client A tenta una connessione al client B ma non ci riesce 3.Il client A invia il pacchetto TCP_REQUEST al server 4.il server aggiunge al pacchetto TCP_REQUEST, lIP e la Porta TCP del client A e lo invia al client B 5.Il client B si connette al client A e invia il pacchetto INIT_PACKET 6.Il client A invia al client B il messaggio costruito al punto 1 7.Il client B legge il messaggio 8.Da questo momento in poi la comunicazione continua come se il client A si fosse appena connesso al client B
ICQ CHAT COSE 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 sono solo due. 2.MULTI CHAT SESSION: gli utenti connessi sono più di due
SINGLE CHAT SESSION 1.Il client A chiede al client B di entrare in chat 2.Il client A crea una chat listen()socket che non sarà inviata al client B ma sarà utilizzata se qualcuno vuole unirsi alla chat 3.Il client B accetta la richiesta e crea una listen()socket che invierà al client A, inserendola nel pacchetto ACK 4.Il client A tenta una connessione sulla porta indicatogli nellACK 5.Il client A e il client B sono connessi 6.Pacchetti di setup
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 A Client B Client A Client B PACCHETTO ACK SessionLength /always 0x0001 in the ACK Chat_Session /always 0x00 in the ACK Chat Port /listen()port in intel order
MULTI CHAT SESSION 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 SI DISTINGUONO TRE CASI:
MULTI CHAT SESSION 1.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. 2.Il client B accetta la richiesta e crea una sua chat listen()socket che sarà inserita nellACK 3.Dopo aver ricevuto lACK, il client A tenta una connessione sulla listen()socket del client B 4.La connessione è creata e i pacchetti di setup vengono scambiati 5.Nei pacchetti di setup il client A fornisce informazioni sugli altri membri della chat 6.Il client B tenta una connessione con gli altri membri 7.La connessione viene creata e i pacchetti di setup vengono scambiati tra tutti i membri. 1° CASO: IL RICHIEDENTE E IN UNA 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 A Client B Client A Client B PACCHETTO ACK SessionLength /always 0x0001 in the ACK Chat_Session /always 0x00 in the ACK Chat Port /listen()port in intel order
Il richiedente non sa che il receiver è in una chat session Il richiedente chiederà una single chat session MULTI CHAT SESSION 2° CASO: IL RECEIVER E IN UNA CHAT SESSION … COSA CAMBIA? Il receiver quando riceve la richiesta deciderà se: unire il client richiedente alla chat session già aperta ( JOIN OPTION ) LACK 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 LOPZIONE JOIN PUO ESSERE SELEZIONATA DA UN SOLO CLIENT 1. Se uno dei due client seleziona lopzione JOIN MULTI CHAT SESSION 2.Se nessuno seleziona lopzione JOIN SINGLE CHAT SESSION
PACCHETTI DI SETUP FASE DI INIZIALIZZAZIONE Client AClient B 1° pacchetto UIN, Nick 2° pacchetto 3° pacchetto UIN, Nick, IP, Count, altri membri IP, Port
CONNESSIONE TCP CONTRARIA 0. Il client A fa una richiesta di chat al client B 1.Il client B accetta la richiesta e il client B invia lindirizzo IP e la Porta con il messaggio ACK 2.Il client A tenta una connessione al client B ma non ci riesce 3.Il client A invia il pacchetto TCP_REQUEST al server 4.il server aggiunge al pacchetto TCP_REQUEST, lIP e la Porta TCP del client A e lo invia al client B 5.Il client B tenta una connessione al client A e ci riesce 6.Il client B invia il pacchetto INIT_PACKET al client A 7.Il client A e il client B si scambiano i pacchetti di setup 8.Inizia la chat session CHAT SESSION
RIFERIMENTI