User Tools

Site Tools


brouillons:aethernet

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
brouillons:aethernet [2016/07/24 10:00] – [Format d'en-tête] f4hofbrouillons:aethernet [2016/07/24 10:24] (current) – [Remarque sur les M-PDU de broadcast et multicast] f4hof
Line 1: Line 1:
 ====== 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. 
Line 20: Line 23:
  
 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.
Line 38: Line 41:
  
 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  |  Ethertype   M-SDU  |  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)  |
  
Line 50: Line 51:
 ==== 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:
Line 65: Line 66:
 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).
Line 98: Line 109:
  
 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.
Line 124: Line 129:
 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 dacquittement 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 =====
  
brouillons/aethernet.1469354448.txt.gz · Last modified: 2016/07/24 10:00 by f4hof