X.25 und XOT Programmierung über die Sockets API

Switched Virtual Circuits

Das Schreiben eines Programms zur Handhabung eines X.25 SVC (Switched Virtual Circuit) oder PVC (Permanent Virtual Circuit) über Sockets ist sehr ähnlich dem Schreiben eines Programms zur Verwendung von TCP/IP. Meistens werden genau die gleichen Operationen verwendet, aber mit einigen unterschiedlichen Parametern.

Typical Server

Ein typischer Server beginnt damit, einen Listening Socket zu erstellen, sich an eine Adresse zu binden und dann auf eingehende Verbindungen zu warten. Dann werden die einzelnen Verbindungen akzeptiert und automatisch ein neuer Socket erstellt, auf dem diese Verbindung abgewickelt wird. Ein Socket-basierter X.25 oder XOT-Server ist genau der gleiche - die Hauptunterschiede zu TCP/IP sind:

  • die Parameter zum Aufruf von socket() beim Erstellen des Sockets - z.B. AF_X25 statt AF_INET für die Adressfamilie
  • das Format der Sockaddr-Struktur, in der die Adresse im Aufruf von bind() angegeben ist.
  • Datentransfer (siehe unten)
  • Verbindungsabschluss (siehe unten)

Typischer Client

Ein typischer Client erstellt einen Socket für die Verbindung und ist dann bereit für die Verbindung. Ein Socket-basierter X.25 oder XOT-Client ist gleich - die Netzunterschiede zu TCP/IP sind gleich:

  • die Parameter zum Aufruf von socket() beim Erstellen des Sockets - z.B. AF_X25 statt AF_INET für die Adressfamilie
  • das Format der Sockaddrestruktur, in dem die Adresse im Aufruf von connect() angegeben ist.
  • Anrufparameter - Anlagen und Anruf-Benutzerdaten, für die es kein TCP/IP-Äquivalent gibt.
  • Datentransfer (siehe unten)
  • Verbindungsabschluss (siehe unten)
  • Datentransfer (siehe unten)
  • Verbindungsabschluss (siehe unten)

Wenn die Angabe einer lokalen (d.h. anrufenden) Adresse gewünscht wird, muss außerdem eine ioctl() oder Sockets-Option verwendet werden, um die Adresse einzustellen - obwohl dies auch mit bind() möglich ist, wird empfohlen, Sockets nicht zu binden, bevor connect() verwendet wird.

Data Transfer

X.25 oder XOT Datentransfer ist das gleiche wie bei TCP/IP, nur dass TCP-Daten ein einfacher Zeichenstrom sind, während X.25 Paketgrenzen beibehalten werden.

Wenn also 2 Blöcke mit je 2000 Bytes übertragen werden, erhält ein X.25-Empfänger zwei Blöcke mit je 2000 Bytes, während ein TCP-Empfänger die Daten aufgeteilt oder zusammengefügt finden kann.

Es ist mit X.25 möglich, einen Block von Nullbytes zu übertragen, was mit TCP unmöglich wäre (obwohl es möglich ist, leere TCP-Pakete zu übertragen - diese werden für Keep-Alive verwendet). Einige Socket-APIs unterstützen dies jedoch möglicherweise nicht, da das Empfangen von 0 Bytes normalerweise so interpretiert wird, dass die Verbindung geschlossen wurde. Es wird daher empfohlen, die Übertragung von 0-Byte-Blöcken zu vermeiden.

Tatsächlich gibt es nur sehr wenige praktische Anwendungen für die Verwendung von 0-Byte-Blöcken mit X.25 - es gibt keine normale Notwendigkeit für Keep-Alive-Meldungen, da ein Verbindungsabbruch erkannt werden kann, ohne etwas übertragen zu müssen (siehe unten).

Aus diesem Grund ist es in der Regel am besten für eine Anwendung, den Empfang eines 0-langen Blocks als Fehler zu behandeln und den Sockel zu schließen (und damit die virtuelle Verbindung zu löschen).

Connection Closure

Mit TCP erhalten Sie normalerweise nur einen Hinweis darauf, dass eine Verbindung abgebrochen wurde (im Gegensatz zu einem absichtlichen Schließen durch den Peer), wenn Sie versuchen, Daten zu senden. Das liegt an der verbindungslosen Natur von IP - es gibt keine Möglichkeit zu wissen, dass eine Verbindung aktiv bleibt, außer durch Senden von Daten. (Es gibt einige Ausnahmen - der Microsoft TCP/IP-Stack in Verbindung mit Dial-Up Networking führt dazu, dass Verbindungen geschlossen werden, wenn eine Dial-Up-Verbindung ausfällt.)

X.25 und XOT hingegen bieten eine sofortige (oder zumindest sofortige, sobald der Fehler erkannt wurde) Benachrichtigung über den Verbindungsabbruch, auch wenn die Verbindung im Leerlauf ist - das liegt daran, dass das X.25-Netzwerkprotokoll verbindungsorientiert ist und jeder Fehler innerhalb des Netzwerks dazu führt, dass alle von der fehlerhaften Verbindung getragenen virtuellen Verbindungen gelöscht werden.

Permanent Virtual Circuits

Die Verwendung eines PVC ist wie die Herstellung einer Client-Verbindung - der Hauptunterschied zu SVCs ist:

  • die Adresse - anstatt eine X.25 DTE-Adresse anzugeben, wird die logische Kanalnummer verwendet. Wenn mehrere X.25-Verbindungen konfiguriert sind, ist es außerdem erforderlich, die X.25-Verbindung auszuwählen.
  • es ist notwendig, X.25 Resets zu behandeln - dies geschieht über Erweiterungen der normalen Sockets-API (und die FarSync-API unterscheidet sich unter Windows von Linux).

Am besten ist es, ein PVC beim Anbringen zurückzusetzen - dies kann automatisch von der FarSync X.25 Windows Sockets Schicht durch Angabe einer Socket-Option erfolgen. In diesem Fall wird der connect()-Betrieb erst abgeschlossen, wenn eine Antwort auf den resultierenden Reset-Request empfangen wurde.

Unter Linux müsste jedoch unter den gleichen Umständen ein Reset Request explizit übermittelt werden.

Die Datenübertragung auf einem PVC ist ansonsten ähnlich wie die Datenübertragung auf einem SVC. Eine Anwendung muss in der Lage sein, mit der Situation fertig zu werden, in der die entfernte Anwendung nicht mehr antwortet - in diesem Fall können übertragene Pakete dazu führen, dass sich das Fenster füllt, was zur Blockierung weiterer Sendeaufträge führt. Unter diesen Umständen wäre das Einzige, was getan werden kann, das PVC zurückzusetzen und es erneut zu versuchen, aber natürlich, wenn die entfernte Anwendung immer noch nicht reagiert, wird sich die gleiche Situation wiederholen.

Die Datenübertragung auf einem PVC ist ansonsten vergleichbar mit der vom Datentransfer auf einem SVC. Eine Anwendung muss in der Lage sein, mit der Situation fertig zu werden, in der die entfernte Anwendung nicht mehr antwortet - in diesem Fall können übertragene Pakete dazu führen, dass sich das Fenster füllt, was zur Blockierung weiterer Sendeaufträge führt. Unter diesen Umständen wäre das Einzige, was getan werden kann, das PVC zurückzusetzen und es erneut zu versuchen, aber natürlich, wenn die entfernte Anwendung immer noch nicht reagiert, wird sich die gleiche Situation wiederholen.


© Farsite Communication Ltd.

Daten letzmalig aktualisiert am 20.10.2018

Interessiert an mehr Information? Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!