Hello everyone,
The PPP protocol functions on the premise that communication ends are of the point-to-point connection. It is not applicable to broadcast Ethernet and other multi-point access network. Therefore, the PPPoE protocol comes into being. It not onlyprovides bridge Ethernet access users with broadband access means but also provides convenient access control and accounting. Each access user must establish a unique PPP session. Therefore, before establishing the session, the device must know the MAC address of the remote Access Concentrator (AC). The PPPoE protocol obtains the MAC address through the discovery protocol.
The PPPoE protocol contains two stages: the PPPOE discovery stage and PPP Session stage. When a host wishes to initiate a PPPoE session, it must first perform the Discovery process to identify the MAC address of the peer end and establish a PPPoE session ID through the discovery protocol of the PPPoE protocol. The Discovery protocol is based on a client-server relationship. Owning to the broadcast feature of Ethernet, the host (the client) discovers all ACs (the server) in this process and selects one. The host and the selected concentrator establish a point-to-point connection between them according to the obtained information. When a session is established, the entire discovery stage is complete.
When the PPPoE session begins, the host and the AC send PPP data through the PPP protocol and implement PPP negotiation and data transmission.
In this stage, the transmitted packet must contain the Session ID assigned at the Discovery stage and the session ID must not change. Normally, the PPP protocol terminates the Session stage. Also, the PPPoE protocol defines a
PADT packet to terminate the session. Therefore, the host or AC can transmit such a packet to terminate the session at any time after the PPP session begins.



Packets in the PPPoE Discovery Stage
PPPoE Active Discovery Initiation (PADI )
PPPOE Active Discovery Offer (PADO)
PPPOE Active Discovery Request (PADR)
PPPOE Active Discovery Session-confirmation (PADS)
PPPOE Active Discovery Terminate (PADT)

Destination address: a broadcast address Oxffffffff
Source address: Ethernet address of the host
ETHER_ TYPE: 0x8863
Code: 0x09
SESSION-ID: 0x0000
TAG_TYPE: The PADI packet must contain only one Service-Name indicating the service requested by the host and any number of other TAG types. The length of the PADI packet cannot exceed 1484 octets to leave sufficient room for a Relay-Session-ld.

Destination address: Ethernet address of the host
Source address: Ethernet address of the AC
ETHER TYPE: 0x8863
Code: 0x07
SESSION-ID: 0x0000
TAG_TYPE: The PADO packet must contain one AC-Name TAG containing the name of the AC, a Service-Name TAG identical to the one in the PADI packet and any number of other Service-Name TAGs indicating other services that the AC013

Destination address: Ethernet address of AC.
Source address: Ethernet address of the host.
ETHER TYPE: 0x8863
Code: 0x19
SESSION-ID: 0x0000
TAG_TYPE: The PADR packet must contain one TAG of Service-Name, indicating the service that the host requests the AC for, and any number of other TAG types.

Destination address: Ethernet address of the host.
Source address: Ethernet address of the AC.
ETHER TYPE: 0x8863
Code: 0x65
SESSION-ID: uniquely assigned by the AC to identify the value of a PPPoE session TAG_TYPE: The PADS packet contains a TAG of Service-Name, indicating the service that the AC offers this session and any number of other TAG types.
This packet may be sent by the host or the AC at any time after a session is established.
Destination address: a unicast Ethernet address.
ETHER TYPE: 0x8863
Code: Oxa7
SESSION-ID: the SESSION-ID of the session to be terminated. No TAGs are required.








The PPPoE protocol contains a Discovery stage and Session.
The PPPoE packet is carried in the Data field of an Ethernet frame for transmission.
The Discovery stage involves PADI, PADO, PADR and PADS packets.
The PADT packet is used to terminate a session.
In the Discovery stage, the ETHER_TYPE field is 0x8863.
In the Session stage, the ETHER_TYPE field is 0x8864.
This is what I want to talk about/share with you today, thank you!
