IEEE 802.1Q
# IEEE 802.1Q

Le standard 802.1Q est un standard IEEE créé en 1999.

Il permet de modifier la trame Ethernet au niveau de la couche MAC afin de fournir un mécanisme d'étiquetage de trame très répandu et implanté dans de nombreux équipements de marques différentes. Il permet de propager plusieurs VLAN sur un même lien physique (trunk). Shortest Path Bridging (IEEE 802.1aq) Incorporé dans l'IEEE 802.1Q-2014

Ce standard succède à l'encapsulation ISL propriétaire Cisco. L'en-tête de trame est complété par une balise de 4 octets.

Le standard IEEE 802.1Q définit le contenu de la balise de VLAN (VLAN tag) avec laquelle on complète l'en-tête de trame Ethernet. Le format de la trame Ethernet modifiée avec les 4 octets supplémentaires est présenté ci-dessous.

## Contenu des trames Ethernet

### Trame ethernet

| adresse MAC dst. | adresse MAC source | Taille de la trame/EtherType | Data | FCS |
| - | - | - | - | - |

### Trame ethernet modifiée

| adresse MAC dst. | adresse MAC src. | Tag (inséré) | Taille de la trame/EtherType | Data | FCS (modifié) |
| - | - | - | - | - | - |

Le champ FCS est recalculé après l'insertion de la balise de VLAN.

### Contenu du champ "Tag:IEEE 802.1Q"

| TPID (16 bits) | TCI (16 bits) |
| - | - |

**Tag protocol identifier, TPID**

Les 16 premiers bits sont utilisés pour identifier le protocole de la balise insérée. Dans le cas de la balise 802.1Q la valeur de ce champ est fixée à 0x8100.

**Contenu du champ TCI (Tag control information)**

| Priority (3 bits) | CFI (1 bit) | Vlan ID, VID (12 bits) |
| - | - | - |

**Contenu du champ TCI (Tag control information)**

**Priorité ( PCP : Priority Code Point )**

Ce champ de 3 bits fait référence au standard IEEE 802.1p. Sur 3 bits on peut coder 8 niveaux de priorité de 0 à 7. Ces 8 niveaux sont utilisés pour fixer une priorité aux trames d'un VLAN relativement aux autres VLAN. La notion de priorité dans les VLAN (niveau 2) est indépendante des mécanismes de priorité IP (niveau 3).

**Contenu du champ TCI (Tag control information)**

**Canonical Format Identifier, CFI**

Ce champ codé sur 1 bit assure la compatibilité entre les adresses MAC Ethernet et Token Ring. Un commutateur Ethernet fixera toujours cette valeur à 0. Si un port Ethernet reçoit une valeur 1 pour ce champ, alors la trame ne sera pas propagée puisqu'elle est destinée à un port «sans balise» (untagged port).

**Contenu du champ TCI (Tag control information)**

**VLAN Id, VID**

Ce champ de 12 bits sert à identifier le virtual lan (VLAN) auquel appartient la trame. Il est possible de coder 4094 VLAN (de 1 à 4094) avec ce champ. La valeur "0" signifie qu'il n'y a pas de VLAN, et la valeur 4095 est réservée. Les valeurs 1002 à 1005 sont réservées pour des protocoles de niveau 2 différents d'Ethernet.

## Spécificités

### Activation sur Cisco

Dans les switch Cisco d'ancienne génération, voici la commande (en italique) qu'il vous faudra envoyer à votre matériel, vous permettant d'utiliser 802.1Q à la place de ISL en configuration "terminal" de l'interface à paramétrer.

Aujourd'hui ce protocole est activé par défaut, et l'ISL n'est plus disponible dans la plupart des cas.

### Activation sur Brocade

Tagger un port :

Enlever un tag :

### Activation sur Alcatel

Tagger un port :

Enlever un tag :

### Activation sur HP Procurve

Tagger un port :

Enlever un tag :

### Activation sur Linux

À partir des versions 2.6 et supérieures du kernel, les VLAN taggés 802.1Q sont pris en charge (moyennant l'utilisation du module noyau 8021q). Les commandes permettant leur configuration sont : vconfig ou iproute

    vconfig add ethx vid
    ip link add link ethX ethX.vid type vlan id vid
    vconfig rem ethx.vid
    ip link delete ethX.vid

**Analyse du trafic 802.1Q**

Les logiciels tcpdump ou wireshark permettent d'analyser le trafic VLAN ; exemple :

    /usr/sbin/tcpdump -v -i eth0 vlan

### Activation sur FreeBSD

Il suffit d'utiliser la commande ifconfig. Le kernel GENERIC sur FreeBSD 6 et 7 supporte les VLAN taggés.

    ifconfig create vlan1
    ifconfig vlan1 vlan 1 vlandev intX
