User Tools

Site Tools


brouillons:aethernet

AEthernet

Suivi des changements

Version 1.0: 24 Juillet 2016 - Publication initiale

Objectif

AEthernet ou “Amateur Ethernet” est une adaptation d'Ethernet dont l'objectif premier est d'établir des liens en packet radio, en dessous de 2GHz, dans un réseau tout IP.

L'objectif de ce protocole est de fournir un remplaçant léger au format AX.25 et à D-Star DD, qui ne nécessite pas d'embarquer un certain nombre de fonctionnalités déjà fournies par des couches supérieures, ou inférieures.

La différence majeure avec le reste des protocoles radio-amateur est qu'AEthernet n'est pas conçu pour être répété. L'ensemble des stations d'un segment physique doivent pouvoir s'entendre mutuellement pour que le réseau fonctionne.

Couche matérielle

AEthernet est défini pour être transporté de deux manières, et dans deux buts différents:

  • Transport sur une ligne RS232 (“KISS AEthernet”).
  • Transport sur un support physique brut.

Serial Line AEthernet (alias "KISS AEthernet")

Cette couche matérielle permet de réutiliser du matériel radioamateur existant. Dans ce cas, les P-PDU sont au format KISS.

Une couche intermédiaire doit être mise en place entre la ligne série et la couche AEthernet. Celle-ci doit prendre en charge le calcul de la longueur des M-PDU, et la conversion des M-PDU en P-PDU, et vice-versa.

En outre, cette couche intermédiaire doit posséder les méthodes suivantes:

  • sendDataFrame(size_t,uint8_t[]) : permet d'encapsuler une M-PDU dans une P-PDU et de l'envoyer. Cette fonction est obligatoirement synchrone.
  • sendDataFrameAsync(size_t,uint8_t[]) : permet d'encapsuler une M-PDU dans une P-PDU et de l'envoyer. Cette fonction peut rendre la main une fois qu'elle n'a plus besoin de bloquer l'écriture dans l'argument de données.
  • sendInitFrame(size_t,uint8_t[]) : permet d'envoyer une chaîne de caractères brute pour basculer la TNC en mode KISS. Cette fonction est ne rend la main qu'une fois la commande totalement envoyée.
  • setTxDelay(uint8_t) : définit le temps d'activation du transmetteur radio, avant la transmission de données. L'argument définit la valeur de ce temps en incréments de 10ms (ex: 10 ⇒ 100ms).
  • setPersistence(uint8_t) : Définit le paramètre de persistance p. L'argument P est défini de 0 à 255. Le paramètre de persistence p est défini comme suit: P = p * 256 -1 (ex: 63 ⇒ p= 0.25).
  • setSlotTime(uint8_t) : Définit la durée d'un intervalle de temps en tranches de 10ms (ex: 12 ⇒ 120ms).
  • setTxTail(uint8_t) : Définit le temps de maintien d'activité du transmetteur après la fin de transmission, en incréments de 10ms (eg. 11 ⇒ 110ms).
  • setFullDuplex(uint8_t) : Définit la capacité de duplex du canal de transmission. L'argument vaut zéro pour un canal half duplex, et une valeur non nulle pour un canal full-duplex.
  • setHardware(size_t,uint8_t[]) : Permet d'envoyer des commandes de paramétrage spécifiques à chaque TNC. Sur les TNC-1, cette commande définit la vitesse de modem. D'autres modem peuvent utiliser cette fonction pour d'autres fonctions matérielles spécifiques.
  • registerReceiveFrame( void (*receiveDataFrame)(size_t,uint8_t[])) : Permet de déclencher le traitement à réaliser en cas de réception d'une M-PDU.

Raw Media AEthernet

AEthernet peut être utilisé sur d'autres médias que de la radio. La description des couches matérielles associées est réalisée dans un autre document.

FIXME Donner le lien vers l'autre document

Couches transport supportées

AEthernet supporte tous les protocoles de couche transport prises en charge par Ethernet.

Format d'en-tête

L'en-tête d'une M-PDU AEthernet mesure 18 octets, sauf si l'on utilise 802.1q (VLAN) ou 802.1ad (Q-in-Q). Elle est composée du callsign destination, du callsign source, du type de données contenues dans la M-SDU, de la M-SDU et de la somme de contrôle.

Callsign+SSID Destination Callsign+SSID source Type de M-SDU M-SDU Somme de controle
DCSIGN (8 octets) SCSIGN (8 octets) AETYPE (2 octets) DATA (1-x octets) FCS (4 octets)

Le callsign destination

Le champ DCSIGN désigne l'équipement destination d'une M-PDU AEthernet.

Il est formaté comme suit:

0 1 2 3 4 5 6 7 Type d'adresse
“C” “Q” “C” “Q” “C” “Q” “ ” “ ” Paquet à destination de toutes les stations (Broadcast, cf. note 1)
“M” “C” “A” “S” “T” X2 X1 X0 Paquet destiné à un groupe de plusieurs stations (Multicast, cf. note 2)
CALLSIGN SSID Paquet destiné à une station portant le callsign et le SSID (Unicast, cf. note 3)

Note 1: Les caractères 6 et 7 sont des espaces (0x20).

Note 2: Les octets X0 à X2 sont déterminés à partir les 23 bits les moins significatifs de l'adresse IP destination. Les octets sont dans l'ordre réseau d'une adresse IP. X0 est donc le moins significatif et X2 le plus significatif.

Par exemple, pour 224.77.73.88, X2 = 0x4D & 0x7F = 0x4D (“M” en ascii), X1 = 0x49 (“H” en ascii), X0 = 0x58 (“X” en ascii). Le callsign déterminé est “MCASTMHX”

Note 3: Le caractère de bourrage du callsign est l'espace (0x20). Le SSID est généralement choisi parmi les lettres minuscules dans l'alphabet ASCII.

Le callsign source

Le champ SCSIGN désigne l'équipement source de la M-PDU AEthernet. Il est formaté comme suit:

Octet
0 1 2 3 4 5 6 7
CALLSIGN SSID

Le caractère de bourrage du callsign est l'espace (0x20).

Le SSID est généralement choisi parmi les lettres minuscules dans l'alphabet ASCII.

Afin de respecter la réglementation locale, un équipement peut choisir d'ignorer les paquets émis par un callsign dont la classe de licence n'autorise pas l'accès au réseau ( “F0” et “F*0” en France, “TK0” en Corse par ex.)

Le type de M-SDU

Le champ AETYPE de deux octets sert à indiquer le type de données stockées dans le M-SDU.

Ce champ correspond exactement au champ EtherType. La liste complète des ethertypes est disponible sur le site de l'IANA.

M-SDU

Ce champ contient les données à transmettre à la couche réseau désignée par le champ AETYPE.

La taille maximale d'un M-SDU est appelée MTU.

La MTU maximale est de 65505 octets.

Cette taille est donnée pour respecter la condition de taille d'une M-PDU dans le pire des cas (où l'on utilise une en-tête 802.1ad). Dans ce cas, l'overhead de la M-PDU est de 30 octets: 8 pour DCSIGN, 8 pour SCSIGN, 8 octets pour l'en-tête 802.1ad, 2 pour AETYPE, 4 pour le FCS.

La somme de contrôle

Le champ FCS de 4 octets est utilisé pour stocker la valeur du CRC32 appliqué sur l'ensemble des octets précédents de la M-PDU AEthernet.

Les octets du CRC32 sont stockés dans le champ FCS en respectant l'ordre des octets du réseau (big-endian).

Le polynôme générateur utilisé pour le calcul du CRC32 est celui spécifié dans la norme ITU V.42, section 8.1.1.6.2. Pour rappel ce polynôme est:

G(x) = x32+x26+x23+x22+x16+x12+x11+x10+x8+x7+x5+x4+x2+x+1

Taille des trames

La taille maximale d'une trame AEthernet est de 65535 octets, pour que la taille d'un M-PDU tienne dans un entier de 16 bits non signé.

Tout équipement AEthernet doit supporter une MTU d'au moins 256 octets.

Les valeurs typiques de la MTU sont 256, 512, 576, 1024, 1280 et 1500 octets.

De manière générale, on essaiera de garder une MTU qui permet de transmettre 1 P-PDU en moins de 100ms, sauf pour les canaux dont la capacité est contrainte (<9600bps).

Capacité radio MTU recommandée Observations
<9600 bps 256
9600 bps 512 256 si canal partagé et chargé
19200 bps 1024(1) 512 si canal partagé et chargé
33600 bps 1500 768 si canal partagé et chargé
>33600 bps 1500

Note 1: La MTU minimale pour transporter de l'IPv6 est de 1280 octets. On peut envisager un passage de la MTU à 1280 octets dans ce cas.

La compression TCP/IP Van Jacobson est recommandée lorsque la MTU est de 256 octets, en raison du gain de 12% apporté du point de vue de l'utilisation radio. Au delà de 512 octets, l'utilité de la compression est marginale.

La fragmentation des paquets IPv4 est à proscrire. C'est un mécanisme historique qui a été prouvé néfaste tant sur pour les performances dès 1987, que pour la sécurité.

L'utilisation d’acquittement sélectif au niveau de la couche transport est par contre encouragée.

Remarque sur les M-PDU de broadcast et multicast

Les M-PDU avec un callsign destination de broadcast ou de multicast issus d'un medium ne doivent pas être répétées sur le même médium.

Trames de test

ARP request: SRC: F4HOF-h   DST: Broadcast --  Who is 44.151.42.3? Tell 44.151.42.2

DCSIGN            43 51 43 51 43 51 20 20 ("CQCQCQ  ")
SCSIGN            46 34 48 4F 46 20 20 68 ("F4HOF  h")
AETYPE            08 06 (ARP)

Hardware Type     01 01 (AEthernet)
Protocol Type     08 00 (IPv4)
Hardware Size     08 (bytes) 
Protocol Size     04 (bytes)
Opcode            00 01 (request)

Sender Call       46 34 48 4F 46 20 20 68 ("F4HOF  h")
Sender IPv4 addr  2C 97 2A 02 (44.151.42.2)
Target Call       00 00 00 00 00 00 00 00
Target IPv4 addr  2C 97 2A 03 (44.151.42.3)

FCS               5F D8 5A 9E (CRC32: 0x9E5AD85F)

Trame Brute

43 51 43 51 43 51 20 20 46 34 48 4F 46 20 20 68 08 06 01 01 08 00 08 04 00 01 46 34 48 4F 46 20 20 68 2C 97 2A 02 00 00 00 00 00 00 00 00 2C 97 2A 03 5F D8 5A 9E
ARP reply: SRC: F1ZCK-c   DST: F4HOF-h -- 44.168.0.11 is at F1ZCK-c

DCSIGN            46 34 48 4F 46 20 20 68 ("F4HOF  h")
SCSIGN            46 31 5A 43 4B 20 20 63 ("F1ZCK  c")
AETYPE            08 06 (ARP)

Hardware Type     01 01 (AEthernet)
Protocol Type     08 00 (IPv4)
Hardware Size     08 (bytes) 
Protocol Size     04 (bytes)
Opcode            00 02 (reply)

Sender Call       46 31 5A 43 4B 20 20 63 ("F1ZCK  c")
Sender IPv4 addr  2C 97 2A 03 (44.151.42.3)
Target Call       46 34 48 4F 46 20 20 68 ("F4HOF  h")
Target IPv4 addr  2C 97 2A 02 (44.151.42.2)

FCS               C3 8D FF 3D (CRC32: 0x3DFF8DC3)

Trame Brute

46 34 48 4F 46 20 20 68 46 31 5A 43 4B 20 20 63 08 06 01 01 08 00 08 04 00 02 46 31 5A 43 4B 20 20 63 2C 97 2A 03 46 34 48 4F 46 20 20 68 2C 97 2A 02 C3 8D FF 3D
brouillons/aethernet.txt · Last modified: 2016/07/24 10:24 by f4hof