###   Projekte und Informationen rund um den KC85   ### 

DAS Werkzeug für jeden Netzwerkadministrator ist das obligatorische PING-Programm zur Überprüfung der IP-Funktionalität im Netzwerk. Nach zwei Überarbeitungen liegt der CP/M-Client leicht vor dem Windows-Pendant aber noch etwas hinter den Linux-Varianten.

Ein Anwender braucht es eigentlich nicht aber für die Diagnose von Nicht- oder Fehlfunktionen in einem TCPIP-Netzwerk ist das PING-Programm unverzichtbar. In einem grossen Netzwerk mit vielen Teilnehmern wird es schnell unübersichtlich, so dass man ein Werkzeug benötigt, mit dem man die Erreichbarkeit anderer Netzwerkteilnehmer überprüfen kann. Es gehört deshalb zur Grundausstattung jedes netzwerkfähigen Betriebssystems, welches per TCPIP kommunizieren kann. Da der KC85 nun auch dazugehört, brauchen wir das natürlich auch :-) .

Funktionsweise

Im Gegensatz zu anderen Netzwerkanwendungen gibt es durchaus einige Besonderheiten bei diesem kleinen Programm. Der wichtigste Unterschied zu anderen Netzwerk-Applikationen liegt darin, dass es nicht über den Transport-Layer des TCPIP-Stacks kommuniziert, sondern direkt den darunter liegenden IP-Layer benutzt:

 

TCPIP Protokoll-Stack


Der Socket des W5100 muss deshalb im sogenannten IPRAW-Mode betrieben werden und eine Portangabe wie bei UDP oder TCP ist auch nicht notwendig. Die IP-Adresse der Gegenstelle ist der einzige notwendige Parameter, um einen Peer "anzupingen". Grundlage des PING-Programmes ist das ICMP-Protokoll (Internet Control Message Protocol), welches 1981 in RFC 792 offiziell spezifiziert wurde.

Eine interessante Eigenschaft der ganzen Geschichte besteht zum Beispiel darin, dass man nicht nur die Funktion von Computern im Netzwerk überprüfen kann, sondern auch von anderen Teilnehmern, welche nicht unbedingt über einen voll ausgebauten TCPIP-Stack verfügen müssen. Da die ICMP-Kommunikation von IP- zu IP-Schicht erfolgt, lassen sich damit auch die Netzwerkrouter prüfen, welche in der Regel nur die beiden untersten Layer des TCPIP-Stacks implementiert haben, da sie für das reine Routing der Pakete zwischen 2 Netzwerken mit unterschiedlichen Adressen nicht mehr Funktionalität benötigen.

Die Funktionsweise und Geschichte kann man in der Wikipedia nachlesen. Grundsätzlich sendet das PING-Programm ein sogenanntes ICMP-„Echo-Request“-Paket an eine Zieladresse und wartet anschliessend eine bestimmte Zeit auf eine Antwort in Form eines ICMP „Echo-Reply“-Paketes.

Wenn keine Antwort eintrifft, heisst das nicht zwangsläufig, dass die Zieladresse nicht erreichbar wäre. Oft kann man den TCPIP-Stack bzw. die Firewall des Systems so konfigurieren, dass ICMP-Pakete ignoriert werden.

Nebenbei kann das Ping-Programm auch zur Überprüfung der Auflösung von Namen in IP-Adressen und zurück eingesetzt werden. Wird ein Domain-Name übergeben, lässt das Programm diesen durch eine DNS-Abfrage auflösen und liefert eine Fehlermeldung, wenn keine IP-Adresse ermittelt werden kann.

Falls eine IP-Adresse angegeben wurde, wird auch versucht, daraus einen Hostnamen aufzulösen. Im Gegensatz zu vielen anderen Systemen gibt PING.COM aber keine Meldung bei Fehlern aus. Der Ping lässt sich ja auch ohne Hostname auf die angegebene IP-Adresse durchführen.

 

Versionen

Der erste Versuch für ein PING-Programm erfolgte im März 2008 als Bestandteil von CPMNET.COM 1.3. Die grundsätzliche Funktion konnte auf Anhieb umgesetzt werden. Es gab allerdings noch keine DNS-Namensauflösung und der Datenbereich im ICMP-Paket musste immer eine gerade Anzahl an Datenbytes aufweisen, damit die Berechnung der IP-Prüfsumme richtig erfolgt.

Im Juni gab eine erste Überarbeitung in CPMNET.COM 1.4, DNS war zwar immer noch nicht möglich aber alle anderen Schwachstellen konnten beseitigt werden, so dass funktionell keine Einschränkungen mehr vorhanden waren.

Nach der Fertigstellung des DNS-Clients der KCNET-Software im Oktober 2008 fand die finale Version 1.1 in CPMNET.COM 1.5 ihren Platz und wurde schliesslich auch als eigenständiges PING.COM-Programm ausgelagert und zuende entwickelt. Neben den jetzt integrierten DNS-Abfragen wurde die gesamte Funktionalität in Anlehnung an die LINUX-Clients stark erweitert und per Optionsangabe in der CP/M-Kommandozeile zugängig gemacht.

Damit gibt es in der CP/M-Betriebsart des KC85 keine Unterschiede mehr zu MSDOS oder Linux in der Handhabung und Anwendung. Es erfüllt ganz genaus so wie in "richtigen" Betriebssystemen auch mit der 8-Bit-Technik seinen Zweck und kann gleichwertig die Funktion der IP-Kommunikation zwischen Netzwerk-Hosts prüfen und diagnostizieren.

 

PING.COM

Wie bei anderen CP/M-Programmen werden die Funktionsparameter in der Kommandozeile übergeben. Das Programm setzt ein korrekt konfiguriertes Netzwerk-Interface voraus, was beim Start auch überprüft wird. Wenn der KC nicht an das Netzwerk angeschlossen ist oder die Konfigurationsdaten fehlen, gibt es entsprechende Fehlermeldungen.

Die Hilfe des Programmes bekommt man nach PING -h zu Gesicht:

 

PING.COM Hilfe

 

Die möglichen Argumente setzen sich aus Schaltern, Parametern und der obligatorischen Zieladresse zusammen, wenn keine Angaben gemacht werden, zeigt das Programm seine Versionsinformationen an. Bevor die Argumente etwas näher beleuchtet werden, noch ein paar Bemerkungen zum Gebrauch des Programmes.

Wenn man Probleme mit der Erreichbarkeit anderer Teilnehmer im Netzwerk bzw. Internet hat. muss man systematisch vorgehen. Zuerst pingt man einen bekannten Host im eigenen Netzwerk an. Als nächstes kommt der Router/Gateway an die Reihe. Danach kann man versuchen, sich geografisch bis zum problematischen Zielhost immer weiter zu nähern, indem man beispielsweise in Deutschland verschiedene .de Domainadressen anpingt u.s.w.

Das Programm sendet standardmässig immer 4 Pakete an einen Host. Danach wird eine Gesamtstatistik ausgegeben, wo man Antwortzeiten, gesendete Pakete und Empfangsfehler ablesen kann. Eine laufende Ping-Sequenz kann mit ESC oder  CTRL+C vorzeitig beendet werden. Mit ENTER lässt sich jederzeit eine Zwischenstatistik abrufen, ohne den Gesamtvorgang zu unterbrechen.

 

Schalter:

Mit -h wird die Hilfe und mit -v die Programmversion angezeigt, anschliessend beendet sich das Programm selbst ohne weitere Aktivitäten. Mit -a wird die akkustische Bestätigung (Tonausgabe des Betriebssystems) für den Empfang eines korrekten ICMP „Echo-Reply“-Paketes eingeschaltet. Mit -q kann man die Konsolenausgabe nach dem Empfang eines Antwortpaketes unterdrücken, dann werden nur noch die Meldungen beim Start und die Zusammenfassung am Ende des Pings ausgegeben. Der Schalter -n schaltet die Rückwärtsauflösung von IP-Adressen in Domain-Namen aus.

 

Parameter:

-c:count Hier kann man die Anzahl der Ping-Pakete einstellen, welche bei einem Vorgang gesendet werden sollen. Standard ist 4, möglich sind 1...99 oder 0 für einen Dauerping, welcher dann vom Anwender abgebrochen werden muss.
-i:interval Das ist die Zeitangabe für das Sendeintervall der ausgehenden Ping-Pakete in Millisekunden. Standard ist 1.000 ms, möglich sind 0...30.000 ms.
-p:pattern Normalerweise wird der Datenbereich eines ausgehenden Ping-Paketes mit den ASCII-Codes der Kleinbuchstaben a-z gefüllt. Mit -p kann man bis zu 16 beliebige hexadezimale Füllbytes definieren, welche dann stattdessen verwendet werden. Das kann man für die Diagnose von datenabhängigen Problemen im Netzwerk benutzen. Mit -p:FF wird beispielsweise der Datenbereich komplett mit 1 Bits aufgefüllt.
-s:packetsize -s definiert die Anzahl der zu sendenden Datenbytes und bestimmt damit die Grösse der Ping-Pakete. Der Default-Wert ist 56, was zusammen mit dem ICMP-Header eine IP-Paketgrösse von 64 Bytes ergibt. Zulässige Werte liegen zwischen 0 und 1.466 Bytes, was dann Ping-Pakete mit 8 bis maximal 1.474 Bytes Länge ergibt.
-t:ttl Mit -t wird der Wert für die sogenannte TTL ("time to live") der ausgehenden IP-Pakete festgelegt, welcher zwischen 0 und 255 liegen darf, Standard ist 128. Auf die TTL wird weiter unten noch etwas näher eingegangen.
-u:tos Im Header jedes IP-Paketes gibt es ein TOS-Feld ("type of service"), welches mit -u gesetzt werden kann, Standardbelegung ist 0. Durch das Setzen bestimmter Bits in diesem Feld soll sich die Güte des Dienstes für die Übertragung der IP-Pakete im Netzwerk einstellen lasssen, indem Einfluss auf ihre Verzögerung, ihren Durchsatz und die Zuverlässigkeit der Übertragung genommen wird. Praktisch hat dieser Parameter keine Bedeutung, da der Inhalt nur in seltenen Fällen ausgewertet wird.
-w:timeout Der Parameter -w legt die Wartezeit in Sekunden fest, welche das Programm nach der Absendung eines Paketes auf eine Antwort wartet. Der Standardwert beträgt 5 s, zulässig sind Werte von 1...30 s.

 

Beschädigte Antwort-Pakete:

Jedes Ping-Paket enthält eine Prüfsumme, damit der Empfänger den Inhalt nach Empfang auf Fehler überprüfen kann. Stimmt die berechnete Prüfsumme nicht mit der Paketprüfsumme überein, meldet das Ping-Programm beschädigte Antwort-Pakete ("CHECKSUM ERROR"). Solche Meldungen sind deutliche Alarmzeichen und weisen fast immer auf beschädigte Hardware im Netzwerk oder in den Teilnehmern selbst hin. Man sollte dann alle Kabel, Steckverbindungen, Netzwerkkarten u.s.w. überprüfen, um die Ursache zu finden und zu beseitigen.


Nutzung des "pattern"-Parameters:

Normalerweise sollten alle Pakete im Netzwerk unabhängig von ihrem Inhalt übertragen werden. Es kann in ganz seltenen Fällen aber trotzdem Probleme bei der Übertragung bestimmter Datenmuster geben. Prädistiniert sind beispielsweise Muster, welche keine oder sehr wenige elektrische Pegelwechsel im physischen Layer des Netzwerkes hervorrufen (Ethernet). Solche Probleme bleiben oft über sehr lange Zeit unentdeckt, da Übertragungsfehler meist von den Netzwerkprotokollen durch Sendungswiederholung kompensiert werden, natürlich zu Lasten der Performance.

Um solche Probleme überhaupt aufspüren zu können, lässt sich mit der Option -p gezielt der Inhalt des Datenbereiches von Ping-Paketen mit solchen Datenmustern füllen, z.B. komplett mit 0- bzw. 1-Bits. Es ist aber trotzdem sehr mühsam, die Ursache von vermutlich datenabhängigen Übertragungsfehlern sicher zu diagnostizieren, da die eingegebenen Datenmuster der Kommandozeile nicht 1:1 auf stattfindende Pegelwechsel des physischen Layers übertragbar sind. 

Das heisst, dass in einer derartigen Situation ein sehr grosser Testaufwand notwendig ist, um solche datenabhängigen Probleme zu finden und zu beseitigen. Wenn man Glück hat, findet man eine Datei, welche überhaupt nicht bzw. wesentlich länger bei einer Übertragung im Netzwerk benötigt, als andere Dateien mit ähnlicher Länge. Diese Datei kann man nach sich wiederholenden Datenmustern durchsuchen, welche anschliessend per Option -p mit dem Ping-Befehl gezielt getestet werden können.

 

TTL Details:

Der Wert des TTL-Feldes eines IP-Paketes legt die maximale Anzahl von IP-Routern fest, welche das Paket passieren kann. Damit wird die Lebensdauer des Paketes im Netzwerk festgelegt. Hat dieses Feld den Wert null, so wird das Paket vom Router verworfen und nicht mehr weitergeleitet.

Jeder Router auf dem Weg des Paketes verringert diesen Wert um eins. Das soll verhindern, dass Pakete unbegrenzt oft weitergeleitet werden, was beispielsweise zu einer Überlastung des Netzwerkes führen kann, wenn das Paket fälschlicherweise im Kreis geleitet wird.

Im Gegensatz zur ursprünglichen RFC-Definition wird der TTL-Wert heute als maximaler Weiterleitungszähler interpretiert. Der Router, welcher die TTL vor einer Weiterleitung auf 0 herunterzählt, verwirft das ICMP-Paket und sendet an den ursprünglichen Absender eine sogenannte ICMP-"Time Exceeded"-Nachricht, um ihn über dieses Ereignis zu informieren.

 

Zieladresse:

Alle Schalter und bisher genannten Parameter sind optional und der überwiegende Teil der Ping-Anwender wird sie auch selten oder nie benötigen. Das Ping-Programm kann mit den eingebauten Standardwerten in nahezu allen Fällen seine Hauptaufgabe problemlos erfüllen.

Die einzige Pflichtangabe in der Kommandozeile ist die Zieladresse des zu überprüfenden Netzwerk-Hosts. Der Empfänger muss, sofern er das Protokoll unterstützt, laut Spezifikation eine Antwort in Form eines ICMP-„Echo-Reply“-Paketes zurücksenden. Ist der Zielrechner nicht erreichbar, antwortet der zuständige Router mit "DESTINATION HOST UNREACHABLE" (Gegenstelle nicht erreichbar).

PING.COM nimmt als Zieladresse Hostnamen in "Fully Qualified Domain Name"-Schreibweise (siehe Wikipedia) entgegen, ermittelt per Abfrage des DNS-Servers im Netzwerk die zugehörige IP-Adresse und beginnt damit anschliessend seine Arbeit, wie im folgenden Bild zu sehen ist:

 

PING Internet-Adresse

 

Die zweite Variante für die Übergabe der Zieladresse besteht in der direkten Übergabe einer IP-Adresse. Dann versucht PING.COM den zugehörigen Hostnamen ebenfalls durch Abfrage des DNS-Servers zu ermitteln. Wenn diese Abfrage erfolgreich war, gibt das Programm beide Angaben auch auf dem Bildschirm in der Form HOSTNAME=IP-Adresse aus, wenn die Abfrage fehlschlägt, wird nur die IP-Adresse ausgegeben. Der obere Teil der folgenden Abbildung zeigt einen erfolgreichen Ping im lokalen Netzwerk mit einer funktionierenden Namensauflösung:

 

PING IP-Adressen mit reverse DNS Lookup im Netzwerk

 

In der unteren Hälfte der Abbildung versucht der KC85 sich selbst anzupingen. Da unser TCPIP-Stack kein Loopback-Interface besitzt, hat das immer eine Fehlermeldung zur Folge. Das Beispiel ist aber trotzdem ganz interessant - der zugehörige Hostname des KC85 im Netzwerk wird vom lokalen DNS-Server vollkommen unabhängig vom Ping trotzdem richtig aufgelöst, erst beim eigentlichen Programm erfolgt die Fehlermeldung.

PING.COM für den KC85 mit einer kurzen Beschreibung und die CP/M-Quelltexte sind Bestandteile des KCNET-Paketes und befinden sich komplett im Downloadbereich.