Establishing a GTP Tunnel
When a new tunnel is setup between two nodes, GTP-C will be used to setup the tunnel and the both ends of the tunnel will allocate a their own locally unique TEID to the tunnel.
Let’s take a look at setting up a GTP tunnel between a S-GW and a P-GW, initiated by the S-GW.
The process will start with the S-GW sending the P-GW a GTP-C tunnel establishment request and include the TEID the S-GW has allocated for it’s end of the tunnel (using TEID 102 in this example), sent from the S-GW to the P-GW.
The P-GW will receive this packet. When it does it will allocate a new TEID for this tunnel for it’s side (In this case it’s 16538), store the sender’s address and received TEID, and link local TEID 16538 with S-GW/102.
An ACK is sent from the P-GW to the S-GW with both TEID values.
Finally the S-GW stores the senders’ address, the received TEID and the link 102-PGW address 16538.
Now the exchange is complete the S-GW and the P-GW each know the TEID of it’s local side of the tunnel, and the remote side of the tunnel.
TEID Management Tables
After GTP tunnels are setup a management table is populated defining the forward rules for that traffic.
For example a packet coming in on TEID 103 would, according to the table forward to TEID 102. TEID 102 sends traffic to the P-GW’s IP using remote TEID 16538.
The same rules for uplink are applied for downlink.
Each tunnel has pair of TEIDs a local TEID and a remote TEID.
Because it’s such a simple table it can be updated very easily and scales well.
Different QoS parameters can be assigned to each tunnel, called a data bearer.