[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 128.   Connessioni su porte seriali e con linee dedicate

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.

128.1   Verifica del funzionamento

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)

128.1.1   Programma di comunicazione

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.

          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 menù 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 menù con la semplice pressione del tasto [Invio].

[Invio]

Quindi si esce dal menù 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]

128.2   Connessione PPP senza autenticazione

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 /etc/ppp/ip-up e /etc/ppp/ip-down non siano stati predisposti.

128.2.1   Script di connessione

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.

128.2.2   Verifica della connessione

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.

128.2.3   Varianti

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"
...

128.3   Linea dedicata

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.

128.3.1   Ruolo dei modem

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.

128.3.2   Simulazione con l'aiuto di Minicom

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].

128.3.3   Connessione con pppd

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"

128.4   Annotazioni

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.

128.5   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- 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]