Subsections


Real Time Protocol (RTP)

RTP [16] è un protocollo di livello applicazione, ed è stato progettato per essere indipendente dal protocollo di trasporto, anche se tipicamente viene utilizzato al di sopra di UDP e lo completa di quelle funzionalità necessarie alle trasmissioni in real-time. É bene dire subito che RTP non garantisce in alcun modo la qualità del servizio, ne tanto meno riserva le risorse di rete, semplicemente fornisce alcune informazioni come numeri di sequenza e timestamp.

Viene affiancato da un altro protocollo, RTCP (Real Time Control Protocol) che permette un monitoraggio sulla trasmissione e fornisce anche un modo per distribuire informazioni sui partecipanti alla sessione.

RTP segue le linee guida fornite da Clark e Tennenhouse in [18], quindi è in un certo senso malleabile e può essere facilmente modificato/esteso al fine di supportare nuovi tipi di applicazione o architetture di rete. Quindi quando si decide di utilizzare RTP per una nuova applicazione è necessario produrre due documenti che completano la descrizione dell'uso di RTP:

Un tipico scenario di utilizzo di RTP è la videoconferenza. Se sono usati sia l'audio che il video questi tipicamente sono trasmessi in differenti sessioni RTP, una sessione RTP è identificata da una coppia di indirizzi di livello trasporto (indirizzo IP + numero di porto), nel caso di multicast l'indirizzo di destinazione è comune a tutti i partecipanti. Utilizzando due sessioni RTP è possibile fare in modo ad esempio che alcuni partecipanti ricevano sia l'audio che il video, mentre altri ricevano solo uno dei due.

RTP prevede anche l'utilizzo dei cosiddetti Mixer e Traduttori. I primi sono usati ad esempio per riunire i flussi provenienti da più sorgenti in un unico stream multimediale riducendone anche la larghezza di banda. In questo modo anche sorgenti collegate con link non velocissimi potranno partecipare alla sessione. I Traduttori invece possono essere utilizzati per aggirare dei problemi che si potrebbero avere quando ad esempio l'host si trova dietro un firewall.

In figura [*] è mostrato l'header di RTP.

Figure: L'header di RTP
\resizebox*{11cm}{!}{\includegraphics{immagini/CAP3/HeaderRTP.eps}}

Version (V):
2bit
Indica la versione del protocollo, attualmente è 2.
Padding (P):
1bit
Se settato il pacchetto contiene uno o più ottetti di riempimento alla fine. L'ultimo ottetto conterrà il numero di ottetti di riempimento inseriti.
Extension(X):
1bit
Se settato l'header è seguito da un header extension (definito nel profilo).
CSRC count(CC):
4bit
Contiene il numero di Contributing Sources identifiers che seguono l'header base.
Marker(M):
1bit
L'interpretazione di questo bit è definita nel profilo. Si può anche decidere di non utilizzarlo, estendendo quindi il campo successivo ad 8 bit.
Payload type(PT):
7bit
Contiene l'identificativo del payload, i relativi codici vanno definiti nel profilo.
Sequence Number:
16bit
Numero di sequenza del pacchetto. Il valore iniziale è scelto a caso, e successivamente viene incrementato di 1 per ogni pacchetto
Timestamp:
32bit
Riflette l'istante di campionamento del primo ottetto del payload. Se i pacchetti sono generati periodicamente, viene considerato allora l'istante nominale di campionamento, e quindi il timestamp viene incrementato di 1 per ogni periodo di campionamento, il valore iniziale è comunque casuale. Più pacchetti possono avere lo stesso timestamp, come accade, ad esempio, se una frame video viene spedita utilizzando più pacchetti.
SSRC:
32bit
Il Syncronization Source identifier è un identificatore della sorgente scelto in modo random. Non ci possono essere più sorgenti con lo stesso SSRC.
CSRC:
lista, da 0 a 15 elementi da 32bit l'uno
I Contributing Source identifier sono inseriti dai mixer, e sono i SSRC delle sorgenti che contribuiscono al flusso.
Le differenze più importanti rispetto ad UDP sono certamente introdotte dai campi Payload Type, Timestamp e Sequence Number. L'applicazione che riceve i dati grazie al PT è in grado di capire in che modo trattarli, il TS invece permette di riprodurre con l'esatta temporizzazione i dati ricevuti, infine il SN permette di stabilire se i pacchetti stanno arrivando nell'ordine opportuno e se ci sono state perdite. Si noti però che RTP non è un protocollo affidabile (come era prevedibile, essendo un protocollo pensato per il real-time), quindi non gestisce assolutamente la ritrasmissione dei pacchetti persi.

La personalizzazione

Come anticipato, RTP è un protocollo molto flessibile che può essere modificato per adattarlo meglio alle caratteristiche dell'applicazione che lo usa. Si viene così a creare un profilo che va presentato mediante un'opportuna documentazione.

Ci sono diversi punti in cui si può intervenire, i principali sono elencati di seguito:

  1. Il significato dei campi Payload type e Marker bit è di fatto dipendente dall'applicazione. Quindi in un nuovo profilo si dovrà specificare il significato semantico del marker bit, e quali sono i payload type utilizzati.
    Tuttavia è anche possibile utilizzare gli 8 bit totali in un modo diverso, ad esempio assegnando più marker bit, oppure utilizzandoli come un unico campo.
  2. É possibile definire delle estensioni per l'header. Quindi se il campo X è settato ad uno al normale header segue un header definito dall'applicazione il cui formato è mostrato in figura [*].
    Figure: Header di estensione
    \resizebox*{11cm}{!}{\includegraphics{immagini/CAP3/Estensione.eps}}

  3. Come vedremo in seguito lo standard definisce una serie di pacchetti RTCP, tuttavia è lasciata la possibilità di definirne uno nel profilo.

RTCP (Real Time Control Protocol)

RTCP è un protocollo affiancato ad RTP, sfrutta le capacità di multiplexing del protocollo sottostante (quindi ad esempio se il protocollo sottostante è UDP, una sessione RTCP usa numeri di porto differenti da quelli della corrispondente sessione RTP). RTCP ha essenzialmente 4 funzioni, descritte nel seguito.

  1. Principalmente RTCP deve fornire un feedback sulla qualità della distribuzione dei dati, quindi permette di scambiare informazioni sul numero di pacchetti ricevuti o persi sul jitter e così via. Questo riscontro può essere utilizzato direttamente da quelle applicazioni che realizzano tecniche di codifica a tasso variabile. Queste informazioni sono trasportate nei pacchetti RTCP sender report e receiver report.
  2. Ogni sorgente RTP, come abbiamo visto, è identificata da un SSRC, tuttavia questo identificativo cambia ogni volta che si fa partire l'applicazione, mentre può essere utile avere un identificativo che sia univoco e non cambi al cambiare della sessione. Per questo motivo si usa il CNAME (Canonical Name) che viene diffuso tramite RTCP.
  3. Per ogni sessione, si assume che comunque il traffico RTCP debba mantenersi al disotto di un fissato limite, per questo motivo se il numero di partecipanti cresce ognuno dovrà ridurre il tasso di emissione di pacchetti di controllo.
  4. Opzionalmente è possibile trasportare con RTCP alcune semplici informazioni sui partecipanti alla sessione, come ad esempio il nome, l'indirizzo e-mail, ecc.
Le prime tre funzioni sono obbligatorie nel caso di applicazioni multicast e sono invece raccomandate nel caso di applicazioni unicast.

Sono previsti diversi tipi di pacchetti.

Sender Report (SR):
contiene le statistiche calcolate da una sorgente. É sempre composto da un primo blocco in cui ci sono le statistiche di questa sorgente (byte trasmessi, pacchetti trasmessi ed il timestamp del pacchetto). Possono seguire altri blocchi in cui si trovano le statistiche riguardanti altre sorgenti attive (ultimo numero di pacchetto ricevuto, jitter, timestamp dell'ultimo SR di questa sorgente).
Receiver Report (RR):
contiene le statistiche calcolate da un ricevitore. Come l'SR anche il RR può essere composto da più sezioni. Nella prima sezione chiaramente comparirà solo il SSRC della sorgente, le altre sezioni sono analoghe a quelle viste per il SR.
Source Description Items (SDES):
un pacchetto SDES può contenere più SDES Items, ognuno dei quali trasporta un'informazione diversa sulla sorgente. Le possibilità sono le seguenti, CNAME, nome, indirizzo e-mail, numero di telefono, località geografica, applicazione utilizzata, note, estensione definita dall'applicazione.
BYE:
indica la fine della partecipazione alla sessione. Opzionalmente può contenere anche il motivo dell'abbandono della sessione.
APP:
pacchetto definito dall'applicazione.
Può capitare di dover spedire più pacchetti RTCP di diverso tipo, in questo caso è prevista la possibilità di raggrupparli tutti in un unico pacchetto di livello inferiore creando un pacchetto composito. Non ci sono regole precise sulla composizione di questi pacchetti ma solo alcune linee guida.

Debian User 2003-06-05