GPRS Tunnelling Protocol
# GPRS Tunnelling Protocol

Il GPRS Tunnelling Protocol o GTP è un gruppo di protocolli di comunicazione basati su IP adibiti al trasporto di General Packet Radio Service all'interno di reti GSM, UMTS e LTE. Nelle architetture 3GPP, il GTP e le interfacce basate su proxy Mobile IPv6 sono specificati su vari punti di interfaccia.

GTP può essere scomposto in protocolli distinti, GTP-C, GTP-U e GTP prime (o GTP').

* GTP-C Il protocollo GTP-C è utilizzato all'interno delle reti di trasporto GPRS per le funzionalità di segnalazione tra GGSN e SGSN. Questo permette al sistema SGSN di attivare una sessione per conto di un utente (attivazione PDP context), oppure di disattivare la stessa sessione, per regolare i parametri di qualità del servizio, oppure per aggiornare una sessione per un utente la cui connessione proviene da un altro SGSN.
* GTP-U Il protocollo GTP-U è utilizzato per trasportare i dati dell'utente all'interno della rete di trasporto GPRS ed inoltre tra la rete di accesso radio e la rete di trasporto. I dati dell'utente trasportati possono essere incapsulati in qualsiasi formato: IPv4, IPv6, o PPP.
* GTP prime o GTP' Il protocollo 'GTP prime' utilizza la stessa struttura di messaggi di GTP-C e GTP-U, ma ha una funzione indipendente. Esso può essere utilizzato per trasportare dati di tariffazione dalla funzione di caricamento dati (CDF) della rete GSM o UMTS alla funzione del gateway di addebito (CGF). Nella maggior parte dei casi, questo significa che da molti elementi di rete singoli, come i GGSN, i dati di traffico elaborati sono inviati ad un computer centralizzato che fornisce in modo più conveniente ed organizzato i dati al centro di fatturazione del gestore della rete.

Diverse varianti di GTP sono implementate da RNC, SGSN, GGSN e CGFS all'interno di reti 3GPP.

Le stazioni mobili GPRS (SM) sono collegate ad un SGSN senza essere consapevoli dell'utilizzo del GTP. GTP può essere utilizzato sia tramite UDP che TCP. UDP è o raccomandata o obbligatoria, ad eccezione del tunneling X.25 in versione 0. GTP versione 1 viene utilizzato solo tramite UDP.

## Caratteristiche generali

Tutte le varianti di GTP hanno in comune alcune funzionalità. La struttura dei messaggi è la medesima, con l'intestazione GTP seguita dall'intestazione UDP o TCP.

### Header

**GTP versione 1**

Le intestazioni del protocollo GTP versione 1 contengono i seguenti campi:

| + | 0 | 0 | 0 | 1 | 2 | 3 | 4 | 5-7 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 8-15 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 16-23 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| 0 | N-PDU Number Flag | N-PDU Number Flag | N-PDU Number Flag | Sequence Number Flag | Extension Header Flag | Reserved | Protocol type | Version | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Message Type | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length |
| 32 | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID | TEID |
| 64 | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | Sequence number | N-PDU number | N-PDU number | N-PDU number | N-PDU number | N-PDU number | N-PDU number | N-PDU number | N-PDU number | Next extension header type | Next extension header type | Next extension header type | Next extension header type | Next extension header type | Next extension header type | Next extension header type | Next extension header type |

**GTP versione 1**

**Version**


    Versione, è un campo di 3 bit. Nel GTP versione 1, viene valorizzato a 1.

**GTP versione 1**

**Protocol Type (PT)**


    Tipo di protocollo, è un campo ad 1 bit che distingue il GTP (se valorizzato a 1) dal GTP prime (se valorizzato a 0).

**GTP versione 1**

**Reserved**


    Riservato, è un campo a 1-bit riservato (deve essere 0).

**GTP versione 1**

**Extension header flag(E)**


    è un campo ad 1 bit che indica se è presente il campo facoltativo Intestazione di estensione.

**GTP versione 1**

**Sequence number flag(S)**


    è un campo ad 1 bit che indica se è presente il campo facoltativo Numero di sequenza.

**GTP versione 1**

**N-PDU number flag(PN)**


    è un campo ad 1 bit che indica se è presente il campo facoltativo Numero di N-PDU.

**GTP versione 1**

**Message Type**


    Tipo di messaggio, è un campo ad 8 bit che il tipo di messaggio GTP. I diversi tipi di messaggi sono definiti nello standard 3GPP TS 29.060 sezione 7.1.

**GTP versione 1**

**Length**


    Lunghezza: è un campo di 16 bit che indica la lunghezza del payload in byte (il resto del pacchetto successivo rimane obbligatoriamente agli 8 byte dell'intestazione GTP). Include i campi opzionali.

**GTP versione 1**

**Tunnel endpoint identifier (TEID)**


    è un campo a 32 bit (4 ottetti) utilizzato per identificare il tunnel GTP interessato.

**GTP versione 1**

**Sequence number**


    è un campo a 16 bit (opzionale). Esiste questo campo se uno dei campi E, S, o PN è attivo. Il campo deve essere interpretato solo se il bit S è attivo.

**GTP versione 1**

**N-PDU number**


    è un campo di 8 bit (opzionale). Esiste questo campo se uno dei campi E, S, o PN è attivo. Il campo deve essere interpretato solo se il bit PN è attivo.

**GTP versione 1**

**Next extension header type**


    è un campo di 8 bit (opzionale). Esiste questo campo se uno dei campi E, S, o PN è attivo. Il campo deve essere interpretato solo se il bit E è attivo.

Le intestazioni della successiva estensione sono le seguenti:

| + | Bits 0-7 | Bits 0-7 | Bits 0-7 | Bits 0-7 | Bits 0-7 | Bits 0-7 | Bits 0-7 | Bits 0-7 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 8-23 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 | 24-31 |
| - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
| 0 | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Total length | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents |
| ... | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Contents | Next extension header | Next extension header | Next extension header | Next extension header | Next extension header | Next extension header | Next extension header | Next extension header |
