Comment fonctionne Tally

Tally est un réseau ouvert qui recueille les messages radio émis par les aéronefs, captés par des récepteurs chez des particuliers, et en tire des positions que chacun peut utiliser. Cette page explique toute la conception sans aucun prérequis.

Trois mots

  • Feeder : un récepteur qui transmet ce qu’il capte. C’est un récepteur radio installé chez quelqu’un et un petit programme qui marque chaque message de l’heure exacte de son arrivée, le signe et le transmet.
  • Relais : le programme qui recueille ce qu’envoient les feeders, calcule des positions et les partage avec les autres relais. Toutes les tâches du réseau reviennent à un relais, et chacun peut en faire tourner un.
  • Client : tout ce qui lit les données de Tally, par exemple un site web, une application ou une carte. Un client ne partage jamais. Son accès est soit le petit palier gratuit, soit le crédit du relais auquel il est rattaché : une entreprise qui veut le flux complet fait tourner un relais, et ses clients lisent sur le crédit de ce relais. Un client lit depuis un relais : le sien s’il veut le firehose (souvent la même entreprise exploite les deux), ou un relais public pour un usage modeste.

Les éléments

Les feeders envoient leurs messages aux relais. Les relais font tout le travail : ils recueillent, calculent des positions et se transmettent les données. Les clients lisent auprès des relais. Il n’y a ni serveur spécial ni opérateur central, car tous les relais sont le même programme.

FeedersRelaisClients
Les feeders envoient leurs messages aux relais, les relais partagent entre eux, et les clients lisent auprès des relais.

Où vont les données

Un feeder envoie ses données aux deux relais en bon état les plus proches, sur des réseaux différents, pour qu’une panne ou un relais malhonnête ne puisse pas le faire taire. Le plus proche se mesure au temps que met un message à revenir, ce que personne ne peut falsifier.

Les messages bruts restent près de chez eux : ils font au plus un saut, vers les relais qui couvrent la même zone, et ces relais calculent les positions de la zone. Seules les positions finies font le tour du monde, ce qui garde la bande passante de chacun faible.

Une zoneBrutPositionsFeedersRelaisRelaisLe monde
Dans une zone, chaque feeder envoie ses messages bruts à deux relais proches. Les positions qu’ils calculent quittent la zone pour le monde.

Les avions qui ne disent pas où ils sont

La plupart des aéronefs diffusent leur propre position GPS. Certains non, mais ils répondent quand même au radar par de courts pings. Quand plusieurs feeders captent le même ping, il arrive chez chacun à un instant légèrement différent, parce que chacun est à une distance différente. Chaque écart de temps place l’avion quelque part sur une courbe, et l’avion est là où les courbes se croisent. C’est la multilatération, MLAT en abrégé, et c’est le travail d’un relais.

Même écart de tempsPingFeeder
Un ping atteint quatre feeders à des instants légèrement différents. Chaque écart de temps entre deux feeders trace une courbe, et les courbes se croisent là où se trouve l’avion.

Il faut pour cela que les horloges des feeders concordent au millionième de seconde près, ce qui n’est pas le cas chez les particuliers. Les relais corrigent donc chaque horloge grâce aux avions qui diffusent leur GPS : leur position est connue, donc l’instant où leur message devrait arriver l’est aussi, et la différence est l’erreur de cette horloge.

Chaque réponse est accompagnée de marges d’erreur honnêtes : de combien elle peut se tromper, y compris l’incertitude que laissent les corrections d’horloge.

Les horloges sont corrigées ensemble, par groupes fixes appelés tuiles. Le monde est découpé selon une grille fixe de zones de quatre tailles, d’environ 50, 100, 200 et 400 km de côté, et chaque tuile réunit jusqu’à 48 feeders proches, choisis uniquement selon l’endroit où ils se trouvent. Chaque avion au-dessus d’une zone utilise la correction de sa tuile, si bien que le travail est fait une fois par zone, et non une fois par avion. Tous les relais calculent les mêmes tuiles, si bien que les résultats restent vérifiables.

TuileAvionAvion
Les feeders sont regroupés en tuiles fixes qui se chevauchent. Les deux avions au-dessus de la tuile mise en évidence utilisent son unique correction d’horloge.

Chaque relais calcule la même réponse, au bit près, à partir des mêmes données. Les réponses de relais différents se fusionnent donc sans conflit, et n’importe qui peut prouver qu’un relais se trompe s’il publie une mauvaise réponse.

Rapide et définitif

Vérifier correctement une position prend du temps, car un relais attend que les messages de tous les feeders soient arrivés. Chaque avion localisé par MLAT reçoit donc deux réponses. D’abord une réponse rapide, environ 1 à 2 secondes après le ping, calculée avec la dernière correction d’horloge prolongée et avec des marges d’erreur plus larges. Puis la position finale vérifiée, qui la remplace. Les clients choisissent de recevoir ou non les positions rapides.

La réponse rapide compte dans un cockpit : à 150 kt, environ 280 km/h, un avion parcourt un demi-mille en 12 secondes.

Deux produits

  • Régional : tout pour une zone, messages bruts compris. Pour les chercheurs, les applications locales et les relais qui couvrent la zone.
  • Monde : une position par avion et par seconde, partout. Pour les services de suivi des vols et les entreprises qui veulent la vue d’ensemble.

Un partage à la BitTorrent

Les données d’une zone atteignent d’abord quelques relais qui les veulent, et chacun les transmet à quelques autres. Les relais qui reçoivent les feeders d’une zone envoient un nombre fixe de deux ou trois copies, quelle que soit la popularité de la zone, si bien qu’une zone très demandée n’alourdit jamais leur facture.

Source
La source envoie trois copies, et chaque relais qui en reçoit une la transmet à deux autres.

Prendre une zone est un devoir : chaque flux est découpé en bandes, chaque relais qui prend la zone transmet sa propre part à quelques autres, et un relais qui ne transmet pas est retiré de la zone.

Les zones forment un arbre

Le monde est divisé en un arbre fixe de zones sur lequel tout le monde s’accorde : les petites zones sont dans des régions, les régions dans des pays, les pays dans des continents et les continents dans le monde. Personne ne l’attribue ; c’est la même grille fixe pour tous.

Un relais prend les zones qu’il veut, à n’importe quel niveau : un site régional prend sa région, une application nationale son pays, une entreprise mondiale le monde. Quel que soit le niveau qu’il prend, un relais partage à ce niveau, en transmettant les données de cette zone à ceux qui les veulent.

Le mondeContinentContinentPaysPaysPaysRégionRégionRégionRelaisClients
Les zones s’emboîtent dans des zones plus grandes. À chaque niveau, un relais réunit le niveau inférieur en un paquet et le fait remonter, et les clients lisent au niveau dont ils ont besoin.

Un relais qui a réuni toutes les zones sous une zone plus grande peut proposer cette dernière comme un seul paquet. Un relais mondial se connecte ainsi à une poignée de paquets de continents ou de pays, et non à chaque petite zone. Chaque niveau est proposé par plusieurs relais, si bien que la panne de l’un ne fait rien perdre.

Les données groupées gardent la signature de chaque relais d’origine, si bien qu’un paquet n’exige aucune confiance de plus : il est vérifié exactement comme le seraient ses zones.

Usage équitable

Un petit usage est gratuit : un client peut lire les positions d’une zone avec une simple connexion. Un usage à grande échelle, c’est-à-dire des données brutes ou des positions pour de grandes régions, se gagne par un relais qui contribue vraiment, en recevant des feeders ou en envoyant des données fraîches, et les clients rattachés à ce relais lisent sur son crédit. Un client ne partage jamais : qui veut le plus de données fait donc tourner un relais et ajoute de la capacité au réseau.

Chaque relais fonctionne avec un plafond obligatoire de débit montant, pour que sa facture ne puisse jamais dépasser ce que le plafond permet et qu’aucun opérateur n’ait de mauvaise surprise.

Ce que les feeders reçoivent en retour

Chaque feeder a une page de station publique qui montre sa disponibilité, ses débits de messages, les avions captés, sa portée, la couverture que lui seul apporte, sa contribution à la MLAT et sa place dans les classements.

Trouver une station

Tout est calculé à partir de données publiques et signées, pour que chacun puisse vérifier.

Confiance

  • Tout est signé. Chaque feeder a sa propre clé, et un relais ne peut ni modifier ni inventer les messages d’un feeder, seulement ne pas les transmettre.
  • Les réponses sont reproductibles. Quiconque a les mêmes données brutes peut recalculer une position et obtenir exactement le même résultat.
  • La triche se prouve. Deux réponses signées issues des mêmes entrées qui se contredisent prouvent une faute, et chacun peut cesser d’utiliser ce relais.
  • Les feeders gagnent en crédit. Un feeder dont les messages concordent toujours avec ceux des autres prend du poids avec le temps.