# Internetwork Packet Exchange

Das Internetwork Packet Exchange (IPX) ist ein von Novell entwickeltes Netzwerkprotokoll. Es stammt vom Protokoll Internetwork Datagram Protocol (IDP) der Xerox Network Services (XNS) ab und wurde primär für das Netzwerkbetriebssystem NetWare eingesetzt.
IPX ist ein verbindungsloses, proprietäres Protokoll mit Routing-Fähigkeiten, das funktionell dem IP bzw. UDP entspricht. Das auf IPX aufbauende Protokoll SPX (Sequenced Packet Exchange) realisiert analog zum TCP der TCP/IP-Protokollfamilie die gesicherte, verbindungsorientierte Kommunikation. Allerdings verwenden die Serverfunktionen von NetWare nur IPX, die Sicherungsfunktionen sind im NetWare Core Protocol (NCP) selbst unabhängig von SPX implementiert. Mit Hilfe des Service Advertising Protocol (SAP) ist es möglich, innerhalb eines IPX-Netzes angebotene Dienste zu finden.
Mit zunehmender Verbreitung des Internets ab Mitte der 1990er, der direkten Unterstützung von TCP/IP in Novell NetWare und dem sinkenden Marktanteil von NetWare verlor IPX/SPX gegenüber TCP/IP zunehmend an Bedeutung. Es wird heute nur noch selten eingesetzt. Microsoft stellte den Support ab Windows Vista ein, somit ist Windows XP das vorerst letzte Windows für Privatanwender mit IPX-Unterstützung. Ubuntu unterstützte IPX zuletzt in der Version 13.10. In Version 14.04 sollte das IPX-Paket zunächst noch installierbar sein, doch kurz vor dem Release wurde es entfernt und wird seitdem nicht mehr angeboten. Debian bot IPX zuletzt in der Version „Wheezy“ an, mangels Unterstützung wurde es ab Version „Jessie“ nicht mehr ausgeliefert. Netware (und damit der primäre Benutzer von IPX) wird seit März 2010 auch nicht mehr durch Novell unterstützt. Ebenso wurde seitens marktführender Netzwerkkomponentenhersteller die Unterstützung von IPX aus ihrer Router-Firmware mittlerweile entfernt.

## Das Protokoll im OSI-Modell

Das Protokoll im OSI-Modell (siehe im Vergleich dazu das TCP/IP-Referenzmodell, OSI-Modell):
| OSI-Schicht | OSI-Schicht | Englisch | Einordnung | TCP/IP-Schicht | Einordnung | IPX/SPX/NCP |
| 7 | Anwendung | Application | Anwendungs- orientiert | Anwendung | Ende zu Ende (Multihop) | NCP | – |
| 6 | Darstellung | Presentation | Anwendungs- orientiert | Anwendung | Ende zu Ende (Multihop) | NCP | – |
| 5 | Sitzung | Session | Anwendungs- orientiert | Anwendung | Ende zu Ende (Multihop) | NCP | – |
| 4 | Transport | Transport | Transport- orientiert | Host to Host | Ende zu Ende (Multihop) | NCP | SPX |
| 3 | Vermittlung | Network | Transport- orientiert | Internet | Punkt zu Punkt | IPX | IPX |
| 2 | Sicherung | Data Link | Transport- orientiert | Netzwerk | Punkt zu Punkt | Ethernet Token Ring FDDI ARCNET | Ethernet Token Ring FDDI ARCNET |
| 1 | Bitübertragung | Physical | Transport- orientiert | Netzwerk | Punkt zu Punkt | Ethernet Token Ring FDDI ARCNET | Ethernet Token Ring FDDI ARCNET |

## Adressierung

IPX wurde von Anfang an mit Bezug auf das ebenfalls bei Xerox entstandene Ethernet entwickelt. IPX verwendet binäre Adressen, bestehend aus einer 32 Bit langen Netzwerknummer, einer 48 Bit langen Hostadresse (der MAC-Adresse des Interfaces) und einer 16 Bit langen Socket-Nummer, die etwa der Portadresse in TCP oder UDP entspricht. IPX verfügt daher über einen wesentlich größeren Adressraum als IP Version 4, wo Netzwerk und Host zusammen in 32 Bit kodiert sind.

## Aufbau von Datenpaketen

Ein IPX-Paket besteht aus den 30 Byte großen IPX-Kopfdaten gefolgt von den Nutzdaten:
IPX Kopfdaten (Internetwork Packet Exchange) :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
| Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Checksum (Prüfsumme) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) | Packet Length (Paketlänge) |
| Transport Control (Transportkontrolle) | Transport Control (Transportkontrolle) | Transport Control (Transportkontrolle) | Transport Control (Transportkontrolle) | Transport Control (Transportkontrolle) | Transport Control (Transportkontrolle) | Transport Control (Transportkontrolle) | Transport Control (Transportkontrolle) | Type (Typ) | Type (Typ) | Type (Typ) | Type (Typ) | Type (Typ) | Type (Typ) | Type (Typ) | Type (Typ) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) |
| Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Network (Zielnetz) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) | Destination Node (Zielknoten) |
| Destination Node (Zielknoten) ||||||||||||||||||||||||||||||||
| Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Destination Socket (Zielsocket) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) |
| Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Network (Quellnetz) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) | Source Node (Quellknoten) |
| Source Node (Quellknoten) ||||||||||||||||||||||||||||||||
| Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Source Socket (Quellsocket) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) | Data (Daten) |
* Das 16 Bit lange Feld Prüfsumme wird immer auf 0xFFFF gesetzt, da Prüfsummen für IPX nicht unterstützt werden.
* Das 16 Bit lange Feld Paketlänge enthält die Gesamtgröße des Pakets (Kopf- und Nutzdaten).
* Die 8 Bit lange Zahl im Feld Transport Control ist der Hop-Zähler, der beim Durchlaufen eines Routers erhöht wird. Falls er irgendwann 16 erreicht, wird das Paket üblicherweise verworfen (Zweck siehe TTL).
* Das 8 Bit lange Feld Typ beschreibt das eingebettete Protokoll (encapsulated protocol):
| Typ | Inhalt des Datenbereiches |
| 0x00 | unbekannt („Rohdaten“) |
| 0x01 | RIP (Routing Information Packet) |
| 0x02 | Echo Packet |
| 0x03 | Error Packet |
| 0x04 | PEP (Packet Exchange Protocol) |
| 0x05 | SPX (Sequenced Packet Protocol) |
| 0x10 – 0x1F | Experimentelle Protokolle. |
| 0x11 | NCP (NetWare Core Protocol) |
| 0x12 – 0xFF | |
* Die Felder Source Network/Node/Socket und Destination Network/Node/Socket enthalten die entsprechenden Komponenten von Sender- bzw. Empfängeradresse, wobei folgende Socketnummern festgelegt sind:
| Socket | Funktion |
| 0x0000 | unbekannt |
| 0x0001 | RIP (Routing Information Packet) |
| 0x0002 | Error Handling Packet |
| 0x0020 – 0x003F | „Experimentell“ |
| 0x0001 – 0x0BB8 | „Xerox vorbehalten“ |
| 0x0BB9 | Dynamically Assigned. (dynamisch zugeordnet) |
| 0x0451 | NCP (NetWare Core Protocol) |
| 0x0452 | SAP (Service Advertising Protocol) |
| 0x0453 | RIP (Routing Information Protocol) |
| 0x0455 | NetBIOS |
| 0x0456 | Diagnostic |
| 0x0457 | Serialization |
| 0x8060 | IPX |
| 0x9091 | TCP über IPXF |
| 0x9092 | UDP über IPXF |
| 0x9093 | IPXF, IPX Fragmentation Protocol |
Der Datenbereich hat eine variable Länge. Da IPX-Pakete standardmäßig nicht fragmentiert werden, hängt die maximale Paketgröße vom Netzwerkmedium ab – bei Ethernet z. B. 1536 Bytes abzüglich der 30 Bytes des IPX-Kopfdatenbereiches selbst.

## Routing

Ein Netzwerkteilnehmer erzeugt seine eigene Adresse aus seiner MAC-Adresse und der vom Administrator konfigurierten Netzwerknummer. (In IPX ist im Gegensatz zu IP nicht vorgesehen, dass auf einem physischen Netzwerksegment mehrere Netzwerknummern nebeneinander verwendet werden).
Pakete innerhalb des eigenen Netzwerks (gleiche Netzwerknummer) werden direkt an die enthaltene MAC-Adresse zugestellt. Erkennt ein Teilnehmer eine Zieladresse in einem fremden Netzwerk, fragt er per RIP-Broadcast nach einem zuständigen Router, an dessen MAC-Adresse er das Paket dann schickt. Die erhaltenen Router-Adressen werden lokal zwischengespeichert. Router ihrerseits broadcasten in regelmäßigen Abständen (standardmäßig eine Minute) Listen der Netzwerknummern, die über sie erreicht werden können, wobei RIP-Pakete weiter entfernt liegender Router nicht einzeln weitergeleitet, sondern zusammengefasst werden.
RIP erzeugt laufenden Broadcast-Traffic und ist dadurch auf WAN-Strecken ineffizient und bei Wählverbindungen mit automatischem Verbindungsauf/abbau nur mit Mühe verwendbar. Es wurde daher durch ein Link-State Routing-Protokoll namens NLSP abgelöst, wobei aber die grundlegenden RIP-Funktionen zur Routersuche abwärtskompatibel blieben.

## Dienstesuche (Service advertising)

Analog zur Ermittlung von Router-Adressen mit RIP verwaltet SAP mit einer Kombination von regelmäßigen Broadcasts und Broadcast-Anfragen eine Liste im Netzwerk angebotener Services. Auch diese Listen werden an Routern zusammengefasst.