Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/library/linux/AppLinux/al128.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:44 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 10:26:32 2007 Êîäèðîâêà: |
Nel capitolo 98 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, e 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. Le tabelle B.3 e B.4, riportate nell'appendice B, ne mostrano 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/ttyS
n, ed eventualmente di un collegamento simbolico denominato /dev/modem
che punti al dispositivo corrispondente alla porta seriale utilizzata per la connessione.
Supponendo di utilizzare la seconda porta seriale, si potrÞ creare il collegamento nel modo seguente:
#
ln
-
s -
i /dev/ttyS1 /dev/modem
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/Linux Õ Minicom, ed Õ quello che verrÞ mostrato negli esempi seguenti. Se non si vuole intervenire sui permessi del 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 menu di Minicom.
Commands can be called by CTRL-A <key> Main Functions Other Functions Dialing directory..D run script (Go)....G | Clear Screen.......C Send files.........S Receive files......R | cOnfigure Minicom..O comm Parameters....P Add linefeed.......A | Suspend minicom....J Capture on/off.....L Hangup.............H | eXit and reset.....X send break.........F initialize Modem...M | Quit with no reset.Q Terminal settings..T run Kermit.........K | Cursor key mode....I lineWrap on/off....W local Echo on/off..E | Help screen........Z | scroll Back........B Select function or press Enter for none. |
õ 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 menu di diverse scelte possibili.
Filenames and paths File transfer protocols **Serial port setup** Modem and dialing Screen and keyboard Save setup as dfl Save setup as.. Exit |
Si deve selezionare la voce Serial port setup
, spostando il cursore con i tasti freccia e premendo [Invio] alla fine.
A - Serial Device : /dev/modem B - Lockfile Location : /var/lock C - Callin Program : D - Callout Program : E - Baud/Par/Bits : 38400 8N1 F - Hardware Flow Control : Yes G - Software Flow Control : No |
Si seleziona la voce E
per modificare la velocitÞ di comunicazione.
[e]
Current: 38400 8N1 Speed Parity Data A: 300 J: None Q: 5 B: 1200 K: Even R: 6 C: 2400 L: Odd S: 7 D: 9600 M: Mark T: 8 E: 19200 N: Space F: 38400 G: 57600 H: 115200 O: 8-N-1 P: 7-E-1 |
õ 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]
A - Serial Device : /dev/modem B - Lockfile Location : /var/lock C - Callin Program : D - Callout Program : E - Baud/Par/Bits : 115200 8N1 F - Hardware Flow Control : Yes G - Software Flow Control : No |
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 menu con la semplice pressione del tasto [Invio].
[Invio]
Quindi si esce dal menu precedente selezionando la voce Exit
.
Filenames and paths File transfer protocols Serial port setup Modem and dialing Screen and keyboard Save setup as dfl Save setup as.. **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 99, tenendo presente che il kernel deve essere stato predisposto per il PPP. |
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
, e a 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
[Invio]-
n
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
[Invio]-
n
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, ed eventualmente si puÐ fare 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 \ mru 576 \ mtu 576 \ ... |
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, e come tali 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 rispettive porte seriali 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" ... |
Nella documentazioni tradizionali su GNU/Linux veniva utilizzato 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.
Rob van der Putten Leased line mini HOWTO
---------------------------
Appunti Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ pluto.linux.it