[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Nel capitolo 126 si è già accennato ai dispositivi seriali e al loro ruolo nella comunicazione con l'esterno. In questo capitolo si vuole mostrare in che modo possa essere realizzata una semplice connessione tra due elaboratori attraverso le porte seriali, così come si potrebbe attraverso una connessione PLIP tra porte parallele, fino a vedere cosa cambia quando si vuole ottenere la stessa cosa con una linea dedicata utilizzando una coppia di modem.
Volendo fare degli esperimenti utilizzando un solo elaboratore, sfruttando due porte seriali ed eventualmente due modem, si può fare lo stesso, ma solo a titolo di studio, dal momento che altrimenti non avrebbe senso. |
Per connettere due porte seriali di due elaboratori (cioè due unità DTE), occorre realizzare un cavo apposito, detto Null-modem. Se ne possono usare due tipi: a tre o a sette fili. Il primo permette solo una connessione con controllo di flusso software, detto anche XON/XOFF, mentre il secondo consente un controllo di flusso hardware, o RTS/CTS. La sezione 126.4 ne mostra lo schema di collegamento.
Dopo aver realizzato il cavo seriale, è sufficiente anche quello a soli tre fili, si può controllare il suo funzionamento collegando con questo due elaboratori. Su entrambi verrà utilizzato un programma di comunicazione per tentare una trasmissione elementare.
Prima di utilizzare i programmi di comunicazione, occorre accertarsi di disporre dei file di dispositivo corretti, /dev/ttySn
, ed eventualmente di un collegamento simbolico denominato /dev/modem
che punti al dispositivo corrispondente alla porta seriale utilizzata per la connessione.(1)
Supponendo di utilizzare la seconda porta seriale, si potrà creare il collegamento nel modo seguente:
#
ln -s -i /dev/ttyS1 /dev/modem
(2)
Una volta sistemati i collegamenti simbolici in entrambi gli elaboratori, è il momento di avviare un programma di terminale di comunicazione. Il programma di comunicazione più comune nelle distribuzioni GNU è Minicom, che verrà mostrato negli esempi seguenti. Se non si vuole intervenire sui permessi del file di dispositivo di comunicazione, occorre agire come utente root. Per questo motivo è importante fare attenzione a non salvare alcuna configurazione di Minicom, perché questa diventerebbe quella predefinita per tutti gli utenti.
Si avvia Minicom (l'eseguibile minicom) su entrambi gli elaboratori.
#
minicom
[Invio]
Welcome to minicom 1.75 Press CTRL-A Z for help on special keys |
Attraverso i due programmi occorre configurare entrambe le porte seriali nello stesso modo. In particolare, se si utilizza un cavo seriale a tre fili, si deve specificare che la comunicazione avviene attraverso un controllo di flusso software.
[Ctrl+a][z]
Con questa combinazione si ottiene il menù di Minicom.
|
È necessario configurare la porta seriale, per quanto riguarda la velocità di comunicazione, la parità, la dimensione del data bit e il tipo di controllo di flusso.
[o]
Si presenta un menù di diverse scelte possibili.
|
Si deve selezionare la voce {Serial port setup
}, spostando il cursore con i tasti freccia e premendo [Invio] alla fine.
|
Si seleziona la voce E per modificare la velocità di comunicazione.
[e]
|
È il caso di utilizzare sempre blocchetti di 8 bit dati senza parità, con un bit di stop, corrispondente alla sigla convenzionale 8N1. La velocità può essere spinta al massimo.
[h]
Current: 115200 8N1 |
Al termine si conferma con la semplice pressione del tasto [Invio].
[Invio]
|
Si passa quindi a configurare il controllo di flusso. Si suppone di dovere utilizzare il controllo di flusso software perché si dispone di un cavo seriale a soli tre fili. In caso contrario si può utilizzare la configurazione opposta.
[f]
F - Hardware Flow Control : No G - Software Flow Control : No |
[g]
F - Hardware Flow Control : No G - Software Flow Control : Yes |
Si esce da questo menù con la semplice pressione del tasto [Invio].
[Invio]
Quindi si esce dal menù precedente selezionando la voce Exit.
|
Da questo momento, tutto quello che si digita da una parte deve apparire sullo schermo dell'altra. Questo serve a provare che la connessione è corretta.
Per terminare la connessione si può utilizzare semplicemente il comando seguente, da entrambe le parti.
[Ctrl+a][q]
Quando si è certi che il cavo seriale è funzionante, si può passare alla realizzazione di una connessione punto-punto con l'aiuto di pppd.
La connessione PPP si presta a tanti tipi di situazione. Qui si intende mostrare il caso più semplice, in cui si utilizza solo una connessione seriale senza modem e nessuna delle due parti richiede all'altra di identificarsi.
Per poter comprendere gli esempi che vengono mostrati nelle sezioni seguenti, è necessario leggere il capitolo 127, tenendo presente che il kernel deve essere stato predisposto per il PPP. |
Si considera che gli script |
La cosa più semplice è la realizzazione di uno script su entrambi gli elaboratori da collegare, con l'indicazione invertita degli indirizzi IP da utilizzare. In particolare, con questo esempio, non si fa affidamento sulla configurazione generale del file /etc/ppp/options
, che si suppone assente, oppure vuoto.
Si suppone di disporre dell'indirizzo 192.168.100.1 per l'elaboratore A e 192.168.200.1 per l'elaboratore B. Si vuole utilizzare un controllo di flusso software perché si dispone di un cavo seriale a tre fili. Entrambi gli elaboratori utilizzano la seconda porta seriale.
#! /bin/sh # Elaboratore A IP_REMOTO="192.168.200.1" IP_LOCALE="192.168.100.1" PERIFERICA="/dev/ttyS1" VELOCITA="115200" C_FLUSSO="nocrtscts" /usr/sbin/pppd \ mru 576 \ mtu 576 \ lock \ passive \ local \ $C_FLUSSO \ $IP_LOCALE:$IP_REMOTO \ $PERIFERICA \ $VELOCITA \ noauth \ refuse-chap \ refuse-pap \ persist |
Nello script dell'elaboratore B, basta scambiare gli indirizzi.
#! /bin/sh # Elaboratore B IP_REMOTO="192.168.100.1" IP_LOCALE="192.168.200.1" ... |
Una volta avviati i due script, ognuno nel proprio elaboratore, quando la connessione si instaura si può controllare con ifconfig e route che tutto sia in ordine.
L'esecuzione dei due script porta alla definizione di una nuova interfaccia di rete, ppp0, con l'aggiunta di una nuova voce nella tabella di instradamento.
A#
ifconfig
[Invio]
... ppp0 Link encap:Point-to-Point Protocol inet addr:192.168.100.1 P-t-P:192.168.200.1 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:576 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 TX packets:10 errors:0 dropped:0 overruns:0 |
B#
ifconfig
[Invio]
... ppp0 Link encap:Point-to-Point Protocol inet addr:192.168.200.1 P-t-P:192.168.100.1 Mask:255.255.255.0 UP POINTOPOINT RUNNING MTU:576 Metric:1 RX packets:5 errors:0 dropped:0 overruns:0 TX packets:10 errors:0 dropped:0 overruns:0 |
A#
route -n
[Invio]
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.200.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 4 lo |
B#
route -n
[Invio]
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.100.1 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 4 lo |
Se non ci sono altri instradamenti che creano conflitti, anche ping dovrebbe funzionare.
Una volta verificato che la connessione funziona, si può provare ad aumentare il valore di MTU e MRU,(3) eventualmente si può fare anche in modo che il collegamento diventi il nuovo instradamento predefinito.
... /usr/sbin/pppd \ mru 1500 \ mtu 1500 \ lock \ passive \ local \ $C_FLUSSO \ $IP_LOCALE:$IP_REMOTO \ $PERIFERICA \ $VELOCITA \ noauth \ refuse-chap \ refuse-pap \ defaultroute \ persist |
Se si vuole utilizzare il controllo di flusso hardware, basta cambiare il valore della variabile $C_FLUSSO, indicando l'opzione crtscts.
... C_FLUSSO="crtscts" /usr/sbin/pppd \ ... |
Infine, si può fare in modo che ognuna delle due parti lasci che l'altra definisca il proprio indirizzo IP. Per ottenere questo è sufficiente indicare l'indirizzo relativo come 0.0.0.0.
... # Elaboratore A IP_REMOTO="0.0.0.0" IP_LOCALE="192.168.100.1" ... |
... # Elaboratore B IP_REMOTO="0.0.0.0" IP_LOCALE="192.168.200.1" ... |
Una linea dedicata, o leased line, è generalmente un cavetto a due fili indipendente dalla rete telefonica commutata. Il termine leased line, linea affittata, deriva dal fatto che in origine le leggi della maggior parte dei paesi impediva l'utilizzo di una rete di cavi per comunicazione privati, per cui questi si potevano solo affittare.
Per quanto ci riguarda, nelle sezioni seguenti, la linea dedicata è un doppino telefonico che collega due modem, ognuno connesso al proprio elaboratore.
Per fare sì che una linea dedicata di questo tipo funzioni, occorre disporre di modem esterni adatti a questo, in grado di essere configurati (anche attraverso microinterruttori) in modo da essere autonomi. In pratica, questi modem devono essere capaci di ricaricare la configurazione e rimettersi automaticamente in comunicazione, senza interventi software, sia in presenza di interruzioni temporanee della linea, sia quando si interrompe e poi riprende l'erogazione dell'energia elettrica.
Nelle sezioni seguenti si mostrano alcuni esempi che possono essere provati anche senza disporre di modem particolari, allo scopo di comprendere il problema.
Quando si utilizzano i modem in questo modo, senza accedere alla rete telefonica normale, non è più necessario comporre un numero telefonico e non esiste più il segnale di libero o di occupato.
Uno dei due modem deve essere configurato in modo da ricevere una chiamata su linea dedicata; l'altro deve essere configurato per chiamare. Giusto per ricordarlo, servono i comandi AT seguenti:
AT&L1 | è il codice necessario a informare il modem che si tratta di una connessione autonoma su linea dedicata; alcuni modem potrebbero richiedere un numero diverso, come L2 per esempio; |
ATX1 | è il codice necessario a fare ignorare al modem chiamante il tono di chiamata e il segnale di occupato; |
ATA | è il codice necessario ad attivare il modem in ricezione; ciò comporta l'emissione da parte di quel modem della portante di ricezione; |
ATD | è il codice necessario ad attivare il modem in chiamata; ciò comporta l'emissione da parte di quel modem della portante di chiamata. |
In pratica, a parte le possibili esigenze particolari di un modem rispetto a un altro, il comando da dare per mettere un modem in ascolto potrebbe essere AT&L1A, mentre, per mettere l'altro modem in chiamata, si potrebbe usare il comando ATX1&L1D.
Ci sono poi altre considerazioni da fare sui modem, ma per questo è meglio leggere il Leased line mini HOWTO di Rob van der Putten.
Quando i due modem hanno stabilito la comunicazione, tutto funziona come se le porte seriali rispettive fossero connesse attraverso un cavo seriale Null-modem; cosa già descritta nella prima parte di questo capitolo.
Con l'aiuto di Minicom si possono inviare i comandi necessari ai due modem, in modo da poter sperimentare l'uso della linea dedicata, anche se non si dispone di modem sofisticati con tutte le caratteristiche necessarie.
Si avvia Minicom in entrambi gli elaboratori, come già visto in precedenza per la connessione seriale pura e semplice. Si configura la comunicazione se ciò è necessario, tenendo presente che utilizzando il modem è meglio che il controllo di flusso sia di tipo hardware. Quindi, da una parte si digita il comando necessario ad attivare la ricezione, dall'alto il comando per iniziare la chiamata.
AT&L1A
[Invio]
ATX1&L1D
[Invio]
Se tutto va bene, i due modem iniziano la negoziazione e si stabilisce la connessione. Su entrambi i programmi Minicom dovrebbe apparire la risposta CONNECT seguita dalla velocità. A questo punto, scrivendo da una parte si dovrebbe vedere il risultato dall'altra parte.
Se si vuole provare a utilizzare questa comunicazione, occorre concludere il funzionamento di Minicom senza reinizializzare i modem. Questo si ottiene con la combinazione [Ctrl+a][q].
Quando il collegamento tra i due modem è attivo, indipendentemente dal fatto che ciò sia stato ottenuto con l'aiuto di Minicom o che i modem si siano connessi in modo autonomo in base alla loro configurazione prememorizzata, si può stabilire una connessione PPP come già visto in precedenza.
Segue lo script già visto nella prima parte di questo capitolo, ritoccato in funzione dell'uso del modem.
#! /bin/sh # Elaboratore A IP_REMOTO="192.168.200.1" IP_LOCALE="192.168.100.1" PERIFERICA="/dev/cua1" VELOCITA="38400" C_FLUSSO="crtscts" /usr/sbin/pppd \ mru 576 \ mtu 576 \ passive \ modem \ $C_FLUSSO \ $IP_LOCALE:$IP_REMOTO \ $PERIFERICA \ $VELOCITA \ noauth \ refuse-chap \ refuse-pap \ persist |
Come prima, nel secondo elaboratore gli indirizzi IP devono essere invertiti.
IP_REMOTO="192.168.100.1" IP_LOCALE="192.168.200.1" |
In passato, nei sistemi GNU/Linux si utilizzava il programma slattach per realizzare una connessione SLIP tra due elaboratori attraverso le porte seriali. Attualmente, questo programma sembra scomparso dalle distribuzioni GNU/Linux, al suo posto, per le connessioni SLIP si trova dip che richiede un po' di configurazione.
Tuttavia, in generale le connessioni di tipo SLIP sono obsolete, soprattutto in considerazione del fatto che diventa impossibile trasportare in questo modo il protocollo IPv6, salvo l'inserimento in un tunnel IPv4. |
Rob van der Putten, Leased line mini HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
daniele @ swlibero.org
1) In generale, l'uso di un collegamento al file di dispositivo della porta seriale corrispondente al modem è sconsigliabile. Negli esempi si farà sempre riferimento al file /dev/modem
, ma ognuno potrà sostituire questo nome con quello più appropriato per il proprio sistema.
2) L'opzione -i fa sì che il collegamento /dev/modem
possa essere sostituito se già esistente, chiedendo prima una conferma.
3) Se si intende instaurare un collegamento per trasportare direttamente IPv6, diventa indispensabile aumentare questi valori.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome connessioni_su_porte_seriali_e_con_linee_dedicate.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]