# GRE

El GRE (Generic Routing Encapsulation) es un protocolo para el establecimiento de túneles a través de Internet. Está definido en la RFC 1701 y en la RFC 1702, pudiendo transportar hasta 20 protocolos del nivel de red (nivel 3 del modelo OSI) distintos.

## Características

* Permite emplear protocolos de encaminamiento especializados que obtengan el camino óptimo entre los extremos de la comunicación.
* Soporta la secuencialidad de paquetes y la creación de túneles sobre redes de alta velocidad.
* Permite establecer políticas de encaminamiento y seguridad.

## Casos de uso

* En conjunto con PPTP, se pueden crearVPNs.
* En conjunto conIPsec VPNs para permitir enrutamiento de información entre redes interconectadas.
* En protocolos de movilidad.
* En interfaces A8/A10(Autenticación A12 ) para encapsular paquetes IP de la Función de Control de Paquetes (PCF).

## Cabecera de un paquete

| Bits 0-4 | Bits 0-4 | Bits 0-4 | Bits 0-4 | Bits 0-4 | 5-7 | 5-7 | 5-7 | 8-12 | 8-12 | 8-12 | 8-12 | 8-12 | 13-15 | 13-15 | 13-15 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 | 16-31 |
| C | R | K | S | s | Recur | Recur | Recur | Flags | Flags | Flags | Flags | Flags | Version | Version | Version | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type | Protocol Type |
| Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Checksum (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) | Offset (opcional) |
| Key (opcional) ||||||||||||||||||||||||||||||||
| Sequence Number (opcional) ||||||||||||||||||||||||||||||||
| Routing (opcional) ||||||||||||||||||||||||||||||||
La longitud mínima de una cabecera GRE es de 4 octetos.
* C, presencia del campo de integridad de la trama o Checksum. 1 bit. Si es 1 los campos Checksum y Offset están presentes.
* R, presencia del campo de enrutamiento o Routing. 1 bit. Si es 1 el campo routing tiene información válida y los campos Checksum y Offset están presentes.
* K, presencia de clave o Key. 1 bit. Si es 1 el campo Key existe y tiene información válida.
* S, presencia del número de secuencia o campo Sequence Number. 1 bit. Si es 1 el campo Sequence number existe y tiene información válida.
* s, Campo Strict Source Route. 1 bit. Este campo está definido en otros documentos. Se recomienda ponerlo a 1 solo si toda la información de enrutamiento está formada por rutas estrictas.
* Recur, campo Recursion Control. 3 bits. Número de encapsulaciones recursivas permitidas. Por defecto 0.
* Flags. 5 bits. Reservado. Poner a 0.
* Version. 3 bits. Versión del protocolo GRE. Debe ser 0.
* Protocol. 16 bits. Indica el protocolo contenido en el paquete GRE. Para ello utiliza los mismos indicadores que Ethernet. Por ejemplo, si dentro del túnel GRE viaja un servicio MPLS, el valor de este campo sería 0x8847.
* Checksum. 16 bits. Opcional. Contiene la suma en complemento a 1 de los datos y la cabecera GRE.
* Offset. 16 bits. Opcional. Indica el primer octeto a examinar dentro del campo routing para conocer la entrada de enrutamiento activa.
* Key. 32 bits. Opcional. Contiene un número insertado por la parte encapsuladora del túnel que puede utilizarse en destino para propósitos de comprobación del remitente correcto.
* Sequence Number. 32 bits. Opcional. Contiene un número insertado por la parte encapsuladora del túnel que puede utilizarse en destino para controlar el orden de los paquetes.
* Routing. Longitud variable. Opcional. Este campo consiste en una lista de rutas.