Le telecomunicazioni rappresentano per l'uomo un fascino a cui è
difficile resistere. Il mondo delle radiocomunicazioni è ancora più
affascinante: tutto funziona quasi magicamente senza alcun mezzo di trasmissione
visibile, o quantomeno percepibile.
È noto che oggi parte dello spettro elettromagnetico è riservato ai
cosiddetti radioamatori: hobbisti che sperimentano, costruiscono o, solo
semplicemente, usano la radio. Da loro non ci si poteva non aspettare qualche
contributo alla comunità Linux, così in questo articolo si scoprirà come un
radioamatore può utilizzare Linux dando anche uno sguardo generale a come
funzionano le reti wireless radioamatoriali e alla loro stratificazione di rete.
Si riterranno note le fondamenta del TCP/IP e della configurazione e
compilazione del kernel di Linux senza che però lo siano i meccanismi teorici
della stratificazione di rete in generale. Inoltre, si farà riferimento alla
serie 2.2 del kernel di Linux.
Due parole prima di iniziare a parlare più specificamente delle reti
senza filo. È opportuno che il lettore comprenda la necessità di un
"adattamento" tra i segnali nativi prodotti da un calcolatore e il canale radio.
Il calcolatore, come tutti sanno, è in grado di usare un alfabeto di due soli
caratteri: "0" e "1". Il segnale dati seriale sincrono è ottenuto ponendo in
corrispondenza degli stati "0" e "1" due valori di tensione differenti -V e +V.
Tali valori (scelti a seconda del caso e spesso pari a 0V per lo "0" e qualche
volt per lo stato "1") vengono tenuti costanti per tutto l?intervallo tra un
istante significativo e il successivo; tali istanti significativi sono definiti
da una base di tempi alla quale ci si riferisce per individuare l?inizio e la
fine degli stati logici.
|
|
Si definisce così il ritmo binario di emissione come il numero di cifre binarie emesse nell?unità di tempo (tipicamente bit/s). Leggermente diversa è la definizione del noto baud, ma concettualmente basta accontentarsi di quella più sconosciuta e semplice di ritmo binario.
Per questioni relative alla teoria dei segnali, a un segnale è associabile una banda oltre che la già vista caratterizzazione temporale. Questo è un concetto molto importante visto che per ogni segnale è univocamente definito il suo spettro. Lo spettro di un segnale è la sua caratterizzazione in frequenza che mostra quanto ogni frequenza contribuisca nella rappresentazione del segnale stesso. La banda è la larghezza dello spettro. È come se per ognuno di noi ci fosse una doppia caratterizzazione. Per esempio, una caratterizzazione potrebbe essere quella fotografica, l?altra quella radiografica: entrambe ci rappresentano univocamente ma descrivono aspetti differenti.
In generale si vede come la larghezza si banda sia direttamente proporzionale al ritmo binario: in termini più comuni, più si trasmette velocemente e più la banda richiesta è grande.
Vediamo un esempio:
Con l?ingegno si riesce poi a modificare lo spettro dei segnali in maniera reversibile: le modulazioni.
Alla fine abbiamo vinto noi: un segnale praticamente impossibile da trasmettere lo possiamo "modificare" con particolari tecniche per far sì che il suo spettro risulti "concentrato" il più possibile in una zona limitata di frequenze e quindi trasmissibile. Tali tecniche che vanno sotto il nome di compressione di banda, sostanzialmente sfruttano la ridondanza intrinsecamente presente in ogni sorgente di informazione eliminandola.
È ora chiara la necessità di elaborare il segnale prima di trasmetterlo, in
fondo praticamente tutti oggi lo facciamo, con tecniche abbastanza complesse,
con i nostri modem telefonici.
Per definire le funzioni di un sistema di comunicazione è molto elegante
"stratificarle", ovvero raggruppare funzioni simili in uno stesso "strato" e far
sì che ogni strato arricchisca le funzionalità di quello immediatamente
inferiore. Così facendo, è molto comodo lavorare pensando per "compartimenti
stagni": gli strati. In ognuno di questi strati si hanno dei servizi che lo
strato offre a quello sovrastante, soddisfacendone le necessità. Esempio
lampante: l?http è un protocollo di "alto strato" che si avvale dei servizi
offertigli da quelli inferiori: il TCP per esempio. A sua volta il TCP si avvale
dell?IP per svolgere i suoi compiti, e così via.
Come facciamo a trasmettere, o meglio, a trasferire le nostre informazioni? Le si trasmette in una modalità tipica delle reti per dati che è quella a pacchetto. I dati da trasferire (di qualunque natura essi siano) si segmentano in pacchetti di lunghezza più piccola dell?intero messaggio e si consegnano alla rete che provvederà alla loro consegna a destinazione. In generale, inoltre, ogni pacchetto può essere considerato indipendente dagli altri (trasferimento senza connessione).
Per questo è necessario un controllo sul flusso dei dati; bisogna, quindi, rispettare l?integrità dei dati: interessa che arrivino esatti, tutti, e nell?ordine di partenza. Questo si fa? attraverso diverse tecniche su cui non ci dilungheremo e che sostanzialmente adattano la velocità di trasmissione della sorgente a quella del mezzo e realizzano una vera e propria di numerazione dei pacchetti: è possibile così scoprire se qualcosa manca e selettivamente richiederne la ritrasmissione.
Si parla, quindi, di Packet-Radio ovvero dell?uso del modo di trasferimento a pacchetto in ambito radio. Intuitivamente molti hanno avuto l?esperienza del Walkie-Talkie: anche l?uomo con un mezzo di tipo parla/ascolta (non come il telefono dove è possibile fare le due cose in contemporanea) segmenta l?informazione da trasmettere in pacchetti e aspetta il riscontro dell?altro. È esattamente l?approccio che abbiamo appena spiegato.
Risulta inoltre più comprensibile il meccanismo della stratificazione se
pensiamo alla struttura generale di un pacchetto. Esso è composto da una
intestazione e da un carico da trasportare. Nell?intestazione troviamo tutte le
informazioni necessarie al protocollo che stiamo considerando per svolgere i
suoi servizi (per esempio la numerazione, le somme di controllo), nel carico ciò
che il protocollo trasporta. Nel carico si può quindi trovare un intero
pacchetto di un protocollo di strato più alto considerandolo tutto come carico
da trasportare. All?arrivo il protocollo trasportante consegnerà allo strato
superiore il carico (o payload) che lo considererà a sua volta come pacchetto,
ne elaborerà quindi l?intestazione e consegnerà allo strato superiore il
payload. Questo processo termina quando, chiaramente, si raggiunge il servizio
destinatario dell?informazione trasmessa. È un po? come considerare una scatola
dentro l?altra.
È giunto il momento di collegare la radio al computer. Facciamo il punto
della situazione. Per un radioamatore non è difficile costruire/reperire
ricetrasmittenti con una larghezza di banda di alcune centinaia di kHz modulate
in frequenza (o in fase? ma questo è più difficile da spiegare anche se è
praticamente la stessa cosa J ). Significa che
abbiamo tra le mani un apparecchio che associa a ogni cifra binaria una
frequenza di trasmissione diversa e riesce a farlo solo per una velocità non
superiore a una quantità legata alla sua larghezza di banda. Questa operazione
la esegue anche al contrario trasformando in un segnale elettrico il segnale
radio che riceve.
Non è poi difficile costruire codificatori (compressori di banda) che "prendano in mano" il segnale binario emesso dal calcolatore per far sì che sia "digeribile" dalla larghezza di banda del ricetrasmettitore. Ci si avvale generalmente della codifica "Manchester" (o codifica ritorno a zero binario) che opera in modo che la larghezza di banda alla sua uscita sia comparabile col ritmo di emissione della sorgente inteso come inverso della durata di un bit (è ben diverso dalla banda infinita che avevamo prima della codifica).
Sostanzialmente, inoltre, la codifica Manchester elimina la componente continua dal segnale dati (come si potrebbe pensare di trasmettere una cosa che non cambia mai: è nota a priori) che è la media dei valori che assume il nostro segnale, e "aggiunge" al flusso semplice di dati l?informazione importantissima della sincronizzazione: la base dei tempi. Così abbiamo un segnale che contiene in sé la sincronia e il cui spettro è stato concentrato in una banda maneggiabile.
Chiaramente in ricezione è possibile decodificare il segnale che si riceve in modo da ottenerne una versione che sicuramente sarà diversa da quella trasmessa (ci sono disturbi e non idealità di ogni parte del processo di trasmissione del segnale) ma gli assomiglia davvero molto, abbastanza da permetterne l?utilizzo (a patto di aver dimensionato bene il collegamento).
Sia per i ricetrasmettitori che per i codificatori, una fonte insostituibile è costituita dai progetti dell?ingegnere sloveno Matjaz Vidmar che ha progettato anche router specializzati per la dorsale di rete di cui si parlerà tra breve.
Il vero problema è ora collegare il computer al codificatore. Con la seriale non andremmo oltre il centinaio di kbit/s e, sebbene ciò sarebbe più che sufficiente dato che in Italia per vari vincoli si utilizzano velocità in genere non superiori ai 64kbit/s, non si può non lasciarsi attirare da migliori prospettive.
Come vedremo fra un attimo non abbiamo bisogno di una interfaccia "intelligente" che gestisca anche solo una parte della pila protocollare: pensa a tutto il kernel di Linux. Basta una interfaccia più veloce. Di scelta ce n?è molta ma quella parsa più interessante (anche economicamente J ) è la Ottawa PI2-Card.
La Ottawa Packet-Interface 2 è una interfaccia sincrona per packet-radio ad alta velocità su bus ISA supportata direttamente dal kernel di Linux come interfaccia di rete. Progettata dal Packet Working Group of the Ottawa Amateur Radio Club Inc., ha due porte così che si possano avere due radio collegate per interfaccia. È stata progettata per lavorare a velocità fino ad almeno 400kilobit/s circa, quindi adatta al genere di ricetrasmettitori descritti prima. Per far sì che le temporizzazioni siano sempre affidabili e per diminuire il carico da interrupt ha un timer indipendente dalla CPU del calcolatore e la porta ad alta velocità lavora in DMA. Questa è la prima differenza rispetto al caso delle porte seriali completamente gestite con gli interrupt.
Lo schema completo è:
Il protocollo scelto dalla comunità radioamatoriale per il suo
Packet-Radio è l?AX.25. È stato derivato dal X.25, famosissimo in praticamente
tutte le reti a pacchetto (qualcuno ricorda ITAPAC?). L?AX.25 (Amateur X.25) ne
ha mutuato le caratteristiche peculiari a cui sono state aggiunte funzionalità
tipiche per una rete radioamatoriale. Può essere usato sia come protocollo per
collegamenti punto-punto (rappresenterebbe un protocollo di strato alto) sia per
trasportare a sua volta un altro protocollo (l?AX.25 diventa così di strato
basso). Altri protocolli si sono aggiunti (sovrapposti) all?AX.25 per
completarlo: il NetRom e il Rose. Qui non ne daremo che un accenno visto che in
Italia il loro uso come protocolli di strato basso è pressoché nullo.
Chiaramente la pila protocollare della suite del TCP/IP fa parte dei protocolli
trasportabili dall?AX.25 ma sebbene sia comunque non molto diffuso in Italia,
l?interconnessione di Linux-Boxes potrebbe farlo diventare la grande star.
Un particolare importante va riportato. Ogni radioamatore ha assegnato dall?autorità per le comunicazioni per proprio paese (in Italia dal Ministero delle Comunicazioni) un nominativo univoco formato da due parti: una geografica e una "progressiva" che è composta da lettere. Questo nominativo nelle interfacce di rete viene utilizzato come indirizzo fisico (come lo è il MAC address dell?ethernet) dell?interfaccia e, visto che un radioamatore può poter configurare più interfacce di rete, si aggiunge un numero che le distingue.
Vediamo cosa significa questo sul mio nominativo: iW6OWQ. La ?i? sta per Italia, il ?W? per il tipo di patente, il ?6? indica la prima cifra del C.A.P. di residenza (io sono abruzzese, Marche e Abruzzo hanno il C.A.P. iniziante per 6), ?OWQ? è la parte progressiva.
Due interfacce di rete sul mio PC potrebbero quindi essere per esempio:
IW6OWQ-2 e IW6OWQ-4.
Vediamo come è sistemato il supporto ai protocolli di cui abbiamo parlato
finora nel kernel di Linux.
La stratificazione dei protocolli è riportata nella figura 5.
L?organizzazione del supporto di rete di Linux è molto interessante in quanto
l?astrazione sull?hardware è tale da permettere di utilizzare qualunque
dispositivo supportato come interfaccia di rete per farne una. Potremo vedere,
quindi, i nostri calcolatori collegati via radio come se lo fossero tramite la
classica rete ethernet. Siamo di fronte a una flessibilità di utilizzo
impensabile rispetto al vecchio MS-DOS o a Windows.
Per il kernel non ci sono problemi, tutto è già lì. Nella configurazione,
oltre al Networking Support e al supporto per TCP/IP bisogna attivare Amateur
Radio Support. In questa categoria bisogna selezionare il supporto per l?AX.25
Level 2 e nella sezione dei devices attivare il driver per High Speed (DMA) SCC
driver for AX.25. È più difficoltoso che altro compilare tali caratteristiche
come moduli: si complica la configurazione senza ottenere benefici particolari.
Così facendo il driver per la PI-2 Card crea dei devices (esattamente come
per l?ethernet eth0 eth1 ecc.) chiamati pi[0-9][ab], dove il numero rappresenta
l?ordine con cui vengono rilevate le schede (qualora ce ne fosse più d?una) e
"a" e "b" identificano rispettivamente la porta ad alta velocità e quella a
bassa.
I tools per la configurazione di rete sono parte standard di tutte le
distribuzioni attuali, anche per questi non ci sono grossi problemi.
Ci sono, inoltre, utilità apposite per la gestione dell?AX.25: la libreria per AX.25 a supporto di molteplici utilità. In questo articolo non se ne parlerà visto che ci offrono servizi di cui non si è discusso. Gli interessati troveranno utile approfondire l?argomento studiando la documentazione acclusa con la libreria e le utility (ftp://zone.pspt.fi).
La configurazione base di una porta AX.25
La configurazione non è molto diversa da una normale interfaccia di rete. Basterà, per configurare la porta "a" della PI-2 Card, dare il comando:
# ifconfig pi0a hw ax25 IW6OWQ-3 up
Questo comando assegna il nominativo IW6OWQ-3 alla porta ad alta velocità alla prima PI-2 Card rilevata e la rende attiva. Lanciando il comando ifconfig da solo vedremo come la PI-2 Card viene trattata come una scheda di rete.
Il passo successivo è quello di far trasportare il TCP/IP dall?interfaccia in AX.25 appena attivata. Anche qui, nulla di più semplice:
# ifconfig pi0a 44.134.48.74 netmask 255.255.255.0 broadcast 44.134.48.255
# route add -net 44.0.0.0 pi0a netmask 255.0.0.0
# route add default pi0a
Il primo commando assegna alla porta appena configurata l?indirizzo IP mostrato (che è quello assegnato a me), con le usuali net-mask e broadcast address per una rete IP di classe C. Il secondo aggiorna la tabella di routing del kernel per far sì che ogni indirizzo della sottorete 44.0.0.0 sia instradata all?interfaccia radio. Ciò potrebbe essere un problema in quanto molti di questi indirizzi (tutti quelli che non sono nella nostra portata radio) non sono raggiungibili direttamente, sarà premura dell?amministratore fare una tabella routing apposita. Sarebbe anche possibile "parzializzare" il routing tra TCP/IP e AX.25 in modo da sfruttare eventuali ripetitori digitali presenti nella zona che non supportano il TCP/IP nativamente. Il terzo è addirittura più drastico del secondo: l?instradamento di default è verso l?interfaccia radio. È ovvio che questi particolari nella configurazione dipendono da stazione a stazione.
A questo punto si può provare con un classico ping se tutto funziona, o con un più attraente ssh o telnet o, perché no, con il netscape.
A questo punto è tutto come se ci fosse una rete cablata classica.
La realizzazione di una stazione radioamatoriale che dia servizi alla
comunità locale, è leggermente diversa da quella spiegata visto che sarebbe
auspicabile la presenza di porte di accesso a bassa velocità, in modo da rendere
collegabile la stazione ai radioamatori che non sono in possesso delle
attrezzature per l?alta velocità. Linux supporta benissimo, al proposito,
direttamente le ricetrasmittenti per le basse velocità (le normali
ricetrasmittenti per le comunicazioni voce) sfruttando le possibilità delle
schede audio. Fino a 9600bit/s non è necessario hardware aggiuntivo tranne che
per un circuitino per la commutazione trasmissione/ricezione (nella
documentazione del kernel si possono trovare puntatori sul web e informazioni
più approfondite)
Per questo tipo di stazioni solo la parte collegata alla dorsale ad alta velocità presenta problemi di reperibilità delle attrezzature. Per le schede Ottawa PI-2 Card, ci si può rivolgere solo a chi le ha costruite e farsele spedire. Il loro costo si aggira intorno alle 300.000 lire I.V.A. e sdoganamento inclusi. Le ricetrasmittenti a larga banda si possono trovare negli Stati Uniti o costruirsele (vedi bibliografia) i costi sono abbastanza sotto le 500.000 lire per una ricetrasmittente operante sulla banda dei 23cm (è addirittura inferiore al costo di una buona radio commerciale solo per comunicazioni vocali). Le antenne possono essere quasi sempre autocostruite e, per la banda dei 23cm (1.2GHz), si adattano facilmente parabole per la ricezione televisiva da satellite.
Come si vede, sebbene non siano comparabili ai ponti radio numerici
commerciali, i sistemi radioamatoriali basati su Linux possono arrivare a
gestire bande dell?ordine dei 2-300'000bit/s con costi intorno al milione
coprendo distanze ragguardevoli per un collegamento digitale (un centinaio di
kilometri).
Per risorse sul racket radio ad alta velocità e per la Ottawa PI-2 Card:
http://hydra.carleton.ca/.
Per i progetti di Matjaz Vidmar: http://www.hamradio.si/.
Per la configurazione di Linux per l?uso radioamatoriale: Linux AX25-HOWTO, Amateur Radio di Terry Dawson (VK2KTJ): http://www.linuxdoc.org/ e http://zone.pspt.fi/.
Per chi volesse approfondire i temi accennati nei primi paragrafi può contattarmi in modo che possa suggerire qualche testo.