# 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 |

##### Version

    Versione, è un campo di 3 bit. Nel GTP versione 1, viene valorizzato a 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).

##### Reserved

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

##### Extension header flag(E)

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

##### Sequence number flag(S)

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

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

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

##### 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.

##### 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.

##### Tunnel endpoint identifier (TEID)

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

##### 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.

##### 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.

##### 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 |