In un approfondimento precedente abbiamo illustrato il principio di funzionamento dei Messaggi SIP. Abbiamo distinto i messaggi di Richiesta e di Risposta e abbiamo analizzato la struttura tipica del messaggio e le numerose fattispecie previste dalle RFC SIP. In questo nuovo articolo analizziamo i SIP header che sono indispensabili per fornire informazioni circa le richieste di azione e di informazione.
I messaggi SIP di richiesta localizzano, avviano e gestiscono le chiamate mentre le intestazioni SIP (sip header), contenute all’interno di tali messaggi, comunicano gran parte di queste informazioni. Per comprendere a pieno il funzionamento del protocollo SIP e soprattutto per effettuare delle verifiche in caso di problematiche e comportamenti non previsti, è fondamentale che ogni professionista del settore sia in grado di verificare in autonomia la modalità con la quale i SIP header lavorano.
Come funzionano le intestazioni SIP (SIP Header) ?
Un’intestazione SIP è un componente di un messaggio SIP utilizzato per trasmettere informazioni riguardanti il messaggio SIP stesso. Includere le intestazione SIP corrette e formattare correttamente queste intestazioni SIP è fondamentale per garantire che le richieste vengano instradate correttamente ai destinatari corretti. Lo scopo di questo articolo è quello di mostrarvi le intestazioni SIP più comuni.Le 9 SIP header fondamentali per avviare una chiamata VoIP SIP standard.
Un messaggio di INVITE avvia normalmente una sessione, normalmente una chiamata con il protocollo SIP. Sebbene le Intestazioni SIP (SIP Headers) siano molte, possiamo identificare le nove intestazioni SIP che forniscono le informazioni minime richieste per avviare una chiamata attraverso un SIP trunk. Se la chiamata viene avviata con un INVITE, essa viene normalmente conclusa con una richiesta di BYE.1. L’header “To”
L’header “TO” specifica il destinatario della chiamata SIPTo: “(name)” <sip: (user)@(domain)>
2. L’header “Via”
L’ intestazione “VIA” identifica il percorso di una chiamata con il nome del protocollo, la versione del protocollo, il tipo di trasporto, il client agente utente (UAC), la porta del protocollo per la richiesta e un parametro branch che serve come identificatore univoco per ogni transazione SIP . L’intestazione Via instrada le risposte SIP al dispositivo corretto, in modo simile all’indirizzo del mittente apposto su un pacco. Se una richiesta SIP viene instradata attraverso più dispositivi (router, gateway..), ogni UAC aggiunge la propria intestazione VIA alla richiesta prima di inviarla.Via: SIP/(protocol version)/(transport type) (UAC):(protocol port);branch=(branch number)
3. L’header “Call-ID”
L’intestazione SIP Call-ID crea un identificatore univoco globale per la chiamata. Per garantire che ogni identificatore Call-ID sia univoco a livello globale, viene generato una stringa casuale (che spesso haun aspetto questo aspetto: AI9DA8299704F1EB0E e l’indirizzo IP del mittente viene aggiunto a questo numero. Ciò garantisce che il numero Call-ID sarà univoco a livello globale, poiché non ci saranno due dispositivi con lo stesso indirizzo IP.Call-ID: (generated number)@(ip\_address)
4. L’header “Contact”
L’intestazione Contact identifica il percorso più diretto per l’invio di richieste future al dispositivo richiedente. L’intestazione Contact specifica un nome di dominio o un indirizzo IP del chiamante e un tipo di trasporto.Contact: sip:(user)@(domain);transport=(transport type)
5. L’header “From”
L’intestazione From specifica da chi proviene la chiamata.From: “(name)” <sip: (user)@(domain)>
6. L’header “Content-Length”
L’intestazione Content-Length specifica la dimensione del contenuto del messaggio in byte. Un Content-Length pari a zero indica che non c’è nessun corpo del messaggio.Content-Length: (number of bytes in message body)
7. L’header “CSeq”
L’intestazione CSeq specifica il numero di richieste di ogni tipo che sono state inviate. Ad esempio, CSeq: 15 INVITE significa che è la quindicesima richiesta di invite. Il numero aumenta di una unità per ogni richiesta aggiuntiva dello stesso tipo.CSeq: (number) (request type)
8. L’header “Max-Forwards”
L’intestazione Max-Forwards limita il numero di volte in cui una richiesta può essere inoltrata al destinatario. Il numero viene ridotto di una unità ogni volta che la richiesta viene inoltrata. L’intestazione Max-Forwards impedisce a una richiesta di circolare all’infinito sulla rete SIP nel caso un cui il destinatario non possa essere trovato. Il valore predefinito è 70.Max-Forwards: (maximum number of forwards)
9. L’header “Content-Type”
Se il messaggio ha un corpo, l’intestazione Content-Type identifica come è formattato il corpo. Un messaggio di testo potrebbe essere identificato come testo/HTML; un’applicazione che effettua una chiamata potrebbe identificare il contenuto come applicazione/SDP.Content-Type: (type of content)
Le Linee Guida per le Intestazioni SIP e le Compact Headers
Riporto di seguito alcuni suggerimenti e linee guida di comportamento da seguire per ottenere il massimo dell’efficienza con le SIP Header:- Le intestazioni SIP possono essere inserite in qualsiasi ordine. Tuttavia le informazioni essenziali, appena citate, dovrebbero essere elencate per prime. La riga REQUEST non è tecnicamente un’intestazione e va quindi sempre indicata per prima.
- Le intestazioni andrebbero sempre mantenute le più brevi possibili. Per massimizzare la brevità del messaggio è possibile utilizzare le c.d. “Compact headers”. Si tratta di intestazioni semplificate che vengono elencate utilizzando una lettera al poso della forma estesa.
Header Forma Compatta To T Via V Call-ID I Conatct M From F Subject S Contact Length L - Se si utilizza un client SIP di tipo punto-punto (peer) sarà sempre necessario utilizzare un indirizzo IP al posto dell’identificatore user@domain
- La letture e verifica delle intestazioni SIP è fondamentale quando si analizzano i flussi di chiamata al fine di formulare una diagnosi per risolvere eventuali problematiche. Attraverso l’utilizzo di strumenti quali Wireshark è possibile verificare ogni singola SIP Header e verificare la coerenza/correttezza di ogni user, indirizzo IP e Porta.