# AppleTalk

AppleTalk ist eine Gruppe von Netzwerkprotokollen und wurde von Apple Computer Ende 1983 entwickelt, um einen einfachen Zugang zu gemeinsamen Ressourcen wie Dateien oder Druckern im Netz zu ermöglichen. AppleTalk ist ein eingetragenes Warenzeichen von Apple, Inc.
Durch die initiale exklusive Verknüpfung von AppleTalk mit der später zu LocalTalk umbenannten Netzwerkhardware, wird oft fälschlicherweise AppleTalk als Synonym für eine LocalTalk-Verkabelung benutzt.
Die Entscheidung, eigene Netzwerkprotokolle, sowie LocalTalk als proprietäres Übertragungsmedium zu etablieren, ergab sich aus den 1983 vorherrschenden Gegebenheiten: Netzwerkhardware war selten standardisiert und sehr teuer; die Kosten erreichten oft die Anschaffungskosten für einen Personal Computer selbst.
Angesichts der weiten Verbreitung von IP-basierten Netzwerken wurde AppleTalk ab Mac OS X 10.6 „Snow Leopard“ von Apple aufgegeben. Alle wesentlichen Dienste wurden entweder auf TCP/IP abgebildet (Beispiel: Dateizugriff über AFP, TCP Port 548) oder durch andere, bereits bestehende Protokolle ersetzt (Beispiel: Druckerzugriff über LPR oder JetDirect Ports oder IPP, Finden von Geräten und Diensten im Netzwerk mit Bonjour). Bonjour ist in seinen Fähigkeiten allerdings auf ein Netzwerksegment eingeschränkt, ebenso besteht keine Möglichkeit mehr, netzwerkfähige Geräte über Zonen logisch zu ordnen.
Es gab für Nicht-Apple-PCs auch ISA-, MCA- sowie SBus-Karten mit LocalTalk-Schnittstelle, so dass solche PCs in ein AppleTalk-Netzwerk integriert werden und so Daten ausgetauscht und Drucker gemeinsam genutzt werden konnten.

## Geschichte

AppleTalk basiert zu großen Teilen auf dem (nicht patentierten) Cambridge Ring.

## Überblick

AppleTalk beherrscht zwei Adressierungsmodi: Extended (Phase 2) und Nonextended (Phase 1).
AppleTalk adressiert Geräte anhand einer dynamisch zugewiesenen Adresse. Diese Adresse setzt sich aus einer 16-Bit Netzwerkadresse (nur Phase 2) und einer 8-Bit Node-ID zusammen. Die Netzwerkadresse kann innerhalb eines zusammenhängenden Bereiches von einem Router vorgegeben werden. Die Netzadresse 0 steht dabei für das lokale Netzwerksegment, die Netzadressen 65280-65534 sind reserviert. Die Node-ID 0 ist ungültig, 1-127 sind für Benutzer gedacht, 128-254 für Server, 255 für Broadcast. Daran schließt sich eine 8-Bit Socket-Nummer zur Unterscheidung der einzelnen Dienste auf dem jeweiligen Gerät an. Die Sockets 0 und 255 sind ungültig, 1-127 sind für die statische und 128-254 sind für die dynamische Zuteilung gedacht.
Eine typische AppleTalk-Adresse wäre 1248.33:4.
In der ersten Version der AppleTalk-Protokollfamilie konnte einem Segment exakt eine Netzwerknummer zugeteilt werden, wenn ein Router vorhanden war; bzw. die Nummer 0 ohne Router. Die Adressierung wurde also lediglich durch die Knoten-ID ermöglicht. Dieser Modus nennt sich Phase1 bzw. „nonextended“ und kann maximal 254 Knoten ansprechen. Diese Limitierung bedeutete auf dem ursprünglich als einziges Übertragungsmedium gedachten LocalTalk keine wesentliche Einschränkung, da ein Betrieb mit mehr als 32 Knoten durch die zunehmenden Datenkollisionen keinen brauchbaren Datendurchsatz mehr ermöglicht.
Um die Limitierung der Knotenzahl für größere Segmente zu umgehen, wurde AppleTalk Phase2 bzw. „extended“ geschaffen. Hier ist pro Segment ein ganzer Bereich von Netzwerknummern zuteilbar (Cable-Range). Die Knoten-IDs 0, 254 und 255 sind reserviert, daher ergibt sich die maximale Knotenanzahl pro Segment aus der Anzahl der zugewiesenen Netzwerknummern multipliziert mit 253.
AppleTalk kennt das Konzept von Zonen. Diese ermöglichen eine logische Gruppierung von Geräten, die nicht mit der physischen Struktur von Netzwerksegmenten übereinstimmen muss. Phase 2-Netzwerke unterstützen mehr als eine Zone pro Segment. Der Benutzer kann die Zonenzugehörigkeit dann wählen. Zonen können auch über Segmentgrenzen gleiche Namen aufweisen. Diese Zonenliste taucht im Benutzerprogramm Auswahl auf.
Damit sich Benutzer nicht mit wenig eingängigen numerischen Adressen herumschlagen müssen, ist ein dynamischer Namensdienst (NBP) vorgesehen. Serverdienste registrieren sich mit dem jeweils lokalen NBP-Dienst. Netzwerkseitig basiert dieser auf Multicasts. Die Auswahl sendet Multicasts aus und trägt die individuellen Antworten zu einer Listenansicht zusammen.

## Die AppleTalk-Protokolle

Die AppleTalk-Familie umfasst folgende Protokolle (gruppiert nach Netzschichten):

### Anwendungs- und Darstellungsschicht

* Apple Filing Protocol (AFP) – Zugriff auf gemeinsam genutzte Dateien
* Apple Printer Access Protocol (PAP) – Datenaustausch mit Druckdiensten und PAP-fähigen Druckern
* AppleTalk Update-based Routing Protocol (AURP) – AppleTalk tunneling via TCP/IP und Point-To-Point-Verbindungen über UDP-Port 387 (RFC 1504)

### Sitzungsschicht

* Zone Information Protocol (ZIP) – liefert Informationen über die eigene Netzzone und andere Zonen
* AppleTalk Session Protocol (ASP) – Protokoll zur Steuerung von Sitzungen
* AppleTalk Data Stream Protocol (ADSP) – verbindungsorientiertes Protokoll zum Austausch von Datenströmen

### Transportschicht

* AppleTalk Transaction Protocol (ATP) – Transaktionsprotokoll, das eine zuverlässige, reihenfolgetreue Paketauslieferung garantiert
* AppleTalk Echo Protocol (AEP) – wird genutzt, um die Round-Trip-Zeit zu ermitteln und um die Erreichbarkeit eines Netzteilnehmers festzustellen.
* Name Binding Protocol (NBP) – Vergabe von Namen für Adressen
* Routing Table Maintenance Protocol (RTMP) – Verwaltung von Routing-Tabellen

### Vermittlungsschicht

* Datagram Delivery Protocol (DDP) – verbindungsloser, nicht-zuverlässiger Datagrammauslieferungsdienst

### Sicherungs- und Bitübertragungsschicht

Es werden mehrere Verbindungszugriffsprotokolle (Link-Access Protocols, LAP) unterstützt, die durch den sogenannten LAP-Manager verwaltet werden.
* LocalTalk LAP (LLAP)
* Ethernet LAP (ELAP) (von Apple auch EtherTalk genannt)
* Token Ring LAP (TLAP)
* Fiber Distributed Data Interface (FDDI)
* PPP AppleTalk Control Protocol (ATCP) (RFC 1378)
* AppleTalk Address Resolution Protocol (AARP) – Adressumsetzung zwischen Netzadressen, die vom DDP verwendet werden, und Geräteadressen der Verbindungsschicht.
Die Bitübertragungsschicht umfasst die Treiber für Netzschnittstellen.

## Der AppleTalk-Protokollstapel

Die AppleTalk-Protokolle lassen sich in mehrere Schichten einteilen, die einen Protokollstapel (protocol stack) bilden. Die Protokolle lassen sich wie folgt in das ISO-OSI-Referenzmodell einordnen:
| OSI-Schicht | AppleTalk Protokollstapel | AppleTalk Protokollstapel | AppleTalk Protokollstapel | AppleTalk Protokollstapel | AppleTalk Protokollstapel | AppleTalk Protokollstapel | AppleTalk Protokollstapel |
| 7 | | | AFP | PAP | | |
| 6 | | | AFP | PAP | | | |
| 5 | ZIP | ZIP | ASP | | | ADSP | |
| 4 | | ATP | ATP | AEP | NBP | | RTMP |
| 3 | DDP | DDP | DDP | DDP | DDP | DDP | DDP |
| 2 | | LLAP | ELAP | TLAP | FDDI | ←AARP | |
| 1 | | LocalTalk | Ethernet Treiber | Token Ring Treiber | FDDI Treiber | |

## Bezug zu anderen Protokollen

AppleTalk ist routingfähig, alle beteiligten Router müssen dabei AppleTalk unterstützen, gilt aber als „geschwätzig“, produziert also ständige Paketübertragungen, wobei einige AppleTalk-fähige Router (z. B. von Cisco oder Netopias von Farallon) in der Lage waren, diesen vor allem aus Keepalive-Paketen bestehenden Datenverkehr zu emulieren (AppleTalk-spoofing), so dass eine Dauerverbindung dadurch umgangen werden konnte. Verbindungen über X.25-Netzwerke waren ebenso möglich. Die Verbindung zweier entfernter AppleTalk-Netzwerke z. B. über das TCP/IP-basierte Internet ist also nicht unmittelbar, sondern nur durch Verkapselung (z. B. durch Kinetics Internet Protocol) möglich.

## Unix

Es gibt Implementierungen von AppleTalk auf Unix:
* netatalk (Open Source)
* CAP (Columbia APpleTalk, Open Source)
* Helios EtherShare (kommerziell)

## Trivia

Durch die geringe Paketgröße des zugrundeliegenden Datagram Delivery Protocol (13 Byte Header, 587 Bytes Nutzdaten) skaliert AppleTalk auf schnelleren Übertragungsstrecken als 10 MBit/s Ethernet nur schlecht, der Datendurchsatz auf Fast Ethernet beträgt bei schnellen beteiligten Netzwerkkomponenten ungefähr ein Drittel des möglichen.