|
|
Données - Contient soit la valeur zéro, soit des données (1500 octets maximum). FCS - Séquence de contrôle de trame pour une vérification des erreurs. 3.3 - Etablissement d'une connexionPour établir une connexion sur un lien
Point à Point, chaque extrémité doit dans un premier temps émettre des paquets
LCP pour configurer et tester le support de liaison. Dead - Une communication débute et se termine nécessairement dans cet état. Le passage à la phase d'établissement s'effectue lorsque le niveau physique est prêt à accueillir la connexion. Etablissement - Grâce au protocole LCP, les équipements distants s'échangent des paquets de configuration par l'intermédiaire desquels ils négocient les paramètres de la connexion. Au cours de cette phase, tout paquet non-LCP est ignoré. Authentification - Par défaut, l'authentification n'est pas demandée mais sur certaines liaisons, elle peut être indispensable. Dans ce cas, c'est lors de la phase d'établissement que le protocole d'authentification doit être spécifié. Connexion - le protocole réseau utilisé (IP, IPX ou Apple Talk) doit être configuré via le protocole NCP. Le trafic sur le lien peut alors avoir lieu. Fin - la fermeture de la liaison peut survenir suite à plusieurs événements comme la perte de la porteuse, la chute d'une temporisation d'attente ou plus fréquemment suite à la demande d'un utilisateur. Voici un exemple appliqué dans le cadre
d'une connexion d'un internaute à un provider: 3.4 - LCP - Link Control ProtocolLCP transporte les paquets permettant d'établir, de maintenir et de terminer PPP. Pour l'établissement de PPP, il faut négocier de paramètres de fonctionnement. LCP gère les options PPP indépendantes des protocoles de la couche réseau. Les premiers paquets envoyés par les extrémités PPP négocient les options configurables au début d'une connexion. Il existe trois classes de paquets LCP : Les paquets de Configuration de Liaison utilisés pour établir et configurer une communication (Requête-Configuration, Configuration-Acquittée, Configuration-NonAcquittée et Configuration-Rejetée). Les paquets de Fermeture de Liaison utilisés pour couper une communication (Requête-Fermeture et Fermeture-Acquittée). Les paquets de Maintenance de Liaison utilisés pour gérer et déterminer une liaison (Code-Rejeté, Protocole-Rejeté, Requête-Echo, Réponse-Echo, et Requête-Elimination). Lorsque le champ Protocole du paquet PPP indique une valeur hexadécimale c021 (Link Control Protocol). Format d'un paquet LCP :
Code - Le champ Code comporte un octet, et identifie le type de paquet LCP.
Identificateur - Le champ Identificateur comporte un octet, et fournit un moyen d'associer requêtes et réponses. Lorsqu'un paquet présente un Identificateur invalide, il est ignoré sans affecter l'automate. Longueur - Le champ Longueur comporte deux octets, et donne la longueur du paquet LCP, y compris l'octet de Code, d'Identificateur, le champ Longueur lui-même et le champ Données. La longueur ne doit pas excéder l'U R M de la liaison. Données - Le champ Données comporte zéro ou un nombre quelconque d'octets, selon l'indication du champ Longueur. Le format interne du champ Données dépend de la valeur présente dans le champ Code. Options de LCP pour PPPoE: Recommandé : numéro magique, MRU (<=1492 Octets). Non recommandé : Compression des champs (PFC). Non utilisation : Vérification du séquencement des champs (FCS), Compression des champs adresse et contrôle (ACFD); Table des caractères de contrôle asynchrones (ACCM). 3.5 - NCP - Network Control ProtocolsL'état réseau d'une connexion PPP suit soit l'état d'authentification, soit l'état d'établissement. A ce stade, LCP a déjà établi toutes les options de PPP. La connexion est active et presque prête à transporter les données de l'utilisateur. Le NCP configure les protocoles de la couche réseau que la connexion PPP va transporter (IP pour PPPoE). Il existe trois classes de paquets NCP : Les paquets de Configuration, utilisés pour établir et configurer une communication (Requête-Configuration, Configuration-Acquittée, Configuration-NonAcquittée et Configuration-Rejetée). Les paquets de Fermeture, utilisés pour couper une communication (Requête-Fermeture et Fermeture-Acquittée). Le paquet erreur (Code-Rejeté). Détail du paquet NCP : Code - Le champ Code comporte un octet, et identifie le type de paquet NCP.
Identificateur - Le champ Identificateur comporte un octet, et fournit un moyen d'associer requêtes et réponses. Lorsqu'un paquet présente un Identificateur invalide, il est ignoré sans affecter l'automate. Longueur - Le champ Longueur comporte deux octets, et donne la longueur du paquet NCP. Données - Le champ Données comporte zéro ou un nombre quelconque d'octets, selon l'indication du champ Longueur. Le format interne du champ Données dépend de la valeur présente dans le champ Code. 3.6 - AuthentificationPPP peut supporter les opérations
d'authentifications au début d'une connexion. Password Authentication Protocol (PAP) - PAP implémente la méthode traditionnelle avec l'utilisation d'un nom d'utilisateur et d'un mot de passe. Sur demande d'un authentificateur , le récepteur répond avec le nom et le mot de passe, l'authentificateur valide l'information et envoie un accusé de réception positif ou négatif. Challenge Handshake Authentification Protocol (CHAP) - CHAP implémente une authentification utilisant un nom d'utilisateur et une chaîne aléatoire CHAP. L'authentificateur envoie son nom et sa chaîne aléatoire, le récepteur transforme cette chaîne par un algorithme de calcul et une clé CHAP secrète. Il envoie ensuite le résultat avec son propre nom, l'authentificateur compare la réponse avec sa propre copie de la clé secrète. Enfin, il envoie un accusé de réception indiquant un échec ou un succès. 4 - Le protocole PPPoE4.1 - IntroductionLes technologies d'accès modernes font
face à quelques problèmes et buts contradictoires. Il est souhaitable de
connecter des hôtes multiples à un site distant à travers un même dispositif
d'accès client. Un autre but est de fournir un contrôle d'accès et facturer
selon la même méthode que celle utilisée par PPP sur réseau commuté. Dans
beaucoup de technologies d'accès, la méthode la plus avantageuse financièrement
pour rattacher des hôtes multiples à un dispositif d'accès client est
l'utilisation d'Ethernet. Enfin, la minimisation des coûts est importante ; il
faut utiliser la plus petite configuration possible ou mieux aucune
configuration. 4.2 - L'histoireCe document présente le protocole de communication baptisé PPPoE (Point to Point over Ethernet) permettant de véhiculer du flux PPP (Point to Point Protocol) encapsulé dans des trames Ethernet. Cette technologie (1998-99) est née d'un travail conjoint de UUNET Technologies Inc., RedBack Networks Inc., et RouterWare Inc. Elle fait l'objet de la Rfc 2516 qui sera décrite au cours de l'étude du protocole PPPoE, suivi d'une traduction en français. 4.3 - Format de l'entêteL'entête pour PPPoE se définie
comme suit : Version - 4 bits qui doivent être à la valeur 0x1 pour cette version de la spécification PPPoE. Type - 4 bits qui doivent être à la valeur 0x1 pour cette version de la spécification PPPoE. Code - 8 bits définis plus bas pour l'étape de découverte et l'étape de la session PPP. Id - Valeur non signée sur 16 bits. C'est la valeur définie lors de l'étape de la découverte. Cette valeur est fixée pour une session PPP donnée entre l'adresse Ethernet source et l'adresse Ethernet destination. La valeur 0xffff est réservée pour un usage futur et ne doit pas être utilisée. Longueur - 16 bits indiquant la longueur de la charge utile PPPoE. Cela n'inclut pas la longueur des en-têtes Ethernet ou PPPoE. Voilà comment l'entête Ethernet spécifie
l'intégration de PPP Adresse de destination - Ce champs, basé sur 6 octets contient soit une adresse Ethernet unicast soit une broadcast (0xFFFFFFFFFFFF). Pour les paquets de découverte, la valeur peux être soit unicast soit broadcast. Pour le trafic de session PPP, ce champ doit contenir l'adresse unicast du peer distant qui a été déterminée lors de l'étape Découverte. Adresse source - Ce champs, basé sur 6 octets, doit contenir l'adresse MAC de l'équipement source. Type Ethernet - Ce champ codé sur 16 bits doit être configuré à 0x8863 pour l'étape Découverte et 0x8864 pour la session PPP. CRC - Ce champ permet en 4 octets de valider la conformité de la trame. 4.4 - Les étapesPPPoE est composé de deux étapes
distinctes : la découverte et la session PPP. Quand un hôte veut initier une
session PPPoE, il doit tout d'abord lancer une requête de découverte afin
d'identifier l'adresse Ethernet MAC de son vis à vis puis définir un
identificateur de session PPPoE. Alors que PPP définit une liaison de bout en
bout, la phase de découverte correspond à un rapport client-serveur. Lors du
processus de découverte, un hôte (le client) découvre un concentrateur d'accès
(le serveur). Selon la topologie du réseau, il peut y avoir plus d'un
concentrateur d'accès avec lequel l'hôte peut communiquer. L'étape de la
découverte permet à l'hôte de découvrir tous les concentrateurs d'accès et d'en
sélectionner un. Quand la découverte s'achève avec succès, l'hôte et le
concentrateur d'accès sélectionné possèdent les informations qu'ils emploieront
pour construire leur connexion point à point sur Ethernet. 4.4.1 - DécouverteL'étape de découverte s'effectue en quatre temps. Quand elle s'achève, chaque vis à vis connaît l'identificateur de session PPPoE ainsi que les adresses Ethernet des extrémités; cela suffit pour définir une session PPPoE. Les étapes sont : Emission par diffusion d'un paquet d'initialisation par l'hôte. Emission de paquets d'offres par un ou plusieurs concentrateurs d'accès. Emission adressée d'un paquet de demande de session par l'hôte. Emission d'un paquet de confirmation par le concentrateur d'accès sélectionné. Quand l'hôte reçoit le paquet de confirmation, il peut passer à l'étape suivante : la session PPP. Toutes les trames de découvertes Ethernet ont la valeur 0x8863 dans le champ « Type Ethernet ». La charge utile PPPoE contient zéro ou plusieurs TAGs. Un TAG est un ensemble type-longueur-valeur (TLV) construit et défini comme suit : Type - 16 bits. L'annexe A contient une liste de tous les types et de leurs valeurs. Longueur - Valeur non-signée sur 16 bits indiquant en octets la longueur de « Valeur ». Si un paquet de découverte est reçu avec
un TAG de type inconnu, il doit être ignoré à moins qu'il n'en soit spécifié
autrement dans ce document. Ceci fournira une compatibilité ascendante lorsque
de nouveaux TAGs seront ajoutés. Lorsque de nouveaux TAGs indispensables seront
ajoutés, le numéro de version sera incrémenté. Le paquet de découverte « Initialisation » (PADI)Les hôtes envoient le paquet PADI (PPPoE
Active Discovery Initition) en
plaçant l'adresse de diffusion dans le champ « Adresse de destination ». Le
champ « Code » contient 0x09 et le champ « Identificateur de session » contient
0x0000. Le paquet PADI doit contenir un TAG de type « Nom du service » indiquant
le service que l'hôte demande ainsi qu'un nombre quelconque de TAGs d'autres
types. Un paquet PADI entier (incluant l'en-tête PPPoE) ne doit pas dépasser
1484 octets afin de laisser la place suffisante pour qu'un agent relais puissent
ajouter un TAG « Identificateur de session relais ». Le paquet de découverte « Offre » (PADO)Quand le concentrateur d'accès reçoit un
PADI qu'il peut servir, il répond en envoyant un paquet PADO (PPPoE Active
Discovery Offer). L'adresse de
destination est l'adresse de l'hôte telle qu'envoyée dans le PADI. Le champ «
Code » est fixé à 0x07 et le champ « Identificateur de session » à 0x0000. Le
paquet PADO doit contenir exactement un TAG « Concentrateur d'accès-Nom »
contenant le nom du concentrateur d'accès, un TAG « Nom du service » identique à
celui contenu dans le PADI et un nombre quelconque d'autres TAGs « Nom du
service » indiquant les autres services offerts par le concentrateur d'accès. Si
le concentrateur d'accès ne peut pas servir le PADI, il ne doit pas répondre
avec un PADO. Le paquet de découverte « Requête » (PADR) Puisque le PADI a été envoyé en
diffusion, l'hôte peut recevoir plusieurs PADO. L'hôte examine les paquets PADO
reçus et en choisit un. Le choix peut être basé sur le nom du concentrateur
d'accès ou sur les services offerts. L'hôte envoie alors un paquet PADR (PPPoE
Active Discovery Request) au
concentrateur d'accès sélectionné. Le champ « Adresse de destination » est
l'adresse Ethernet du concentrateur d'accès qui a été envoyée par le PADO. Le
champ « Code » contient 0x19 et le champ « Identificateur de session » la valeur
0x0000. Le paquet PADR doit contenir exactement un TAG de type « Nom du service
» indiquant le nom du service que l'hôte a demandé et un nombre quelconque de
TAGs d'autres types. Le paquet de découverte « Confirmation de session » (PADS)Quand le concentrateur d'accès reçoit un
paquet PADR, il se prépare à commencer une session PPP. Il génère un
identificateur de session unique pour la session PPPoE et répond à l'hôte avec
un paquet PADS (PPPoE Active Discovery Session-confirmation). Le champ « Adresse de destination » est l'adresse Ethernet de
l'hôte qui a envoyé le PADR. Le champ « Code » contient 0x65 et le champ «
Identificateur de session » doit être mis à la valeur unique générée pour cette
session PPPOE. Le paquet PADS contient exactement un TAG de type « Nom du
service » indiquant le nom du service sous lequel le concentrateur d'accès a
accepté la session PPPoE et un nombre quelconque de TAGs d'autres types. Si le
concentrateur d'accès n'accepte pas le service proposé dans le PADR, il doit
répondre avec un PADS contenant un TAG de type « Nom du service-Erreur ». (et un
nombre quelconque de TAGs d'autres types). Dans ce cas le champ « Identificateur
de session » doit contenir 0x0000. Le paquet de découverte « Terminaison » (PADT)Ce paquet peut être envoyé à n'importe
quel moment après qu'une session ait été établie pour indiquer que la session
PPPoE est terminée. Il peut être envoyé soit par l'hôte, soit par le
concentrateur d'accès. Le champ « Adresse de destination » est une adresse
Ethernet fixée, le champ « Code » contient 0xa7 et le champ « Identificateur de
session » doit indiquer quelle session se termine. Aucun TAG n'est nécessaire.
Quand un paquet PADT (PPPoE Active Discovery Terminate) est reçu, aucun autre trafic PPP utilisant cette session ne
peut être envoyé. Même les paquets normalement utilisés pour terminer une
session PPP ne doivent pas être envoyés après réception d'un PADT. Une extrémité
PPP devrait utiliser le protocole PPP lui-même pour arrêter une session PPPoE,
mais le paquet PADT peut être utilisé quand PPP ne le peut pas. 4.4.2 - Session PPPUne fois que la session PPPoE est
ouverte, les données PPP sont envoyées comme dans n'importe quelle autre
encapsulation PPP. Tous les paquets Ethernet contiennent une adresse fixe. Le
champ « Type Ethernet » vaut 0x8864. Le champ « Code » de PPPoE doit contenir
0x00. Le champ « Identificateur de session » ne doit pas changer pour cette
session PPPoE et doit être à la même valeur que celle assignée lors de l'étape
de découverte. La charge utile PPPoE contient une trame PPP. La trame commence
avec l'identificateur de protocole de PPP. Quand un hôte ne reçoit pas de paquet PADO au bout d'un laps de temps déterminé, il doit renvoyer le paquet PADI et doubler la période d'attente. Cela peut se répéter autant de fois que souhaité et désiré. Si l'hôte attend pour recevoir un paquet PADS, un mécanisme similaire de temps mort doit être employé, avec l'hôte renvoyant le PADR. Après un nombre déterminé d'essais, l'hôte doit alors renvoyer un paquet PADI. Les valeurs du champ « Type Ethernet » employées dans ce document (0x8863 et 0x8864) ont été assignées par l'IEEE pour l'utilisation de PPPoE. L'utilisation de ces valeurs et le champ « Version » sont les seuls identifiants du protocole. 4.5 - SécuritéAfin de se protéger contre d'éventuels
actes de piratage, le point d'accès (AC : Access Concentrator) peut utiliser le
TAG AC-Cookie. Ce dernier doit être en effet capable de générer de manière
unique une valeur de TAG basée sur l'adresse MAC source d'une requête PADR,
identifiant l'hôte émetteur. Cet identifiant permettra ainsi au point d'accès de
limiter le nombre de sessions simultanées pour un hôte donné. L'algorithme
utilisé pour la génération d'un identifiant unique à partir de l'adresse MAC est
laissé au choix des constructeurs (détail d'implémentation). L'algorithme HMAC (Keyed-Hashing
for Message Authentication) peut par exemple être mis en place. Il nécessite une
clé privée qui n'est connue que du point d'accès. Attention toutefois à
l'utilisation du TAG AC-Cookie, car il est une méthode de protection contre
certaines attaques, mais il n'offre pas une garantie de sécurité totale. Ne jamais refuser une requête basée sur le TAG Service-Name, et toujours lui retourner la valeur du service demandé. Il y a donc correspondance entre le service demandé et le service retourné à l'hôte émetteur. N'accepter que les requêtes Service-Name ayant une longueur de TAG nulle (indiquant n'importe quel service). L'hôte émetteur et le point d'accès connaissent déjà le type de service utilisé pour cette session. L'information sur le service ne circule donc plus sur le réseau. 5 - Le protocole L2TP5.1 - IntroductionL2TP a été conçu pour transporter des
sessions PPP au travers d'un réseau IP, et de terminer physiquement les sessions
PPP en un point de concentration déterminé dans le réseau. 5.2 - Format de l'entête
T - 1 bit indiquant le type de message. 0 si c'est un message de données, 1 si c'est un message de contrôle. L - 1 bit qui positionné à 1, indique la présence du champ longueur. Ce bit doit être mis à 1 dans les messages de contrôle. 0 - 2 bits réservés pour des extensions futures. Pour l'instant ces bits sont mis à 0 et ignorés. S - 1 bit qui positionné à 1 indique la présence des champs Ns et Nr. Ce bit doit être à 1 dans les messages de contrôle. 0 - 1 bit réservé pour des extensions futures. Pour l'instant ce bit est mis à 0 et ignoré. O - 1 bit qui positionné à 1, indique la présence du champ Offset Size. Ce bit doit être à 0 pour les messages de contrôle. P - 1 bit qui positionné à 1, considère ce message comme prioritaire. Exemple : messages LCP echo request utilisés par les extrémités PPP pour le maintien de la session PPP. 0 - 4 bits réservés pour des extensions futures. Pour l'instant ces bits sont mis à 0 et ignorés. Version - 4 bits indique la version du tunnel employé. Il doit être à 2 pour le L2TP RFC 2661. La valeur 1 représenterait un paquets L2F. Longueur - 16 bits. Ce champ est optionnel et représente la longueur totale du message en octet. Ce champ n'existe que si le flag L est positionné à 1. Tunnel ID - 16 bits représentant l'identifiant du tunnel, qui a une signification locale. Le Tunnel ID d'un message est celui du destinataire. Session ID - 16 bits représentant l'identification pour une session dans un tunnel. La signification est également purement locale. La session ID d'un message est celui du destinataire. Ns - 16 bits correspondant au numéro de séquence pour ce message. Nr - 16 bits correspondant au numéro de séquence attendu lors de la réception du prochain message. Offset Size - 16 bits représentant la longueur de la fin de l'entête L2TP. 5.3 - Les concentrateurs d'accès - LACLes concentrateurs d'accès L2TP,
signifiant L2TP Access Concentrateur (LAC), peuvent être
intégrés à la structure d'un réseau commuté comme le réseau téléphonique commuté
(RTC) ou encore associés à un système d'extrémité PPP prenant en charge le
protocole L2TP. 5.4 - Les serveurs réseau - LNSLes serveurs réseau L2TP, signifiant L2tp Network Server (LNS), peuvent fonctionner sur toute plate-forme prenant en charge la terminaison PPP. Les serveurs réseaux L2TP gèrent le protocole L2TP côté serveur. Les serveurs LNS sont les émetteurs des appels sortants et les destinataires des appels entrants. Ils sont responsables de l'authentification du tunnel. 5.5 - Avantages et inconvénientsL2TP repose sur UDP qui lui même repose
sur IP. Au total, l'empilement total des couches protocolaires est le suivant
(en partant du backbone) : IP/PPP/L2TP/UDP/IP/Couche2. A cela se rajoutent TCP/HTTP
si l'utilisateur surfe sur le web. L'ensemble n'est donc pas très léger, et une
attention particulière doit être portée sur ce qui est de l'accordement de MRU
(pour PPP) avec la MTU de tous les équipements IP traversés, de telle façon à
éliminer la fragmentation sur les paquets de grande taille. L'overhead
représente donc l'inconvénient de L2TP. 6 - L'architecture PPP - L2TP6.1 - Architecture IPVoici l'architecture PPP transporté sur
un réseau d'infrastructure IP via L2TP : 6.2 - Les encapsulationsVoici un exemple dans le cas où le client surf via le protocole HTTP. 6.2.1 - Cas de PPP
6.2.1 - Cas de PPPoE
6.2.1 - Cas de L2TP
6.3 - Les tailles maximums de l'OverHead6.3.1 - Cas de PPPOverHead = PPP
6.3.2 - Cas de PPPoEOverHead = PPP + PPPoE
6.3.2 - Cas de L2TPOverHead = PPP + L2TP + UDP + IP
6.4 - Problématique liée au MTUSi l'infrastructure de l'opérateur est basée sur Ethernet, alors un Overhead de 42 octets demande une gestion de trame Ethernet de 1518+42 soit 1560 octets pour ne pas fragmenter. Je ne compte pas en plus si cette infrastructure Ethernet gère les VLAN. L'utilisation de la VOIP devient dans ce cadre assez difficile à maîtriser. 7 - ConclusionL2TP permet en conclusion le transport d'une couche 2 (PPP)
over un réseau d'infrastructure basé sur IP. Cela permet aux opérateurs de
véhiculer des services étanches basés sur une authentification Radius apportant
un provisionning simple, dynamique et rapide. L'intérêt d'une séparation du
réseau d'infrastructure des services devient évidente. 8 - Discussion autour de la documentationVous pouvez poser toutes vos questions, vos remarques et vos expériences à propos des Architecture L2TPs - Layer 2 Tunneling Protocol. Pour cela, rendez-vous sur le Forum "Les réseaux privées virtuels". 9 - Suivi du documentLe 07 décembre 2004, par _SebF, création du document. Merci à Emmanuel Hulin et Philippe Masquart
|
|