Introduzione
Cos’è SIP? SIP è l’acronimo di Session Initiation Protocol, un protocollo text based che nel modello ISO/OSI, si pone a livello di applicazione e fornisce funzioni di controllo per la creazione, la modifica o terminazione di sessioni con uno o più utenti. Come sessione intendiamo uno scambio di dati tra un insieme di partecipanti, nel nostro caso saranno le chiamate Voice over IP.
Nota: questa parte verrà ulteriorlmente sviluppata a approfondita in seguito. Al momento potete consultare http://www.faqs.org/rfcs/rfc3261.html
Analisi di una chiamata SIP
Materiale Utilizzato
- Router Sitecom 4s, 1 porta WAN, 4LAN, DHCP
- Telefono IP Grandstream BudgetTone 101
- Notebook Compaq Presario 2825EA 512MB, WindowsXP, OnDo Sip
- Server by brekeke , SJPhone Sip softphone by sjlabs, Ethereal Network Analyzer opensource.
- Asus MyPal 716WiFi, SJPhone Sip softphone by sjlabs
- D-Link DWL900AP, Wireless Access Point
Primi Passi
Capito cosa è SIP, iniziamo a muovere i primi passi per realizzare la topologia di rete in figura:
Come prima cosa scarichiamo il Sip Proxy Server di brekeke e installiamolo sul computer.
Verifichiamone la corretta operatività collegandoci con un browser web all’indirizzo http://localhost:18080/oss, http://IP_PC:18080/oss, oppure dal link creato in fase di installazione che troviamo facendo Start->Programmi->Brekeke->OnDo->OnDoSipServer->OnDo SipServer Admin Tool.
In ogni modo arriverete a questa pagina:
Login e password di default sono:
- User ID: sa
- Password: sa
Effettuato il login verifichiamo che lo stato del servizio sia attivo.
Giunti a questo punto possiamo scaricare il softphone SJPhone, ovvero un software per pc che simula un telefono SIP e che ci servirà come endpoint per simulare un utente.
Scarichiamolo da http://www.sjlabs.com/ e configuriamolo perché di default supporta solo chiamate IP-IP, mentre noi vogliamo effettuare una registrazione sul sip proxy e chiamare attraverso di lui, simulando il caso reale di un’infrastruttura con più utenti e ciascuno chiamabile con un suo identificativo numerico.
Per configurarlo basta andare sotto Options->Profiles e cliccare su New, comparirà una finestra di questo tipo:
È importante che selezioniate come profile: Call trough SIP proxy! Quindi click su OK e cambiamo solo questi due parametri, sotto SIP Proxy mettiamo l’indirizzo e la porta del server proxy, nel nostro caso l’ip sarà 192.168.0.2 mentre la porta è quella di default per SIP ed è la 5060.
Ultima configurazione da fare è sotto STUN, bisogna togliere la spunta da : Use discovered adrress in SIP. Quindi OK e comparirà una finestra che vi chiederà come volete registrarvi sul proxy server, nel nostro caso mettiamo 1003 e come password *. Se ora ritorniamo al pannello di amministrazione del server sip, e andiamo sotto la voce Registered noteremo che comparirà un utente registrato, l’utente 1003.
Ci rimane da configurare il telefono. Il BudgetTone esce di fabbrica con l’opzione di ricevere un indirizzo IP da un dhcp, quindi basta collegarlo al router e aspettare che riceva il suo indirizzo.
Quindi collegandoci con un browser all’indirizzo IP del telefono, visualizzeremo una pagina di questo tipo:
La password di default per accedere al telefono è admin. A questo punto basta configurare sotto Advanced Settings l’IP del SIP Proxy Server, nel nostro caso 192.168.0.2, la SIP User ID, 1010 per noi, l’authenticate id 1010, l’authenticate password e se volete il nome.
In questo momento tutti gli altri parametri non ci interessano quindi clicchiamo su update e poi su reboot per fare un riavvio del terminale. Attendiamo qualche istante e verifichiamo la corretta registrazione sul sip server.
Benissimo, abbiamo finito la parte di configurazione per i nostri semplici test.
Understanding SIP
Inizia ora la parte di test vero e proprio che ci servirà per capire meglio SIP. Per questo ci occorre ethereal, che dobbiamo installare sul nostro pc dopo averlo scaricato da [1] Prima di installare ethereal scaricate e installate anche winpcap, lo trovate sul sito di ethereal o http://winpcap.polito.it/ Io su Windows XP con service pack 2 ho installato winpcap 3.0.
Ethereal è un network analyzer, chiamarlo semplicemente sniffer mi sembra banale, che ci consente di analizzare il traffico in uscita/entrata dall’interfaccia di rete del nostro notebook, o più in generale pc. Lanciamo Ethereal e se lo abbiamo chiuso nel frattempo SJPhone. Facciamo partire la fase di capture di ethereal e iniziamo a chiamare dal pc al telefono. Qui potete agire come meglio credete, rispondere, parlare, chiudere la chiamata dal telefono e stoppare il capture. Oppure non rispondere e stoppare la chiamata.
Insomma, fate voi secondo la vostra fantasia. A me interessa solo mostrarvi dei grafici ottenuti tramite gli strumenti di analisi di Ethereal che ci fanno comprendere meglio come avviene una chiamata sip e quali possono essere le problematiche più generali legate alla trasmissione della voce su IP.
Vediamo nel dettaglio come avviene una chiamata SIP:
Si noti la direzione delle frecce, dalla sorgente alla destinazione. Nel caso di figura, si inizia con un invite da parte di 192.168.0.2, il softphone sul pc, diretto al telefono IP. Il Trying viene generato dal proxy server, che informa il softphone della ricezione dell’invito e del tentativo di inoltrare la chiamata a destinazione. A questo punto visto che l’utente è libero, il telefono risponde con un Ringing, ovvero avverte che sta squillando. Quando alzo la cornetta del telefono IP, invio una risposta del tipo 200 OK che informa il chiamante che si può iniziare la trasmissione. Segue poi la chiamata vera e propria con il flusso di dati rtp, e quando chiudo la conversazione posando la cornetta del telefono IP, viene mandato un BYE all’altro endpoint che rispnde con un 200 OK.
Complichiamo un po’ la topologia gi rete, aggiungendo un access point wireless a cui è collegato un palmare dotato di scheda WiFi. In modo da realizzare una rete come in figura:
Sul palmare è installato il client per PocketPC di SJPhone, che si configura come il software da PC. Il palmare si registra con identificativo 1002 sul SIP proxy e chiama il telefono IP, cambia qualcosa rispetto alla situazione precedente? Osserviamo la figura sottostante:
Rispetto al caso precedente notate perdiamo il flusso RTP, perché è end-to-end ed Ethereal lo abbiamo sul pc che non comunica con nessuno, però notiamo un punto di passaggio in più nell’instaurazione di chiamata. Il passaggio in più non è altro che il proxy SIP, che si preoccupa di instradare correttamente la chiamata. Nel nostro caso, l’Invite fatto dal palmare, 192,168.0.6, viene girato dal proxy SIP, 192.168.0.2, al telefono IP, 192.168.0.5. Quest’ultimo risponde al proxy SIP con un Trying e un Ringing che si preoccupa di inoltrarlo al client sul palmare. Stessa cosa per il messaggio 200 OK, l’ACK e per i messaggi di chiusura.
Advanced Topics
Analizzati meglio i processi di instaurazione e terminazione della sessione facciamo qualche altra considerazione guidata dai grafici, in questo caso i grafici dello jiterr legati a due situazioni di rete diverse tra loro, relative alla prima topologia.
Caso 1 Low Load
Caso 2 Medium High Load
Il verde rappresenta lo jitter nel flusso di comunicazione IP Phone – PC, il nero viceversa.
Nel primo caso sulla semplice LAN di test l’unico traffico presente era quello telefonico e il picco massimo di jitter è di poco superiore ai 1000ms. Nel secondo caso la LAN di test è stata collegata ad una CPV di FASTWEB, si è aggiunto un PC sul router dal quale si stava effettuando un upload verso un server ftp esterno con FileZilla la banda in upload era compresa tra i 500 e i 600 Kb/s. Lo jitter per il flusso IP Phone PC rimane pressoché costante intorno ai 1000ms, mentre nell’altro senso il picco massimo sfiora i 3500ms.
Premettendo che queste prove andrebbero ripetute e quindi hanno una validità più teorica che pratica, l’interrogativo che ci dobbiamo porre è: in una situazione più complicata, o meglio reale, che cosa possiamo fare? Non vi rispondo ma vi dico solamente: QoS!