Both sides previous revisionPrevious revisionNext revision | Previous revision |
brouillons:aethernet [2016/07/24 10:00] – [Couches transport supportées] f4hof | brouillons:aethernet [2016/07/24 10:24] (current) – [Remarque sur les M-PDU de broadcast et multicast] f4hof |
---|
====== AEthernet ====== | ====== AEthernet ====== |
| |
**//Attention: ce document est un brouillon, son contenu est encore susceptible d'évoluer.//** | ===== 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. | 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. |
| |
En outre, cette couche intermédiaire doit posséder les méthodes suivantes: | En outre, cette couche intermédiaire doit posséder les méthodes suivantes: |
* ''sendDataFrame(size_t,uint8_t[])'' : permet d'encapsuler un M-PDU dans un P-PDU et de l'envoyer. Cette fonction est obligatoirement synchrone. | * ''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 un M-PDU dans un 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. | * ''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. | * ''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 de 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). | * ''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). | * ''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 le temps d'intervalle en tranches de 10ms (ex: 12 => 120ms). | * ''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). | * ''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. | * ''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. | * ''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'un M-PDU. | * ''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 ==== | ==== 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. | 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. |
| |
AEthernet supporte tous les protocoles de couche transport prises en charge par Ethernet. | AEthernet supporte tous les protocoles de couche transport prises en charge par Ethernet. |
| |
Le champ désignant le protocole du M-SDU correspond exactement au champ Ethertype dans Ethernet. La liste officielle des [[http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml#ieee-802-numbers-1|EtherType]] est maintenue par l'IANA. | |
===== Format d'en-tête ===== | ===== Format d'en-tête ===== |
| |
L'en-tête d'une D-PDU AEthernet mesure 18 octets, sauf quand 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 T-PDU , des données de la T-PDU et de la somme de contrôle. | 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 | AEthertype | Données T-PDU | Somme de controle | | | 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) | | | DCSIGN (8 octets) | SCSIGN (8 octets) | AETYPE (2 octets) | DATA (1-x octets) | FCS (4 octets) | |
| |
==== Le callsign destination ==== | ==== Le callsign destination ==== |
| |
Le champ DCSIGN désigne l'équipement destination de la trame AEthernet. | Le champ DCSIGN désigne l'équipement destination d'une M-PDU AEthernet. |
| |
Il est formaté comme suit: | Il est formaté comme suit: |
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" | 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: Les caractères vides du callsign sont remplis avec des espaces (0x20). Le SSID est généralement choisi parmi les lettres minuscules dans l'alphabet ASCII. | 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 callsign source ==== |
| |
Le champ SCSIGN désigne l'équipement source de la trame AEthernet. Il est formatté comme suit: | Le champ SCSIGN désigne l'équipement source de la M-PDU AEthernet. Il est formaté comme suit: |
^ Octet ^^^^^^^^ | ^ Octet ^^^^^^^^ |
^ 0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ | ^ 0 ^ 1 ^ 2 ^ 3 ^ 4 ^ 5 ^ 6 ^ 7 ^ |
| CALLSIGN ||||||| SSID | | | CALLSIGN ||||||| SSID | |
| |
Les caractères vides du callsign sont remplis avec des espaces (0x20). | 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 SSID est généralement choisi parmi les lettres minuscules dans l'alphabet ASCII. |
| |
Afin de respecter la réglementation locale, un équipement peut ignorer les paquets émis par un callsign dont la classe de licence est insuffisante pour accéder au réseau ( "F0" et "F*0" en France, "TK0" en Corse par ex.) | 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 protocole de couche suivante ==== | ==== Le type de M-SDU ==== |
| |
Le champ AETYPE (ou "AEthertype") de deux octets sert à indiquer le protocole employé par les données encapsulées. | Le champ AETYPE de deux octets sert à indiquer le type de données stockées dans le M-SDU. |
| |
Il correspond totalement au champ EtherType. La [[http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml#ieee-802-numbers-1|liste complète des ethertypes]] est disponible sur le site de l'IANA. | Ce champ correspond exactement au champ EtherType. La [[http://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.xhtml#ieee-802-numbers-1|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 ==== | ==== 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 trame AEthernet (à savoir sur la concaténation des champs DCSIGN, SCSIGN, AETYPE, DATA). | 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). | Les octets du CRC32 sont stockés dans le champ FCS en respectant l'ordre des octets du réseau (big-endian). |
| |
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é. | 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é. |
| |
La taille maximale d'un M-SDU est appelée MTU. | |
| |
Tout équipement AEthernet doit supporter une MTU d'au moins 256 octets. | Tout équipement AEthernet doit supporter une MTU d'au moins 256 octets. |
| |
La MTU maximale est de 65505 octets. | |
| |
Cette taille est donnée pour respecter la condition de taille d'un M-PDU dans le pire des cas (où l'on utilise une en-tête 802.1ad). Dans ce cas, l'overhead de la D-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. | |
| |
Les valeurs typiques de la MTU sont 256, 512, 576, 1024, 1280 et 1500 octets. | Les valeurs typiques de la MTU sont 256, 512, 576, 1024, 1280 et 1500 octets. |
La fragmentation des paquets IPv4 est à proscrire. C'est un mécanisme historique qui a été prouvé néfaste tant sur pour les performances [[http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-87-3.pdf|dès 1987]], que pour [[http://all.net/Analyst/netsec/1995-09.html|la sécurité]]. | La fragmentation des paquets IPv4 est à proscrire. C'est un mécanisme historique qui a été prouvé néfaste tant sur pour les performances [[http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-87-3.pdf|dès 1987]], que pour [[http://all.net/Analyst/netsec/1995-09.html|la sécurité]]. |
| |
L'utilisation d'acquittement sélectif au niveau de la couche transport est par contre encouragée. | L'utilisation d’acquittement sélectif au niveau de la couche transport est par contre encouragée. |
| |
===== Remarque sur les D-PDU de broadcast et multicast ===== | ===== Remarque sur les M-PDU de broadcast et multicast ===== |
| |
Les D-PDU avec un callsign destination de broadcast et de multicast issus d'un medium ne doivent pas être répétées sur l'interface source. | 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 ===== | ===== Trames de test ===== |
| |