PPP consists of LCP (link control protocol) for bringing lines up and down, negotiating features like compression, etc., and NCP (network control protocol) which allows for different sorts of network layers (and thus makes PPP capable of being used for more than just IP).
PPP also supports authentication and the dynamic assignment of a network layer address, as well as the option to provide reliable service via sequence numbering of frames. Reliability is made optional so that both clearn media and noisy media are supported.
PPP uses character stuffing to avoid problems with the flag showing up in the data field.
Dial-up scenario
| flag | address | control | protocol | payload | checksum | flag |
| 1 byte | 1 | 1 | 1 or 2 | variable | 2 or 4 | 1 |
| 01111110 | 11111111 | 00000011 | 01111110 | |||
| identifies the start of the frame; character stuffing used for this value in payload | there are no addresses, always all 1s; assumed point-to-point | this value indicates an unnumbered frame; sequence number could be used over noisy medium | tells what the payload contains (LCP, NCP, IP, IPX, Appletalk, etc) | negotiated max by LCP, usually 1500 bytes | size is negotiated | marks end of frame |
The strength of PPP is that it supports multiple network protocols, and can be used harmoniously with various physical medium, including PSTN/modems and SONET.