В виду участившихся вопросов по работе PPPoE, для правильного понимания обсуждаемого вопроса необходимо разобраться с основными понятиями изучаемого явления.
PPPoE (Point-to-point protocol over Ethernet) — сетевой протокол передачи кадров PPP через Ethernet. Предоставляет дополнительные возможности (аутентификация, сжатие, шифрование).
PPPoE — это туннелирующий протокол (tunneling protocol), который позволяет настраивать (или инкапсулировать) IP, или другие протоколы, которые наслаиваются на PPP, через соединения Ethernet, но с программными возможностями PPP соединений, и поэтому используется для виртуальных «звонков» на соседнюю Ethernet-машину и устанавливает соединение точка-точка, которое используется для транспортировки IP-пакетов, работающее с возможностями PPP.
PPPoE – это метод передачи PPP поверх Ethernet. Пакеты PPP инкапсулируются (включаются) в Ethernet фреймы.
Действующими лицами являются с одной стороны Access Concentrator (AC) – это сервер доступа, а с другой клиент PPPoE. Клиент и сервер должны быть соединены с использованием любых Ethernet устройств (повторители, коммутаторы).
Для именования сервера доступа используется Access Concentrator Name. В свою очередь, Access Concentrator может предоставлять некоторое количество PPPoE сервисов, называемых Service Name.
Парадигма PPPoE включает две стадии: Discovery stage и PPP Session stage.
Клиент, желающий установить PPPoE соединение, сначала должен пройти Discovery stage. При этом между ним и сервером передаются Ethernet фреймы с Ether_type=0×8863.
Наблюдать можно следующим образом:
tcpdump –n –e -i fxp0 ether proto 0×8863
В свою очередь, Discovery stage подразделяется на: initiation, offer, request, and session confirmation.
Сначала клиент должен инициировать PPPoE сессию (initiation). Для этого он посылает специальный пакет Active Discovery Initiation (PADI). Данный пакет посылается на broadcast Ethernet адрес (ff:ff:ff:ff:ff:ff), что логично, так как клиент пока не знает адреса сервера доступа. Опционно пакет может содержать запрашиваемый клиентом Service Name (и только, хотя многие считают, что здесь может быть и Access Concentrator Name).
Пример PADI-пакета:
Frame 1 (44 bytes on wire, 44 bytes captured) Ethernet II, Src: 00:50:da:42:d7:df, Dst: ff:ff:ff:ff:ff:ff PPP-over-Ethernet Discovery Version: 1 Type 1 Code Active Discovery Initiation (PADI) Session ID: 0000 Payload Length: 24 PPPoE Tags Tag: Service-Name Tag: Host-Uniq Binary Data: (16 bytes)
Src. (=source) представляет MAC-адрес машины, пославшей PADI.
Dst. (=destination) является широковещательным Ethernet-адресом.
PADI-пакет может быть получен более чем одним AC.
Сервер доступа отвечает пакетом Active Discovery Offer (PADO), в который включает свое название Access Concentrator Name и название предоставляемого сервиса Service Name. Данный пакет уже юникастовый и содержит мак адрес конкретного сервера.
Вот пример PADO-пакета:
Frame 2 (60 bytes on wire, 60 bytes captured) Ethernet II, Src: 00:0e:40:7b:f3:8a, Dst: 00:50:da:42:d7:df PPP-over-Ethernet Discovery Version: 1 Type 1 Code Active Discovery Offer (PADO) Session ID: 0000 Payload Length: 36 PPPoE Tags Tag: Service-Name Tag: AC-Name String Data: IpzbrOOl Tag: Host-Uniq Binary Data: (16 bytes)
AC-Name — String Data представляет строковое AC имя, в данном случае «Ipzbr001»
Src. представляет MAC-адрес AC.
Теперь клиент может выбрать нужное (Service Name и Access Concentrator Name) из возможно нескольких предложений (PADO пакетов) и ответить уже конкретному серверу пакетом Active Discovery Request (PADR).
Согласный на предоставление связи сервер посылает клиенту Active Discovery Session-confirmation (PADS) пакет, включающий уникальный идентификатор сессии (SID), необходимый для дальнейшего взаимодействия. На этом Discovery stage заканчивается и начинается PPP session stage.
PPP session stage начинается с использованием уже обозначенного идентификатора (SID) и Service Name и включает стандартные PPP процедуры: link control, network layer control, authentication. При этом согласуются различные параметры связи и, самое главное, происходит аутентификация.
На данном этапе (и далее, вплоть до отключения) между клиентом и сервером передаются Ethernet фреймы с Ether_type=0×8864.
Наблюдать можно следующим образом:
tcpdump –n –e -i fxp0 ether proto 0×8864
В итоге устанавливается PPPoE соединение и передаются данные.
Для окончания соединения PPPoE клиент (или сервер, что реже) посылает пакет Active Discovery Terminate (PADT).
Типичный обмен пакетами между участниками PPPoE выглядит так (mac сервера s:s:s:s:s:s, mac клиента c:c:c:c:c:c):
подключение клиента:
c:c:c:c:c:c ff:ff:ff:ff:ff:ff 8863 60: PPPoE PADI [Host-Uniq UTF8] s:s:s:s:s:s c:c:c:c:c:c 8863 49: PPPoE PADO [AC-Name "Provider"] [Service-Name] [Host-Uniq UTF8] [AC-Cookie UTF8] c:c:c:c:c:c s:s:s:s:s:s 8863 60: PPPoE PADR [Host-Uniq UTF8] [AC-Cookie UTF8] [AC-Name " Provider "] s:s:s:s:s:s c:c:c:c:c:c 8863 49: PPPoE PADS [ses 0x15] [AC-Name " Provider "] [Service-Name] [Host-Uniq UTF8] [AC-Cookie UTF8]
обмен данными
…
отключение клиента
c:c:c:c:c:c s:s:s:s:s:s 8863 60: PPPoE PADT [ses 0x1a]
Более подробное описание PPPoE содержится в RFC 2516
Источник : subnets.ru/blog/?p=308