# PPPoE

PPPoE (Point-to-Point Protocol over Ethernet o protocolo punto a punto sobre Ethernet) es un protocolo de red para la encapsulación PPP sobre una capa de Ethernet. Es utilizada mayoritariamente para proveer conexión de banda ancha mediante servicios de cablemódem, DSL, y FTTH. Este ofrece las ventajas del protocolo PPP como son la autenticación, cifrado, mantenimiento y compresión. En esencia, es un protocolo, que permite implementar una capa IP sobre una conexión entre dos puertos Ethernet, pero con las características de software del protocolo PPP, por lo que es utilizado para virtualmente "marcar" a otra máquina dentro de la red Ethernet, logrando una conexión "serial" con ella, con la que se pueden transferir paquetes IP, basado en las características del protocolo PPP.
Esto permite utilizar software tradicional basado en PPP para manejar una conexión que no puede usarse en líneas seriales sino con paquetes orientados a redes locales como Ethernet para proveer una conexión clásica con autenticación para cuentas de acceso a Internet. Además, las direcciones IP en el otro lado de la conexión sólo se asignan cuando la conexión PPPoE se abre, por lo que admite la reutilización de direcciones IP (direccionamiento dinámico).
El objetivo y funcionamiento de PPPoE es análogo al protocolo PPP sobre RTC con el que a finales de los 90 y bajo un stack tcp, se establecía un enlace ip punto a punto a través de la red telefónica conmutada (RTC), permitiendo utilizar por encima una serie de protocolos de nivel de aplicación tipo http, ftp, telnet, etc.
PPPoE fue desarrollado por UUNET, Redback y RouterWare. El protocolo está publicado en la RFC 2516.

## Descripción del protocolo PPPoE

El protocolo PPPoE se compone de dos fases diferentes: fase de descubrimiento y fase de sesión PPP.

### Fase de descubrimiento (PPPoED)

Cuando un equipo desea establecer una sesión PPPoE, debe primero efectuar una fase de descubrimiento (PPPoED) para identificar la dirección MAC del otro extremo y establecer un identificador de sesión PPPoE. En la fase de descubrimiento, un equipo cliente descubre a un servidor PPPoE, denominado habitualmente Concentrador de Acceso. Según la topología de la red, puede haber más de un Concentrador de Acceso. La fase de descubrimiento permite al cliente identificar a todos los Concentradores de Acceso y seleccionar uno de ellos.
La fase de descubrimiento se divide en cuatro partes:
* PADI (PPPoE Active Discovery Initiation) El cliente envía un paquete de inicio a toda la red (paquete de broadcast), indicando los servicios que espera recibir
* PADO (PPPoE Active Discovery Offer) El concentrador de acceso, si puede satisfacer los servicios requeridos, envía al cliente un paquete de oferta, indicando los servicios que ofrece
* PADR (PPPoE Active Discovery Request) El cliente elige, de entre todos los Concentradores de Acceso que han enviado ofertas, aquel que mejor se ajusta a sus necesidades y envía a dicho concentrador un paquete de solicitud de establecimiento de sesión
* PADS (PPPoE Active Discovery Session-confirmation) El concentrador de acceso recibe la solicitud de establecimiento de sesión y envía un paquete de confirmación de sesión , indicando el identificador de la sesión establecida. A partir de este momento comienza la fase de sesión.

### Fase de sesión

Una vez que la fase de descubrimiento se ha completado correctamente, tanto el cliente como el Concentrador de Acceso tienen la información necesaria para construir su conexión punto a punto sobre Ethernet. En la fase de sesión las tramas intercambiadas entre los dos extremos corresponden a las de una sesión PPP, con la particularidad de que dichas tramas van encapsuladas sobre tramas Ethernet.

## Estructura de la trama Ethernet

La trama PPPoE es básicamente una trama Ethernet, con algún encapsulado adicional de la parte de datos.

### DESTINATION ADDRESS

    Dirección MAC destino del paquete. En la fase de descubrimiento, puede contener la dirección de broadcast 0xFFFFFFFFFFFF.

### SOURCE ADDRESS

    Dirección MAC origen del paquete.

### ETHER_TYPE

    Indica que la trama debe interpretarse como PPPoE. Tiene un valor igual a 0x8863 en la fase de descubrimiento y 0x8864 en la fase de sesión.

### DATOS

    Datos de la trama Ethernet. La estructura de estos datos para PPPoE se explica en el apartado siguiente.

### CHECKSUM

    Checksum de los datos de la trama Ethernet.

## Formato de los datos: trama PPPoE

Los datos de la trama Ethernet para PPPoE tienen el siguiente formato:

### VER

    Campo de cuatro bits que indica la versión de PPPoE. Debe ser 0x1.

### TYPE

    Campo de cuatro bits que indica el tipo de PPPoE. Debe ser 0x1.

### CODE

    Campo de ocho bits que indica el tipo de paquete PPPoE según la siguiente tabla:
| Code | Tipo de paquete PPPoE |
| 0x09 | PADI: PPPoE Active Discovery Initiation |
| 0x07 | PADO: PPPoE Active Discovery Offer |
| 0x19 | PADR: PPPoE Active Discovery Request |
| 0x65 | PADS: PPPoE Active Discovery Session-Confirmation |
| 0xA7 | PADT: PPPoE Active Discovery Terminate |
| 0x0 | Paquete en fase de sesión |

### SESSION_ID

    Campo de dos bytes que identifica a la sesión PPPoE establecida. En la fase de descubrimiento, toma un valor igual a 0 hasta que el Concentrador de Acceso asigna un identificador a la sesión en marcha. Junto con la dirección origen y destino identifica unívocamente una sesión PPPoE.

### LENGTH

    Campo de dos bytes que indica el tamaño, en bytes, de la parte de datos PPPoE (payload). No incluye la cabecera Ethernet o PPPoE.

### PAYLOAD

    Datos del PPPoE. En la fase de sesión, son los datos del protocolo PPP propiamente dicho. En la fase de descubrimiento, el payload contiene cero o más etiquetas. Cada etiqueta está formada por dos bytes que indican el tipo de etiqueta, dos bytes que indican la longitud en bytes de la etiqueta, y el valor de la etiqueta. Las distintas etiquetas se usan para negociar las condiciones de establecimiento de la sesión PPPoE.