Dialogo e transazione sono due concetti distinti, ma strettamente correlati. Il primo fornisce il contesto di una comunicazione nel tempo, il secondo descrive il meccanismo di scambio dei singoli messaggi SIP. Per comprendere il comportamento della segnalazione SIP è quindi necessario analizzarli separatamente.
Che cos’è una transazione SIP
Una transazione SIP rappresenta lo scambio completo tra una richiesta SIP e tutte le risposte ad essa associate, fino all’ottenimento di una risposta finale.
Nel precedente articolo abbiamo introdotto il concetto di dialogo SIP, descrivendolo come il contesto logico all’interno del quale i messaggi SIP vengono interpretati e correlati nel tempo. Accanto al dialogo, il protocollo SIP introduce un altro elemento strutturale di primaria importanza: la transazione SIP.
Dialogo e transazione operano su livelli differenti della segnalazione. Il dialogo fornisce una visione persistente della relazione tra due User Agent, mentre la transazione descrive il comportamento puntuale dello scambio di un singolo messaggio SIP e delle relative risposte. Analizzare separatamente questi due concetti consente di leggere con maggiore precisione il flusso di segnalazione e di interpretare correttamente i tracciati SIP.
Che cos’è una transazione SIP
Una transazione SIP rappresenta l’insieme completo di messaggi che vengono scambiati a seguito dell’invio di una singola richiesta SIP. La transazione inizia quando una richiesta viene inviata da un client e termina nel momento in cui viene ricevuta una risposta finale.
Durante la vita di una transazione possono essere ricevute una o più risposte provvisorie, come ad esempio 100 Trying o 180 Ringing. Queste risposte non determinano la conclusione della transazione, ma fanno parte del suo normale ciclo di vita. La transazione si conclude solo con una risposta finale, tipicamente una risposta di classe 2xx, 4xx, 5xx o 6xx.
Dal punto di vista architetturale, la transazione è il meccanismo utilizzato da SIP per garantire affidabilità, ordinamento e correlazione dei messaggi, indipendentemente dal protocollo di trasporto utilizzato.
Durata e ambito di una transazione SIP
A differenza del dialogo SIP, che può durare per tutta la vita di una chiamata, una transazione ha una durata limitata nel tempo. Una volta ricevuta la risposta finale, la transazione viene considerata conclusa e non può più essere riutilizzata.
Questo comportamento rende evidente come più transazioni possano coesistere all’interno dello stesso dialogo. Una chiamata VoIP tipica include infatti una transazione INVITE per l’instaurazione della sessione, eventuali transazioni re-INVITE o UPDATE durante la chiamata e una transazione BYE per la sua terminazione.
Ogni transazione è quindi autonoma dal punto di vista del ciclo di vita, pur operando all’interno di un contesto di dialogo più ampio.
Elementi identificativi di una transazione SIP
Una transazione SIP viene identificata attraverso una combinazione di campi presenti nei messaggi SIP, che consentono agli User Agent e agli apparati intermedi di correlare richieste e risposte.
Gli elementi principali utilizzati per l’identificazione di una transazione sono:
- Il parametro branch dell’header Via
- Il metodo SIP utilizzato (INVITE, BYE, CANCEL, ecc.)
- Il campo CSeq, che include il numero di sequenza e il metodo
In particolare, il parametro branch del Via header rappresenta l’elemento chiave utilizzato dal transaction layer. Questo valore viene generato dal client che invia la richiesta e viene utilizzato per associare tutte le risposte alla richiesta originale.
Il ruolo del CSeq nella transazione SIP
Il campo CSeq svolge un ruolo centrale nella gestione delle transazioni SIP. Esso combina un numero di sequenza incrementale con il metodo SIP a cui si riferisce.
All’interno di una singola transazione, il valore di CSeq rimane invariato tra la richiesta e tutte le risposte associate. Questo consente di distinguere transazioni diverse anche quando condividono lo stesso dialogo SIP.
L’uso del CSeq diventa particolarmente evidente nei casi in cui più richieste vengono inviate in sequenza sullo stesso dialogo, come avviene ad esempio con re-INVITE o BYE.
Transazioni INVITE e transazioni non-INVITE
Il protocollo SIP distingue le transazioni in due grandi categorie: transazioni INVITE e transazioni non-INVITE.
Le transazioni INVITE sono utilizzate per l’instaurazione di una sessione e presentano un comportamento più complesso. Possono generare più risposte provvisorie prima della risposta finale e prevedono meccanismi specifici per la gestione degli ACK.
Le transazioni non-INVITE, come quelle associate ai metodi BYE, REGISTER, OPTIONS o CANCEL, seguono invece un flusso più lineare. In questi casi la transazione si conclude con la ricezione di una singola risposta finale.
Questa distinzione influisce direttamente sulla gestione dei timer SIP e sulle logiche di ritrasmissione.
Gestione delle ritrasmissioni nelle transazioni SIP
Uno degli obiettivi principali delle transazioni SIP è la gestione delle ritrasmissioni, soprattutto quando il protocollo SIP utilizza UDP come protocollo di trasporto.
Il transaction layer si occupa di reinviare le richieste SIP nel caso in cui non venga ricevuta una risposta entro un determinato intervallo di tempo. Allo stesso modo, è in grado di riconoscere richieste duplicate e di evitare che vengano elaborate più volte.
Questo comportamento consente di rendere affidabile lo scambio di messaggi SIP anche in presenza di perdita di pacchetti o ritardi di rete.
Relazione tra transazioni SIP e dialogo SIP
Transazioni e dialoghi operano in modo complementare. Una singola transazione può esistere anche al di fuori di un dialogo, come nel caso di un REGISTER o di un OPTIONS.
Quando invece una transazione è associata a un dialogo, essa utilizza i parametri di identificazione del dialogo (Call-ID e tag) per inserirsi nel contesto corretto, pur mantenendo la propria autonomia dal punto di vista del ciclo di vita.
Questa separazione consente al protocollo SIP di gestire in modo efficiente sia operazioni puntuali sia sessioni persistenti.
Transazioni SIP e analisi dei tracciati
Nell’analisi di una cattura SIP, l’individuazione delle transazioni permette di seguire con precisione il comportamento dei singoli messaggi.
Il parametro branch del Via header, insieme al CSeq, consente di identificare una transazione specifica, distinguendo le risposte legittime dalle ritrasmissioni o dai duplicati.
Questo tipo di analisi risulta particolarmente utile per individuare timeout, risposte mancanti o comportamenti non conformi alle specifiche RFC.
Nel prossimo approfondimento l’attenzione potrà spostarsi sul comportamento dei timer SIP e sul loro impatto pratico nelle transazioni INVITE e non-INVITE, osservandone gli effetti direttamente sui flussi di segnalazione reali.
patto pratico nei flussi di chiamata reali.
