Un Terminal Node Controller (TNC) est un appareil utilisé par les radioamateurs pour se connecter à des réseaux packet radio AX.25. Cet appareil reprend les fonctions des assembleurs/désassembleurs de paquets (PAD) des réseaux X.25, et leur ajoute un modem chargé de la conversion entre signaux numériques et signaux audio.
Le premier TNC a été développé par Doug Lockhart, VE7APU, de Vancouver, et diffusé via le groupe Tucson Amateur Packet Radio et les modèles TNC-1 et TNC-2.
Un TNC est généralement composé d'un microprocesseur, d'un modem et d'un logiciel stocké dans une EPROM. Ce dernier implémente le protocole AX.25 et fournit une interface de type ligne de commande à l'utilisateur. Fréquemment, il fournit également d'autres fonctionnalités, notamment la capacité à recevoir des messages lorsque l'opérateur est absent. Le TNC contient donc toute la logique nécessaire à la communication sur un réseau AX.25 : il n'y a pas besoin d'un ordinateur externe, l'accès au réseau peut se faire via un simple terminal.
Le TNC assure la connexion entre ce terminal et un émetteur-récepteur. Les données issues du terminal sont organisées en paquets AX.25 et modulées en signaux audio pour être transmises par radio. Réciproquement, les signaux reçus sont démodulés, les données extraites des paquets, et les résultats sont affichés sur le terminal. De plus le TNC gère le canal radio selon les spécifications du protocole AX.25.
À titre d'exemple d'application commerciale, on peut en retenir une, non pas pour ses qualités intrinsèques, mais comme base d'un standard de fait et décrivant trois couches de traitement de l'information, chacune d'elles reposant sur un standard ouvert. Les appareils de poche (Kenwood), série TH-D7, rassemblent :
un émetteur/récepteur VHF et UHF classique, en FM ;
un TNC qui représente la couche AX.25 ;
une balise APRS et une interface de communication RS-232.
Les TNC étaient nécessaires à une époque où les ordinateurs personnels n'étaient pas suffisamment puissants pour à la fois gérer une connexion réseau et dialoguer avec l'utilisateur.