# Autonégociation

L' autonégociation est un mécanisme souvent utilisé sur les réseaux de télécommunications, notamment les réseaux Ethernet, afin que deux équipements connectés point à point choisissent des paramètres de communication communs, tel que leur débit et la direction du flux (mode duplex). Grâce à l'autonégociation, les deux équipements connectés s'échangent dans un premier temps leurs aptitudes, mesurent éventuellement la qualité de la liaison qui les relie et sélectionnent ensuite le mode de transmission, commun aux deux, le plus rapide.

## Histoire et standardisation

L'autonégociation a été initialement définie dans la clause 28 de la norme Ethernet IEEE 802.3u en 1995. Elle a été décrite dans la partie consacrée à Fast Ethernet mais est également rétro-compatible avec le 10BASE-T. Néanmoins, son implémentation était optionnelle et une partie des spécifications ouvertes à interprétation, ce qui posait des problèmes d'interopérabilité entre différents équipementiers. Ces portions furent supprimées dans la version IEEE 802.3 de 1998. En 1999, le protocole de négociation fut significativement étendu par la nouvelle norme IEEE 802.3, spécifiant le protocole Gigabit Ethernet, rendant le mécanisme d'autonégociation obligatoire pour du Gigabit Ethernet en 1000BASE-T (quatre paires de fils sur câble de catégorie 5) ou en 1000BASE-TX (deux paires de fils sur câble de catégorie 6).

## Description générale

L'autonégociation est un mécanisme de la couche physique du modèle OSI. Elle peut être utilisée par des équipements capables de transmettre des données à différentes vitesses (10 Mb/s, 100 Mb/s ou 1 000 Mb/s, par exemple) et par différents modes duplex (half-duplex ou full-duplex). Chaque terminal annonce toutes ses aptitudes technologiques, c'est-à-dire ses différents modes de communication. Les deux terminaux choisissent le meilleur mode qu'ils ont en commun, en sélectionnant la vitesse la plus élevée et en préférant le mode full-duplex au mode half-duplex pour une même vitesse.
Il est aussi possible de sélectionner parmi différents standards Ethernet à la même vitesse, bien qu'en pratique seul un standard par vitesse soit pris en charge. L'autonégociation est également utilisée pour communiquer le type de port (port unique ou multi-port) ainsi que les paramètres maître/esclave (si configuré manuellement ou non, si le terminal est maître ou esclave si c'est le cas, et le bit master-slave seed sinon).
Pour le Gigabit Ethernet, l'autonégociation est obligatoirement présente et activée. Ainsi, plusieurs constructeurs empêchent la désactivation de l'autonégociation sur leurs équipements Gigabit Ethernet.
Il existe des cas de figure où l'autonégociation n'est pas possible. Par exemple quand les équipements provenant de deux constructeurs différents utilisent chacun un algorithme d'autonégociation différent, ou bien quand un terminal supportant l'autonégociation est connecté à un second ne le supportant pas ou l'ayant désactivée logiciellement. Dans ce cas, l'autonégociation ne fonctionnera pas et les deux équipements passeront chacun en « détection parallèle ». Dans ces conditions, le terminal supportant l'autonégociation peut déterminer la vitesse de l'autre équipement et sélectionne la même vitesse que lui. Comme ce mécanisme de « détection parallèle » ne permet pas de déterminer le mode (half-duplex ou full-duplex), le terminal supportant l'autonégociation décide que l'autre équipement est un hub, et choisit le mode half-duplex. Si le terminal sans autonégociation est configuré en full-duplex, une incohérence de mode duplex en résultera. L'impact généralement observé dans ce cas est une connexion fonctionnant à une vitesse très faible.

## Signaux électriques

L'autonégociation est fondée sur des impulsions similaires à celles utilisées par les terminaux 10BASE-T pour détecter la présence d'autres équipements connectés au lien. Elles sont émises par un équipement lorsqu'il n'émet ou ne reçoit aucune donnée. Il s'agit d'impulsions électriques uni-polaires, uniquement positives, d'une durée de 100 ns, générées à un intervalle de 16,8 ms (avec une tolérance de 8 ms). Ces impulsions sont appelées impulsions de test d'intégrité du lien (Link Integrity Test, LIT) dans la terminologie de la norme 10BASE-T, et sont connues sous le nom d'impulsions normales du lien (Normal Link Pulses, NLP) dans la spécification du mécanisme de l'autonégociation.
Un équipement détecte une panne du lien (soit du média de transmission, soit de l'équipement distant), si ni aucun paquet, ni aucune impulsions ne sont reçus en 50-150 ms. La présence d'un lien valide est signalé par la réception d'un paquet valide ou de deux impulsions LIT. Afin que ceci fonctionne, les équipements émettent des impulsions LIT même s'ils n'en reçoivent aucune.
L'autonégociation utilise des impulsions similaires. Elles sont toujours unipolaires, uniquement positives et d'une durée de 100 ns, mais chacune d'elles est remplacée par un train de, au maximum, 33 impulsions. un tel train est appelé « fast link pulse » (FLP) ou burst. La durée entre le début de chaque burst est identique à la durée entre deux impulsions de lien normal, soit 16 ms avec une tolérance de 8 ms.
Les burst d'impulsions fast link sont réalisés comme suit : il y a 17 impulsions espacées de 125 µs (avec une tolérance de 14 µs). Entre deux couples d'impulsion consécutifs, une autre pulsation peut ou non être présente. Cette présence d'impulsion représente un 1 logique, l'absence, un 0 logique. Ainsi, chaque burst représente un mot logique de 16 bits. Ce mot est appelé Link Code Word (LCW). Les 17 impulsions sont toujours présentes et sont utilisées comme horloge, alors que les 16 autres impulsions peuvent être présentes ou non et représentent les informations transmises. Les bits du LCW sont numérotés de 0 à 15, où le bit 0 correspond à la première impulsion possible et le bit 15 à la dernière.
Un burst fast link pulse n'est pas reconnu comme une impulsion de lien normal. Donc, un équipement 10BASE-T recevant un tel burst d'un équipement utilisant l'autonégociation détectera une panne du lien. Un lien avec un équipement utilisant l'autonégociation pourra quand même s'établir via le mécanisme parallel device function: l'équipement 10BASE-T gardera ses impulsions de lien normal ou transmettra des paquets. L'équipement avec autonégociation, en les recevant, basculera en mode 10BASE-T half-duplex. Une incohérence de duplex en résultera si l'équipement 10BASE-T fonctionne en mode full-duplex.

## Priorité des modes

En fonction des aptitudes reçues des autres équipements, tous les équipements décident du meilleur mode possible supporté par tous les terminaux. La priorité des modes définie dans l'édition de 2002 de la norme 802.3 est la suivante :
* 1000BASE-T full duplex
* 1000BASE-T half duplex
* 100BASE-T2 full duplex
* 100BASE-TX full duplex
* 100BASE-T2 half duplex
* 100BASE-T4
* 100BASE-TX half duplex
* 10BASE-T full duplex
* 10BASE-T half duplex
En d'autres termes, parmi les modes supportés simultanément par tous les terminaux, chacun sélectionne le plus haut placé dans cette liste.

## Incohérence duplex

Une incohérence de duplex apparaît lorsque deux équipements connectés sont configurés avec des modes de duplex différents. Ceci peut arriver par exemple si l'un d'eux est configuré avec l'autonégociation alors que le second a son mode fixé en full-duplex (sans autonégociation). Dans ces conditions l'équipement utilisant l'autonégociation détecte correctement la vitesse à utiliser mais est incapable de détecter le mode de duplex correct. Ceci a pour conséquence qu'il utilise la bonne vitesse mais utilise le mode half-duplex.
Lorsqu'un terminal fonctionne en full-duplex alors que le second utilise du half-duplex, la connexion fonctionne mais à une vitesse très faible dès que les deux équipements tentent d'émettre des trames aux mêmes instants. Cela vient du fait que des données peuvent être envoyées dans les deux sens et simultanément dans le mode full-duplex mais que dans une seule direction à la fois en mode half-duplex. Ainsi, un équipement full-duplex pourra transmettre des données tout en en recevant. Si l'autre équipement fonctionne en half-duplex, il ne s'attendra pas à recevoir des données (vu qu'il en émet au même moment) ; ainsi, il détectera une collision et tentera de ré-émettre la trame qu'il émettait. Suivant le timing, l'équipement half duplex pourrait détecter une collision tardive, qu'il interprétera comme une erreur 'hard' plutôt qu'une conséquence normale de CSMA/CD et ne tentera pas de ré-émettre la trame. De l'autre côté, le terminal full-duplex ne détecte pas de collision et ne ré-émet pas de trame, même si l'autre équipement a écarté le paquet en raison d'une collision détecté. Néanmoins, l'équipement full-duplex, ne s'attendant pas à recevoir une trame tronquée par le mécanisme de détection de collision, remontera une erreur de séquence de contrôle (Frame Check Sequence/FCS) de trame. Cette combinaison de collisions tardives reportée du côté « half-duplex » et les erreurs FCS reporté par le côté "Full Duplex" peut être symptomatique d'une incohérence de mode duplex.
Cette perte de paquet arrive lorsque les équipements émettent simultanément. Ceci peut arriver même lorsque le lien est utilisé dans un seul sens, d'un point de vue utilisateur. Un flux TCP nécessite que tous les paquets émis soient acquittés par l'équipement récepteur. Même si des données sont émises que dans un seul sens, des collisions peuvent être produites via des paquets d'accusé de réception allant dans le sens opposé.