Documento datato: Settembre 2002


Introduzione ad Appletalk

 

     Nel 1984  Apple rilascio' il  Macintosh, con  Mac OS1, mentre Microsoft rilascio' Windows 1.01 nel Novembre del 1985. Bisognera' attendere Windows 3.11 nel 1993 per un supporto per i protocolli di rete grazie all'uso di NetBeui e NetBios, ma ancora senza il TCP/IP nativo (nelle versioni precedenti vi era solo un programma di emulazione terminale che si poteva usare insieme ad un cavo null modem). Chi aveva necessita' di fare networking con DOS o Windows poteva utilizzare Netware lanciato nel 1983 da Novell. 

    Ecco le foto delle prime versioni dei due sistemi operativi (cortesia di Allen Pike,  AlteringTime):

Mac OS 1

Windows 1


    L'interfaccia grafica di Macintosh era rivoluzionaria per i tempi. L'ambizione di Apple non si limitava alle funzionalita' d'interfaccia ma riguardava anche la rete. L'introduzione del protocollo Appletalk e della tecnologia LocalTalk forniva una soluzione di rete completa per gli utenti Macintosh. Il protocollo era implementato a livello fisico tramite LocalTalk che funzionava tramite interfaccia Mini-DIN8 o  Mini-DIN3 o RJ11, con 32 postazioni massime per 330 metri di cavo e 230kbps di velocita' massima. Il segnale usato era RS422. In seguito Apple svincolo' il layer fisico dal data-link, ovvero, permise l'utilizzo su Ethernet, FDDI e Token Ring, con i protocolli EtherTalk, FDDITalk e TokenTalk, che si abbreviano con ELAP (EtherTalk Link Access Protocol), FLAP e TLAP. Il supporto Ethernet per Macintosh si ha dal 1987.


Ecco come appariva un collegamento di rete LocalTalk:

[Wall jack = Wire = Teleconnector (+ Resistor) = Printer
Port](photo by Yale Univ)


ed ecco una tipica rete col daisy-chain  in LocalTalk:

[Daisy Chain](by Yale Univ)

 

    Appletalk nasce con l'intenzione di rendere il Macintosh quanto piu' automatizzato possibile nella configurazione di rete. Un Macintosh collegato alla rete si configura da solo. Basta accenderlo e collegarlo ed e' in grado di autoconfigurarsi l'indirizzo Appletalk, gateway e servizi disponibili nella rete. Possiamo affermare che di default abbiamo una serie di feature paragonabili a quelle fornite da un DHCP server in ambiente IP. Vi e' una ragione per questo. Negli anni '80 l'introduzione di Appletalk da parte di Macintosh e di Netware da Novell rispondevano ad esigenze di connettivita' in ambiente LAN. Non sono protocolli pensati per reti WAN. E' facile accorgersene confrontando Appletalk e Netware con IP. TCP/IP e' nato per reti WAN. Paragonero' quando possibile Appletalk con TCP/IP perche' si tratta di due filosofie differenti ma con piu' elementi in comune.


   La filosofia di funzionamento in ambiente LAN si comprende, ad esempio, osservando come sia inclusa nella pila di protocollo la gestione dei nomi e delle risorse disponibili in rete (quali stampanti e servers). In una rete moderna TCP/IP non si occupa della gestione dei nomi e dei servizi delle macchine in LAN. Lo stack di TCP ha solo 4 livelli invece dei 7 della pila ISO/OSI. In ambiente windows, per esempio, sara' Netbios o il DNS ad occuparsi della gestione dei nomi, e non un protocollo specifico di TCP/IP. In IPX e Appletalk i router si prendono carico di gestire e propagare sia le informazioni di routing che le informazioni delle risorse disponibili nella rete. Invece un protocollo pensato per le WAN (anche amministrate da organizzazioni differenti) non puo' preoccuparsi della propagazione di informazioni specifiche della LAN quali le stampanti disponibili o i servizi presenti in un server cosi' il TCP/IP non lo fa direttamente. Un protocollo pensato per le LAN deve preoccuparsi dei servizi disponibili in rete e cosi Appletalk e IPX lo fanno.

   La prima versione di Appletalk fu la Appletalk phase I che consentiva un massimo di 254 postazioni in LAN. Limiti fisici portavano questo valore a 32 per LocalTalk. Gli indirizzi delle macchine erano di 8 bits. Con il successivo Appletalk phase II (1989, dal system 7.0) si introdusse il concetto di network. Gli indirizzi sono costituiti da una parte di 16 bits di rete e da una parte di 8 bits di host. All'interno della rete vengono definite le Zone. Ogni Zona ha un nome ed ogni macchina della rete appartiene ad una Zona. Possiamo immaginare le Zone come qualcosa di simile ai WorkGroups di Windows. In Appletalk phase I una sola Zona e' definita.

   Ogni risorsa della rete ha un nome in formato NVI: nome:tipo@zona, dove il 'nome' e' quello della macchina, 'tipo' definisce un protocollo e zona il nome della Zona.

  La struttura degli indirizzi di Appletalk Phase II consente l'introduzione dei router nell'architettura di rete e, rendendo Appletalk routable, consente di utilizzare Appletalk in WAN. Possiamo immaginare una rete Appletalk come costituita da piu' zone, dove ogni interfaccia di router ed ogni PC appartiene ad una ed una sola Zona. Una Zona puo' essere distribuita a macchia di leopardo sulla rete. Gli indirizzi di rete vengono raggruppati in cable-range. Ad esempio dire che in una ethernet del router vi e' il cable-range 10-12 significa che vi sono 3 reti da 253 apparati max che coesistono (max 253 per rete in phase II).

   Ecco i protocolli principali in una rete Appletalk inseriti nella visione ISO/OSI:

Il protocollo di livello 3 (network) di Appletalk e' DDP. AARP, allo stesso livello, mappa il layer 2 col layer 3 (come ARP di IP). DDP e' paragonabile a IP. A livello 4 (trasporto) troviamo NBP (Name Binding Protocol), RTMP (Router Table Maintenance Protocol), ATP (Appletalk Transport Protocol), ZIP (Zone Information Protocol), AEP (Appletalk Echo Protocol), AURP (AppleTalk Update-based Routing Protocol). A livello 5 troviamo ASP (Appletalk Session Protocol), ADSP (AppleTalk Data Stream Protocol)

   RTMP e' il protocollo di routing distance-vector di AppleTalk. Ogni 10 secondi vengono inviate le informazioni di routing. Se per 20 secondi cio' non avviene le informazioni di routing vengono cancellate. Questa rapidita' con cui vengono cancellate le route non aggiornate (almeno rispetto ai protocolli di routing IPX/RIP e IP/RIP) puo' essere un problema nel caso di link congestionati dove si possono avere problemi di route flapping. AURP e' anche protocollo di routing ma giova per effettuare tunneling in Appletalk. Se si ha l'esigenza di un protocollo che non sia distance-vector si puo' utilizzare con Cisco EIGRP, che supporta Appletalk.

   ZIP e NBP gestiscono i nomi. Con ZIP si gestisce la mappa che associa i nomi di zona ai cable-range. Tale mappa si trova all'interno di router in tabelle che si chiamano  ZIT (Zone Information Table). Chooser, l'utility Macintosh che consente di accedere alle risorse di rete, interroga i router per determinare le zone presenti nella rete. Ecco un esempio:

 

 

    Il valore "tipo" nell'NVI indica un protocollo. Se ad esempio ha il valore LaserWriter, il protocollo sara' PAP (Printer Access Protocol). Se poi e' una stampante reale ma un computer o un fax non fa differenza. L'importante e' che usi PAP. A questo punto Macintosh deve ricavare la lista di stampanti presente in rete, da cui il lato destro della figura di sopra. Con la Zona selezionata e il tipo di device Macintosh manda dei multicast nella rete alla ricerca di tutte le macchine che hanno un socket di tipo LaserWriter. Questo lo fa tramite il protocollo NBP. Si tratta di multicast Ethernet associati ai  fornitori di servizi presenti nella rete.

   Supponiamo di avere scelto la Zona "amministrazione" e LaserWriter come stampante. Macintosh manda a tutti i router della rete una richiesta tramite NBP per *:LaserWriter@amministrazione. Il router controlla nelle sue ZIT alla ricerca della zona 'amministrazione'. Se questa non c'e' la richiesta viene girata ai router collegati. Alla fine le risposte vengono mandate al mittente. NBP puo' generare molto traffico se consideriamo l'attivita' di piu' utenti che usano Chooser e la eventuale presenza di Zone a macchia di leopardo.

    Appletalk ha la caratteristica di rendere la configurazione di rete di un Macintosh davvero banale e plug-and-play. Macintosh inizialmente si autoconfigura con un indirizzo di rete tra 65280 e 65534. Quindi manda una richiesta GetNetInfo che viene catturata dal router che invia i parametri di configurazione finali consistenti in un  corretto numero di cable-range e nel nome della zona. Quindi Macintosh si sceglie l'indirizzo di host casualmente e verifica l'assenza di duplicati in rete inviando 10  broadcast AARP. Se l'indirizzo e' gia' assegnato ad un altro apparato la procedura si ripete.

   Gli apparati in grado di mandare le risposte alle richieste "GetNetInfo" si chiamano seed. Questi vanno distinti da quelli non-seed. Un apparato seed puo' essere un router ma anche un Macintosh della rete o un altro dispositivo (come un server Windows con Appletalk ad esempio). Un router puo' essere configurato come seed o come non-seed. Nel secondo caso si comporta come un computer e manda lui stesso una richiesta di GetNetInfo per autoconfigurarsi. Bisogna accertarsi che in una rete vi siano sempre degli apparati seed. Questi diventano tali quando sono manualmente configurati con un cable-range e un nome di zona e possibilmente devono essere piu' di uno, per ragioni di ridondanza. Se un Mac non e' stato configurato manualmente e non trova neppure un seed si tiene l'indirizzo tra 65280 e 65534 iniziale e poi istruisce gli altri facendo lui da seed. Questo range di indirizzi di rete da 65280 hanno utilizzo solo in questo caso. In una WAN non avere seed puo' allora provocare l'uso dello stesso cable-range in parti differenti della rete e in generale crea malfunzionamenti e va evitato.

  A questo punto il lettore dovrebbe aver intuito il prezzo che si paga per una tale facilita' di utilizzo della rete per l'utente finale. Cosa accade infatti quando in un cable-range ci sono 250 macchine e se introduce una nuova? Indovinare l'indirizzo giusto per un Mac costa non pochi AARP e poi ci sono parecchi  NBP e ZIP dovute a Chooser e al normale utilizzo delle funzioni di rete da parte degli utenti.

   Inoltre se ci sono piu' router nella rete non c'e' certezza di chi verra' nominato gateway per i PC, la cosa va pilotata con le access-list ma la situazione si complica. Insomma per il sistemista la configurazione di una rete Appletalk non e' banale.

   In una LAN l'indirizzo di rete dev'essere uguale per tutti. Se c'e' una Zona nella LAN l'interfaccia del router deve avere assegnata quella Zona. Se si configura un'interfaccia del router in modo erroneo, o come indirizzo di rete o come zona, l'interfaccia rimane in stato di down (tranne che non la si forzi in up per troubleshooting).

  Sono due le cause principali di errori nella configurazione di una rete Appletalk. Il primo consiste nell'assegnazione erronea di nomi di rete o zona agli apparati. Il secondo e' una conseguenza di modifiche alla configurazione di un'interfaccia Appletalk in un router. ZIP non propaga i cambiamenti dei nomi di zona. ZIP cancella le sue entrate quando le reti spariscono dalla tabella di routing. Questo vuol dire che il cambiamento nel nome di una Zona nell'interfaccia di un router semplicemente non viene propagato. Ed e' chiaro che questo portera' allo shutdown dell'interfaccia e ad un malfunzionamento della rete. I cambiamenti in una parte di WAN vengono fatti spegnendo tutti i seed della LAN in questione per 10 minuti, in modo di mandare in timeout i valori vecchi su tutta la WAN. Quindi si possono riaccendere i router e la modifica effettuata sara' operativa. Il tempo per accertarsi che tutti i router in una rete non hanno piu' nella ZIP table roba vecchia e' proprio di 10 minuti. 

 Configurazione 

a)

Un router puo' essere configurato in seed o in non-seed mode. Si consideri che normalmente conviene configurare un router in seed mode. In caso di una rete con piu' router e apparati puo' essere conveniente far partire il router in non-seed mode, quindi verificare l'indirizzo e la Zona che si autoconfigura e quindi passare al seed mode con i parametri presi in automatico dal router. Questo sistema consente di evitare di sbagliare la configurazione d'interfaccia. Per configurare il non-seed mode si usano i due comandi:

  •  appletalk cable-range 0-0

  •  appletalk discovery

Ecco un esempio di  configurazione non-seed (si noti il valore 65478.85 scelto dal router e non dall'operatore):

appletalk routing
!
!
!
!
interface Ethernet0/0
ip address 192.168.30.1 255.255.255.0
no ip route-cache
no ip mroute-cache
half-duplex
appletalk cable-range 0-0 65478.85
appletalk discovery
!

ed ecco cosa succede quando l'interfaccia si collega alla rete:

*Mar 1 00:02:41.319: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Mar 1 00:02:55.859: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
*Mar 1 00:02:55.859: Ethernet0/0: AppleTalk state changed; line down -> restarting
*Mar 1 00:03:05.860: Ethernet0/0: AppleTalk state changed; restarting -> probing

ecco i 10 broadcast per verificare che l'indirizzo provvisorio non sia impegnato: 

*Mar 1 00:03:07.863: AARP: Sending probe, dgs=60
*Mar 1 00:03:07.863: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:08.063: AARP: Sending probe, dgs=60
*Mar 1 00:03:08.063: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:08.263: AARP: Sending probe, dgs=60
*Mar 1 00:03:08.263: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:08.464: AARP: Sending probe, dgs=60
*Mar 1 00:03:08.464: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:08.664: AARP: Sending probe, dgs=60
*Mar 1 00:03:08.664: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:08.864: AARP: Sending probe, dgs=60
*Mar 1 00:03:08.864: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:09.065: AARP: Sending probe, dgs=60
*Mar 1 00:03:09.065: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:09.265: AARP: Sending probe, dgs=60
*Mar 1 00:03:09.265: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:09.465: AARP: Sending probe, dgs=60
*Mar 1 00:03:09.465: Ethernet0/0: AARP: Sent probe for 65478.85
*Mar 1 00:03:09.666: AARP: Sending probe, dgs=60
*Mar 1 00:03:09.666: Ethernet0/0: AARP: Sent probe for 65478.85

a questo punto il router utilizza 65478.85 e quindi manda una richiesta GetNetInfo alla richiesta di un dispositivo seed:

*Mar 1 00:03:09.866: Ethernet0/0: AARP aarp_insert, initial NULL entry
*Mar 1 00:03:09.866: AARP: aarp_insert, entry 81496F6C for node 65478.85(0004.9a4b.7020) added on Ethernet0/0
*Mar 1 00:03:09.866: %AT-6-ADDRUSED: Ethernet0/0: AppleTalk node up; using address 65478.85
*Mar 1 00:03:09.866: %AT-6-ACQUIREMODE: Ethernet0/0: AppleTalk interface initializing; acquiring network configuration
*Mar 1 00:03:09.866: Ethernet0/0: AppleTalk state changed; probing -> acquiring

se il dispositivo si trova la procedura termina. Altrimenti il router rimane con l'indirizzo provvisorio. Normalmente cio' non e' voluto e indica un'anomalia nella configurazione di  rete:

*Mar 1 00:03:10.904: AARP: aarp_ager; starting scan for old AARP entries
*Mar 1 00:03:10.904: AARP: aarp_ager; finished scan; 1 fixed, 0 dynamic examined, 0 deleted
*Mar 1 00:03:10.932: AT: RTMP GC complete (0 PDBs freed, 0 PDBs waiting)
*Mar 1 00:03:10.944: AT: Connected GC complete (0 PDBs freed, 0 PDBs waiting)

ed ecco cio' che accade in una rete senza seed:

Router#show apple int eth0/0
Ethernet0/0 is up, line protocol is up
AppleTalk port disabled, Acquiring port net information
AppleTalk cable range is not known.
AppleTalk address is 65478.85, Valid
AppleTalk zone is not set.
AppleTalk discovery mode is enabled
AppleTalk address gleaning is disabled
AppleTalk route cache is not initialized

b)

ecco adesso una configurazione tipica, con seed mode. Il router e' configurato con un indirizzo e una zona:

!
appletalk routing
!
!
!
!
interface Ethernet0/0
ip address 192.168.30.1 255.255.255.0
no ip route-cache
no ip mroute-cache
half-duplex
appletalk cable-range 10-12 11.84
appletalk zone Gianrico
!

Ed ecco cosa succede quando l'interfaccia si attiva:

  Router#
*Mar 1 00:15:02.254: Ethernet0/0: AppleTalk state changed; line down -> restarting
*Mar 1 00:15:04.253: %LINK-3-UPDOWN: Interface Ethernet0/0, changed state to up
*Mar 1 00:15:05.255: %LINEPROTO-5-UPDOWN: Line protocol on Interface Ethernet0/0, changed state to up
*Mar 1 00:15:12.258: Ethernet0/0: AppleTalk state changed; restarting -> probing

Si verifica se l'indirizzo in possesso e' libero:

*Mar 1 00:15:14.262: AARP: Sending probe, dgs=60
*Mar 1 00:15:14.262: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:14.462: AARP: Sending probe, dgs=60
*Mar 1 00:15:14.462: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:14.662: AARP: Sending probe, dgs=60
*Mar 1 00:15:14.662: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:14.863: AARP: Sending probe, dgs=60
*Mar 1 00:15:14.863: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:15.063: AARP: Sending probe, dgs=60
*Mar 1 00:15:15.063: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:15.263: AARP: Sending probe, dgs=60
*Mar 1 00:15:15.263: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:15.464: AARP: Sending probe, dgs=60
*Mar 1 00:15:15.464: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:15.664: AARP: Sending probe, dgs=60
*Mar 1 00:15:15.664: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:15.864: AARP: Sending probe, dgs=60
*Mar 1 00:15:15.864: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:16.065: AARP: Sending probe, dgs=60
*Mar 1 00:15:16.065: Ethernet0/0: AARP: Sent probe for 11.84
*Mar 1 00:15:16.265: Ethernet0/0: AARP aarp_insert, initial NULL entry

essendo libero si utilizza e si attiva l'interfaccia:

*Mar 1 00:15:16.265: AARP: aarp_insert, entry 81496E30 for node 11.84(0004.9a4b.7020) added on Ethernet0/0
*Mar 1 00:15:16.265: %AT-6-ADDRUSED: Ethernet0/0: AppleTalk node up; using address 11.84
*Mar 1 00:15:16.265: %AT-6-PATHADD: Ethernet0/0: AppleTalk CONNECTED path to network 10-12 added; via 11.84 (metric 1)

si verifica che non vi siano incoerenze di network o di zona nella rete:

*Mar 1 00:15:16.265: Ethernet0/0: AppleTalk state changed; probing -> verifying
*Mar 1 00:15:16.269: AT: Sent GetNetInfo request broadcast on Ethernet0/0
*Mar 1 00:15:26.269: AT: Sent GetNetInfo request broadcast on Ethernet0/0
*Mar 1 00:15:36.270: AT: Sent GetNetInfo request broadcast on Ethernet0/0
*Mar 1 00:15:46.270: AT: Sent GetNetInfo request broadcast on Ethernet0/0
*Mar 1 00:15:56.270: AT: Sent GetNetInfo request broadcast on Ethernet0/0

e si utilizza l'NVI, ovvero il nome identificativo del router:

*Mar 1 00:16:06.271: Ethernet0/0: AppleTalk state changed; verifying -> operational
*Mar 1 00:16:08.274: %AT-6-REGPENDING: NBP registration of Router.Ethernet0/0:ciscoRouter@Gianrico at [11n,84a,254s] pending
*Mar 1 00:16:10.935: AARP: aarp_ager; starting scan for old AARP entries
*Mar 1 00:16:10.935: AARP: aarp_ager; finished scan; 1 fixed, 0 dynamic examined, 0 deleted
*Mar 1 00:16:10.963: AT: RTMP GC complete (0 PDBs freed, 0 PDBs waiting)
*Mar 1 00:16:10.975: AT: Connected GC complete (0 PDBs freed, 0 PDBs waiting)
 
Nel semplice caso di questo esempio, il router e' l'unico apparato attivo nella rete:

Router#show apple route
Codes: R - RTMP derived, E - EIGRP derived, C - connected, A - AURP
S - static P - proxy 
1 route in internet

The first zone listed for each entry is its default (primary) zone.

C     Net 10-12    directly connected, Ethernet0/0, zone Gianrico



Router#show apple int eth0/0
Ethernet0/0 is up, line protocol is up
AppleTalk cable range is 10-12
AppleTalk address is 11.84, Valid
AppleTalk zone is "Gianrico"
AppleTalk address gleaning is disabled
AppleTalk route cache is enabled

Col comando 'test apple' si puo' verificare la risoluzione dei nomi e interrogare la rete per tutti i dispositivi presenti:

Router#test apple
Router(atalk test)#nbp ?
confirm Confirm NBP
lookup Send NBP Lookup
parameters Set NBP timeouts
poll Poll all devices in internet

Router(atalk test)#nbp poll
poll: sent 1 lookups
(11n,84a,254s)[1]: 'Router.Ethernet0/0:ciscoRouter@Gianrico'
NBP polling completed.
Processed 1 replies, 1 events

 

 

Altre letture

   Consiglio di consultare l’enorme documentazione disponibile on-line nel sito della cisco http://www.cisco.com/ . E’ possibile trovare sempre tutto cio’ che si cerca.

 

6bone

Copyright 2002-2004 Gianrico Fichera – ITESYS srl –

Il materiale di questa pagina non e’ sponsorizzato o sottoscritto da Cisco Systems, Inc. Ciscoâ e’ un trademark di Cisco Systems, Inc. negli Stati Uniti e in altri stati. L’autore di questa pagina non si assume nessuna responsabilita’ e non da nessuna garanzia riguardante l’accuratezza e la completezza delle informazioni presenti nonche’ da conseguenze sull’uso delle informazioni presenti in questa pagina.
Il sito web ufficiale della Cisco e’ http://www.cisco.com. Nel caso si volesse utilizzare il contenuto di questa pagina nella forma in cui e’ presentato rivolgersi all’autore scrivendo a gianrico.fichera itesys.it. E' possibile utilizzare il contenuto di questa pagina per fini didattici (non lucro) purche' si dia credito all'autore.

This material is not sponsored by, endorsed by, or affiliated with Cisco Systems, Inc., Cisco, Cisco Systems, and the Cisco Systems logo are trademarks or registered trade marks of Cisco Systems, Inc. or its affiliates. All other trademarks are trademarks of their respective owners.