El PPPoE es parte de la pila de protocolos TCP/IP y, más concretamente, de su capa más inferior, donde se encuentra el acceso a la red. Su funcionamiento se divide en dos fases que influyen, a su vez, en la estructura del protocolo. La primera es la fase de descubrimiento (PPPoE Discovery). En ella, el protocolo identifica la dirección MAC del punto de interconexión para poder usar Internet a través de él. La búsqueda de la dirección se realiza a través de un paquete de inicio o de broadcast: los paquetes de datos se lanzan a la red sin un destino concreto. El punto de interconexión, también llamado concentrador de acceso o punto de presencia (Point of Presence, PoP), responde luego estableciendo un canal de comunicación entre ambos usuarios de la red.
A continuación, comienza la segunda fase, la fase de sesión (PPPoE Session). En ella se controlan en primer lugar algunos detalles: el punto de interconexión comprueba, por ejemplo, los derechos de acceso del cliente. Luego se produce el uso en sí de Internet, que también es parte de esta fase.
Se puede saber qué fase se está desarrollando según el valor del campo ETHER_TYPE de la trama Ethernet, que será 0x8863 en la fase de descubrimiento y 0x8864 en la fase de sesión. Tras el campo de tipo, sigue la trama PPPoE o PPPoE Frame, integrada en el campo de datos de la trama Ethernet. La parte que corresponde al PPPoE puede dividirse a su vez en diferentes segmentos. En primer lugar, se indica la versión de PPPoE, pero, puesto que solo existe una versión del protocolo, este valor siempre será 1. A continuación, viene el tipo de PPPoE, que también será siempre 1.
Mientras que las dos primeras partes solo se componen de cuatro bits cada una, el campo siguiente tiene un byte (ocho bits): es el campo CODE, que tiene especial relevancia para la fase de descubrimiento y que muestra en qué paso se encuentran ambos participantes en ese momento. Si ya se ha llegado a la fase de sesión, este campo tendrá el valor 0x00. En la fase de descubrimiento, sin embargo, puede tener cinco valores diferentes:
- 0x09: PPPoE Active Discovery Initiation (PADI)
- 0x07: PPPoE Active Discovery Offer (PADO)
- 0x19: PPPoE Active Discovery Request (PADR)
- 0x65: PPPoE Active Discovery Session-confirmation (PADS)
- 0xa7: PPPoE Active Discovery Termination (PADT)
Como se puede ver, la fase de descubrimiento empieza con el paquete de inicio o de broadcast (PADI). En este paso, el cliente transmite también su propia dirección MAC para poder recibir una respuesta. En el siguiente paquete de datos del PoP, el punto de presencia da a conocer tanto su propia dirección MAC como su nombre (PADO). Es posible que más de un PoP responda al broadcast del cliente. El ordenador local (o su rúter) deberá entonces decidir, según los nombres, con qué PoP quiere establecer una conexión. El ordenador comunica su decisión al PoP elegido enviándole un paquete de solicitud de establecimiento de sesión (PADR). A continuación, el PoP responde para confirmar la conexión y asigna al dispositivo un ID o identificador de sesión (PADS). Al hacerlo, se establece la conexión a Internet. Si alguno de los dos participantes quiere interrumpirla, se lo comunicará al otro dispositivo con un paquete de datos de finalización (PADT).