Introduction.
La convergence des réseaux de télécommutions avec le transfert de données, souvent traditionnellement orientés réseaux informatiques, vont permettre l'émergence de nouveaux protocoles de transmission (NextGen). Les liens éxistants SDH et SONET devraient fédérer cette évolution là où le concept ATM, de par sa trop grande complexité, à échoué.
La concaténation virtuelle permet une optimisation de la bande passante et peut servir de support au transport de données, voie, Ethernet, vidéo...
Exemple de signaux client & caractéristiques :
Signal | Line BW | User BW | Norme | VCG | PTI value |
GbE | 1.250 | 1.000 | 802.3 | VC-4-7v | 0000 0110 |
DVB-ASI | 0.270 | 0.200 | EN 50083-9 | VC-4-2v | 0000 1001 |
ESCON | 0.200 | 0.160 | X3.296 | VC-3-4v | 0000 0101 |
FICON | as FC | as FC | X3.230 | as FC | 0000 0100 |
2GFC | 2.125 | 1.700 | X3.230 | VC-4-12v | 0000 0011 |
GFP-F est utilisé pour l'encapsulation de protocoles orientés trame/paquets comme ethernet ou IP ; GFP-T est quant à lui prévu pour des sources utilisant le code en ligne 8B/10B (GbE, DVB-ASI...). L'inconvénient majeur du protocole GFP-F réside dans la latence ; il est nécessiite de mémoriser une trame entière en émission avant de déterminer la valeur d'en-tête PLI.
Une variente du protocole GFP-F fut dévelopée afin de pallier à ce problème de latence : GFP-T.
Principe du protocole GFP-Transparent (G7041).
Le transcodage 8B/10B est un protocole de code en ligne qui converti un mot de 8 bits, donc 2
8 combinaisons, en un mot de 10 bits. Certaines de ces combinaisons ne servent pas car relevant d'une disparité trop importante entre le nombre de 0 et de 1 ; d'autres codes permettent de définir des valeurs de controle. L'objectif d'un tel encodage est multiple :
- Maintenir un équilibre entre le nombre de 1 et de zéro.
- Utilisation de certains codes comme contrôle : début et fin de trame...
- Apporter une redondance.
Le mapper GFP-T reçoit des
caractères issuent d'un décodeur 8B/10B afin d'obtenir le mot binaire utile de 8 bits associé à un bit de drapeau.
Dans le cas d'une source Giga bit Ethernet, le flux est donc de 9bits à 125 MHz.
Le mapper GFP-T réalise en premier lieu la conversion en
code 64B/65B, code transportant l'information de 8 caractères 8B/10B cobsécutifs.
Un caratère de donnée est mappé directement dans code 64B/65B alors qu'un caratère de contrôle est ré-encodé sur 4 bits plus 4 bits de gestion.
Les octets de contrôle sont en début du code 64/65B.
Composition d'un code 64B/65B.
Une suite de 8 octets + 1 bit de drapeau est transcodée en un code 64B/65B ; il apparait aucune perte d'information, juste un ré-encodage.
64 bits constituent des octets de données, 1 bit d'en-tête (lead) précise si le premier octet est un code-K (controle) ou un code-D (donnée).
Flus 8 bits + 1 drapeau :
flag 0 0 1 0 0 0 0 0 ...
char D1 D2 C1 D3 D4 D5 D6 D7 ...
Code 64B/65B associé :
lead - octet1 - octet2 - octet3 - octet4 - octet5 - octet6 - octet7 - octet8
1 C1 D1 D2 D3 D4 D5 D6 D7
L'octet de controle C1 est définit comme suit :
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
| Z | A | A | A | C | C | C | C |
AAA : adresse de la position du code de contrôle dans le flux incident 8B/10B.
CCCC : Le code de controle transcodé sur 4 bits (voir table ci-dessous).
Plusieurs codes de contrôle peuvent se succéder, le bit Z est à '0' lors du dernier code de contrôle du code. Il faut mémoriser 8 octets du flux incident avant de connaître la structure du code 64B65B. Le bit lead (ou bit directeur) est à '1' si le premier octet du code 64B/65B est un code-K.
Exemple de code 64B/65B.
Les 9 combinaisons code-K/code-D possibles :
flag | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | data type |
0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | all data |
1 | C1 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | 7 data 1 control |
1 | C1 | C2 | D1 | D2 | D3 | D4 | D5 | D6 | 6 data 2 control |
1 | C1 | C2 | C3 | D1 | D2 | D3 | D4 | D5 | 5 data 3 control |
1 | C1 | C2 | C3 | C4 | D1 | D2 | D3 | D4 | 4 data 4 control |
1 | C1 | C2 | C3 | C4 | C5 | D1 | D2 | D3 | 3 data 5 control |
1 | C1 | C2 | C3 | C4 | C5 | C6 | D1 | D2 | 2 data 6 control |
1 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | D1 | 1 data 7 control |
1 | C1 | C2 | C3 | C4 | C5 | C6 | C7 | C8 | all control |
Une transmission selon ce format permet d'optimiser la bande passante, le rendement est de 64/65=98% contre 8/10=80%. Par ailleurs, les caractères de contrôle sont conservés, d'ou le nom transparent donné à ce mode GFP : la trame GFP-T conserve l'information d'origine.
Quelques inconvénients toutefois :
- La charge SDH/SONET doit être allignée octet or nous disposons de 65 bits.
- Absence de capacité à détecter des erreurs.
Structure d'un super bloc.
Pour y remédier une structure super bloc est utilisée. Elle est construite à partir de 8 codes 64B/65B ; les 64 octes de données sont envoyés, puis les 8 drapeaux de contrôle suivit enfin d'un code CRC-16 sur deux octets.
Le super bloc ainsi constitué est de 67 octets, ce qui est propice à un traitement sur un bus de données de 8 bits mais beaucoup moins pour des bus de 32 bits. Un CRC-24 par exemple aurait grandement facilité le traitement au détriment d'un rendement légèrement inférieur.
Le code 64B/65B est très vulnérable aux erreurs, en particulier si celle ci se produit sur le bit de drapeau : le récepteur interprète mal la donnée et génère une rafale d'erreur. Le code de redondance cyclique permet de détecter 3 bits erronés et en corriger 1.
- g(x) = x16+ x15 + x12 + x10 + x4 + x3 + x2 + x + 1
- Initiallisation nulle
- Calcul sur 65 octets : 64 de donnée + 8 bits directeurs.
- La distance minimum du code est d_min=4 (à démontrer).
- Le code peut donc détecter 3 erreurs = d_min - 1
- et corriger une erreur (d_min-1)/2
Structure du superbloc GFP-T :
1 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | Octet 1,1
2 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | Octet 1,2
3 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | .........
4 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | ==> Octet 8,7
5 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | Octet 8,8
6 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | F1.....F8
7 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | C1.....C8
8 | F | byte1 | byte2 | byte3 | byte4 | byte5 | byte6 | byte7 | byte8 | C9....C16
La dernier étape consiste à insérer les superblocs dans la trame GFP-F.
- La trame GFP-F sert de support aux superblocs,
- des valeurs spécifiques PTI et UPI sont définis en fonction de la source.
- La valeur PLI est constante (voir calcul ci-dessous).
Exemple d'une trame GFP-F encapsulant des super blocs.
| PLI | cHEC | PTI | tHEC | EXI | eHEC | N superblocs GFP-T | FCS |
| 16b | 16b | 16b | 16b | 16b | 16b | (N*67 octets) | 32b |
Gestion de flux et applications.
Le conduit (SDH ou SONET) permettant de transporter les trames GFP dispose d'une capacité légèrement supérieure au débit de la source (débit entrant).
Le buffer GFP-T se retrouvera donc régulièrement vide ; un caractère de controle spécial est définit : 65B_PAD (padding, bourrage). Ce code de controle
permet de maintenir le débit des super blocs constant en absence de données client, le code de contrôle de bourrage 65B_PAD est insérer, puis enlever dans le demapper.
Table des codes de controle :
Nom | Val | Code 10BRD- | Code 10BRD+ | Code 65B | description |
/K28.0/ | 1C | 0011110100 | 1100001011 | 0000 | -- |
/K28.1/ | 3C | 0011111001 | 1100000110 | 0001 | -- |
/K28.2/ | 5C | 0011110101 | 1100001010 | 0010 | -- |
/K28.3/ | 7C | 0011110011 | 1100001100 | 0011 | -- |
/K28.4/ | 9C | 0011110010 | 1100001101 | 0100 | -- |
/K28.5/ | BC | 0011111010 | 1100000101 | 0101 | /C/ link configuration |
/K28.6/ | DC | 0011110110 | 1100001001 | 0110 | -- |
/K28.7/ | FC | 0011111000 | 1100000111 | 0111 | -- |
/K23.7/ | F7 | 1110101000 | 0001010111 | 1000 | /R/ carrier extended |
/K27.7/ | FB | 1101101000 | 0010010111 | 1001 | /S/ start of packet |
/K29.7/ | FD | 1011101000 | 0100010111 | 1010 | /T/ end of packet |
/K30.7/ | FE | 0111101000 | 1000010111 | 1011 | /V/ error propagation |
10B_ERR | 01 | URD- | URD+ | 1100 | disparity error |
65B_PAD | 02 | N/A | N/A | 1101 | bourrage/padding |
Spare | 03 | N/A | N/A | 1110 | -- |
Spare | 04 | N/A | N/A | 1111 | -- |
Lorsque le décodeur 8B/10B ethernet analyse un code non valide, la donnée est substituée par un code de contrôle 0x01 qui est propagé par le transcodage 64B/65B, à la réception GFP-T, cette information de contrôle est codée par un caractère 8B/10B non valide.
Les codes d'erreurs /K30.7/ correspondent quant à eux à des erreurs amonts du réseau.
Exemple de superbloc GFP-T :
Octet | champ | Valeur | Remarque |
1 | Data | 0x80 | 1er octet du 1er superbloc |
2 | Data | 0x00 | 2er octet du 1er superbloc |
.. | ... | ... | ... |
63 | Data | 0x00 | octet 7 du 8ème superbloc |
64 | Data | 0x00 | octet 8 du 8ème superbloc |
65 | Flags | 0x00 | drapeau des 8 superbloc |
66 | CRC(15.8) | 0x9A | calcul du CRC-16 |
67 | CRC( 7.0) | 0xA2 | C(n,k)=GFP(536,520) |
Le code de protection d'erreurs utilisé est un code CRC C(536, 520) ; un traitement sur bus 32 bits peut être réalisé en effectuant le calcul sur les 64 octets de données sous leur forme 32 bits puis un calcul final sur les 8 bits directeurs donne la valeur de CRC.
Exemple de calcul CRC sur un bus de données de 32 bits :
Cpt_word | din_32b | crc32 | crc8 |
1 (init) | 80000000 | xxxx | xxxx |
2 | 00000000 | 367D | xxxx |
3 | 00000000 | 11E2 | xxxx |
... | ... | ... | ... |
16 | 00000000 | 68BE | xxxx |
1 | 80000000 | 3761 | xxxx |
2 | 00000000 | 367D | 9AA2 |
L'émission de trames Ethernet en mode GFP-T présente quelques curiosités. Le code /S/ qui précise la fin d'un paquet Ethernet est considéré comme code-D (et non un code-K) et substitue le premier octet de préambule. Lenght précise le nombre d'octet de data : champs client payload, d'une valeur minimale de 46 soit ici une charge utilisateur de 00 à 45. Il faut au minimum 10 séquences idle BC-50. La synchronisation Ethernet est réalisée par la présence du code de pause (comma code xBC) qui doit se trouver trois fois de suite dans le flux de réception en alternance avec un code de donnée : ce peut donc aussi bien être une séquence /I1 /I2 ou /C1/C2. Ces codes ainsi que les mécanismes de synchronisation sont normalisés dans IEEE 802.3 (§36.2.4.8 page 1204/1538)
SFD : Start Frame Delimiter
DA : Destination Adress
SA : Source Adresse
FCS : Field Check Sequence
g(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
g(x) = 100000100110000010001110110110111 = 104C11DB7
Détection & correction d'erreurs.
Le désembrouilleur de la trame GFP est de type auto synchronisé,
(ATM transmission convergence layer, auto synchronous scrambler), une erreur qui se présente à l'entrée du désembrouilleur se trouve en sortie sur le signal désembrouillé mais aussi sur l'entrée de la LFSR d'ordre 43. Il en résulte que 43 bits plus loin l'erreur d'origine est dupliquée.
En mode ATM ou GFP, pendant l'en-tête l'embrouilleur est désactivé, la détection et correction d'erreur est effectuée avant désembrouillage, la fonction d'embrouillage n'a donc pas d'incidence sur le CRC. Dans le cas GFP-T ou des cellules OAM de l'ATM, l'analyse et donc la correction des erreurs est réalisée après le désembrouilleur. Ce dernier étant de type autosynchronisé, il en résulte :
Si une erreur intervient avant embrouillage, elle sera dupliquée dans l'embrouilleur mais lors du désembrouillage, seule l'erreur d'origine sera conservée, la seconde étant à nouveau modifiée, nous nous retrouverons avec une erreur simple et le décodeur pourra la corriger facilement.
Si une erreur est introduite entre les données embrouillées et celles désembrouillées, donc sur la ligne de transmission, elle sera vue dupliquée 43 bits plus loin lors du décodage : l'erreur simple à l'origine devient une erreur double. (cas classique)
Sinon, si l'erreur est introduite après désembrouillage, une erreur simple sera propagée à l'entrée du bloc de correction d'erreurs. (cas très rare à priori impossible)
Résumons nous : une erreur sur la ligne de transmission propagera une erreur double, cela correspond au cas le plus probable en pratique :
Il faut donc pouvoir analyser et corriger les erreurs doubles espacées de 43 bits.
Plus de détails dans le document
Codes CRC, Performance d'un CRC et interaction avec un embrouilleur.
En cas d'erreur CRC multiples, donc non corrigibles, tous les caractères du super bloc sont remplacés par le code d'erreur 8B (10B_ERR).
Perte de signal client (FCS) et répercution.
Insertion d'une charge ethernet dans la trame GFP : en mode normal les données sont lues dans la fifo et insérées dans les super bloc, en absence de données client, le code de control pading (65B_PAD) est émit. Si le signal client passe en erreur (Loss of client signal/Client signal fail), les superblocs contiennent des données aléatoires qui n'ont pas de signification, le mapper GFP-F substitue le flux de super bloc GFP-T par des trames idle spécifiques qui permettent de propager le signal d'erreur.
FCS -------------------------------------+
|
v
Ethernet idle_frame -->+---+ +--------+
+-----------+ |Mux|--->|VCG |----> SDH
FIFO --->|Super bloc |-----> GFP-F -->+---+ |SDH core| Tx
| GFP-T | mapper +--------+
+-----------+
G806 §8.5.4.2.1 :
Lorsque aCSF_LOS ou aCSF_LCS sont actifs, les trames de gestion client de procédure GFP sont insérées à la place des trames de données client de procédure GFP. Le champ PTI de l'en-tête de type de procédure GFP des trames de gestion client de procédure GFP est mis à "100". L'UPI est mis à "0000 0001" lorsque aCSF_LOS est actif, et il est mis à "0000 0010" lorsque aCSF_LCS est actif. Ces trames de gestion client de procédure GFP n'ont pas de champ d'information de charge utile. Elles sont générées comme défini au § 6.3.3/G.7041/Y.1303.
Intellectual property
Xelic
Biof
Xilinx
Nuvation
Glossaire & liens.
SAN : Storage Area Network
GFP : Generic Framing Procedure
PLI : Payload Length Indicator
PTI : Payload Type Identifier
HEC : Header Error Check
CSF : Client Signal Fail
FC : Fiber Channel
GbE : Giga bit Ethernet
VoD : video on Demand
DVB : Digital Video Broadcasting
GFP-F GFP Framed
GFP-F is normally used to encapsulate packet/frame-based protocols
such as IP/PPP or Ethernet/MAC. The frame is entirely assembled before
transmission through the SONET/SDH network.
GFP-T GFP Transparent
GFP-T offers direct transmission of data streams requiring low-latency,
such as VoIP, digital video (e.g., DVB-ASI) and SAN (e.g., Fibre Channel)
applications. GFP-T is optimized for protocols using 8B/10B encoding.
Steve Gorshe PMC-Sierra
Core IP Xilinx GFP
Xilinx application note
Application dérivée.
GFP Lucent presentation.