Mittwoch, 28. September 2011

Die Vermittlungsschicht

Die Vermittlungsschicht

Der Schritt zur räumlichen Datenübertragung wird erst ab der Vermittlungsschicht vollzogen. In den seltensten Fällen wollen wir in einem Netzwerk tatsächlich nur mit unserem physischen Nachbarrechner kommunizieren. Häufig weiß man nicht, wo der Kommunikationspartner, auf dem unsere Nachricht landen wird oder von dem wir unsere Daten beziehen, überhaupt lokalisiert ist. Wie findet das Datenpaket seinen Weg zum eigentlichen Bestimmungsort?
Das Datenpaket wird auf seinem Weg womöglich durch viele verschiedene Teilnetze hindurchgeleitet. Diese Netze werden teilweise von Anderen administriert, es ist schwer abzuschätzen, ob es gerade Sinn macht, das eine oder das andere Teilnetz zu bevorzugen, weil dort vielleicht gerade weniger Verkehr ist. Probleme dieser Art, die man unter dem Stichwort Routing zusammenfassen kann, werden in der Vermittlungsschicht (engl. Network Layer) gelöst.
Beim Durchqueren von fremden Teilnetzen können vielerlei Aufgaben und Probleme entstehen. Ein wichtiger Faktor ist sicher das Finden der richtigen Route in Fällen, in denen die Route dynamisch ermittelt wird. Bei Datenübertragungen über das Internet ist dies eher die Regel als die Ausnahme. Man kann davon ausgehen, dass beispielsweise im Verlaufe eines Downloads ein Teil der übertragenen Daten eine ganz andere Route genommen hat als ein anderer Teil. Die Wahl der Route obliegt sogenannten Routern, die man sich - einfach gesagt - wie Lotsen zwischen den unzähligen Teilnetzen vorstellen kann. Heute sind die meisten Router im Privatbereich Linux-Rechner (Fritz-Box), die eine Vielzahl weiterer Aufgaben übernehmen.


Im Netzwerkbereich dient Ethernet als Bitübertragungs- und Sicherungsschicht, während über das IP-Protokoll die Vermittlung sichergestellt wird.



Dienstag, 13. September 2011

Die Sicherungsschicht

Die Sicherungsschicht

Während Schicht 1 lediglich die Bits kennt, werden die Daten in der Sicherungsschicht (engl. Data-Link Layer) zu sogenannten Frames (Datenrahmen) zusammengefasst. Dabei steht jeweils eine bestimmte Bitfolge für den Beginn eines Frames, eine andere für dessen Ende. Innerhalb eines Frames können weitere Steuerinformationen abgelegt werden.
Ein Frame umfasst typischerweise einige hundert bis einige tausend Bytes. Auf das Senden eines Frames folgt die Bestätigung des Empfängers durch einen Bestätigungsrahmen (Acknowledgement Frame), welcher den korrekten Empfang eines Datenrahmens quittiert. Sowohl beim Senden eines Frames als auch beim Senden der Bestätigung kann es zu Fehlern kommen. Es kann auch geschehen, dass der Empfänger vom Sender (oder von mehreren Sendern) mit Daten überflutet wird, so dass er die Menge der gesendeten Pakete nicht mehr ordnungsgemäß empfangen und quittieren kann. Auch diesem Problem, bekannt unter dem Stichwort Flusskontrolle, wird bereits auf der Sicherungschicht begegnet.
Im Vergleich mit der unstrukturierten Bitübertragungsschicht ist damit bereits ein erhebliches Maß an Übertragungssicherheit gegeben, das übrigens häufig auch von erfahrenen Administratoren und Entwicklern unterschätzt wird. Der Grund für diese Unterschätzung ist vermutlich darin zu suchen, dass auch in höheren Schichten häufig noch Sicherheitsmechanismen verwendet werden, was der Sicherungsschicht in gewisser Weise das Misstrauen ausspricht. 


Beispiele für Sicherungsverfahren:


CRC (Cyclic Redundancy Check)



Für jeden Datenblock wird nach einem bestimmten Verfahren ein sogenannter CRC-Wert berechnet, der an den Datenblock angefügt wird. Der Empfänger wendet dasselbe Berechnungsverfahren auf Datenblock einschließlich des angefügten CRC-Werts an.

Ist das Ergebnis Null, kann angenommen werden, dass der Datenblock unverfälscht ist.
CRC ist so ausgelegt, dass Fehler bei der Übertragung der Daten, wie sie beispielsweise durch Rauschen auf der Leitung verursacht werden könnten, mit hoher Wahrscheinlichkeit entdeckt werden. CRCs von seriellen Datenübertragungen können sehr einfach in Hardware realisiert werden. Zum Beispiel werden Datenübertragungen über Ethernet, sowie die meisten Festplatten-Übertragungen  (ATA, SATA)  mit CRC-Verfahren geprüft.
Das CRC-Verfahren ist nur für die Erkennung von zufälligen Fehlern ausgelegt. Es ist nicht geeignet, die Integrität der Daten zu bestätigen. Das heißt, es ist verhältnismäßig leicht, durch beabsichtigte Modifikation einen Datenstrom zu erzeugen, der den gleichen CRC-Wert wie eine gegebene Nachricht hat. Wenn eine solche Sicherheit gefordert ist, müssen kryptografische Hash-Verfahren wie beispielsweise SHA zum Einsatz kommen.
Der Name des Verfahrens beruht darauf, dass der angefügte Wert keinen Informationsgehalt besitzt, der nicht bereits in dem zugrunde liegenden Datenblock enthalten ist. Er ist deshalb redundant.


Wie funktioniert CRC?

Die Berechnung des CRC-Werts beruht auf Polynomdivision: Die Folge der zu übertragenden Bits wird als Polynom betrachtet.

Beispiel: Die Bitfolge 1,0,0,1,1,1,0,1 entspricht dem Polynom


Die Bitfolge der Coderepräsentation der Daten wird durch ein vorher festzulegendes Generatorpolynom (das CRC-Polynom) Modulo mod(2) geteilt, wobei ein Rest bleibt. Dieser Rest ist der CRC-Wert. Bei der Übertragung des Datenblocks hängt man den CRC-Wert an den originalen Datenblock an und überträgt ihn mit.
Um zu verifizieren, dass die Daten keinen Fehler beinhalten, wird der empfangene Datenblock mit angehängtem CRC-Wert als Binärfolge interpretiert, erneut durch das CRC-Polynom Modulo geteilt und der Rest ermittelt. Wenn kein Rest bleibt, ist entweder kein Fehler aufgetreten oder es ist ein (sehr unwahrscheinlicher) Fehler aufgetreten, der in Polynomdarstellung das CRC-Polynom als Faktor hat.
Zwischen Sender und Empfänger muss dasselbe CRC-Polynom und Rechenverfahren benutzt werden. Zusätzlich muss vereinbart werden, wo im Datenstrom sich die zusätzlich zu den Daten übertragene Prüfsumme befindet.

Beispiel:

Es folgt ein Beispiel, in dem für einen Binärcode von 5 Bit der CRC berechnet und überprüft werden soll.

Das Generatorpolynom (CRC-Polynom) lautet 110101 (1x5 + 1x4 + 0x3 + 1x2 + 0x1+ 1x0) und ist somit 5. Grades. Der zu übertragenden Bitfolge, welche auch als Rahmen (engl. frame) bezeichnet wird, werden n Nullen angehängt (Rahmen mit Anhang), wobei n demGrad des Generatorpolynoms entspricht (bzw. der Anzahl der Bits des Generatorpolynoms minus eins).
Generatorpolynom:
110101
Rahmen:
11011   (Nutzdaten)
Rahmen mit Anhang:
1101100000   (das Generatorpolynom hat r Stellen, also werden r − 1 = n Nullen ergänzt; hier ist r = 6)
Nun wird der Rahmen mit Anhang von links her durch das Generatorpolynom dividiert. Dabei wird die XOR-Funktion verwendet. Wenn man dies im ersten Schritt anwendet, wird aus 110110 XOR 110101 die Zahl 000011 (wobei gilt:   1 XOR 1 = 0;   1 XOR 0 = 1;   0 XOR 1 = 1; 0 XOR 0 = 0). Es folgt das vollständige Beispiel:

↓  immer mit der ersten gemeinsamen 1 anfangen
1101100000
110101 
------
0000110000
        110101
           ------
              101 (Rest)
An den Rahmen ohne Anhang wird nun der Rest angehängt. Dieser muss ebenfalls aus n Bit bestehen (wobei n wiederum dem Grad des Generatorpolynoms entspricht). Damit hängen wir nun '00101' an den Rahmen an.
Übertragener Rahmen: 1101100101
Diese Nachricht kann jetzt beispielsweise über ein Netzwerk übertragen werden. Wenn die Nachricht beim Empfänger eintrifft, kann dieser überprüfen, ob sie korrekt angekommen ist.
Mittels Division durch das Generatorpolynom kann jetzt die fehlerhafte Übertragung erkannt werden:
Korrekte Übertragung der Nachricht:
1101100101
Das Generatorpolynom (wie oben):
110101
 1101100101
 110101
 ------
         110101
         110101
          ------
         000000
Der Rest der Division ist gleich null. Es ist also kein Fehler aufgetreten.

Fehlerhaft übertragene Nachricht (Beispiel):
1001100101
Das Generatorpolynom (wie oben):
110101
 1001100101
 110101
 ------
   100110
   110101
      ------
     100111
     110101
     ------
       100100
       110101
       ------
         100011
         110101
         ------
           10110
Der Rest der Division (10110) ist ungleich null. Also ist ein Fehler aufgetreten. Bei der Überprüfung auf Richtigkeit können folgende vier Fälle auftreten:
1.     Der Rest der Division ist null und die Nachricht ist richtig
2.     Der Rest der Division ist null und die Nachricht ist fehlerhaft (dieser Fall ist unwahrscheinlich, kann aber vorkommen, wenn das Fehlerpolynom ein Vielfaches des Generatorpolynoms ist oder wenn der Fehler im Datenteil und im CRC-Wert ist)
3.     Der Rest der Division ist ungleich null und die Nachricht ist fehlerhaft
4.     Der Rest der Division ist ungleich null und die Nachricht ist richtig (dieser Fall tritt ein, wenn lediglich der angehängte Rest fehlerhaft übertragen wird; dies ist jedoch ebenfalls unwahrscheinlich, da der übertragene Rest im Vergleich zur Gesamtlänge des Pakets kurz ist)

Verschiedene CRC-Verfahren
Name
Polynom
Länge
MHD
Anmerkungen
CRC-CCITT (CRC-4)
x4 + x + 1
15

Identisch mit dem (15,11)-Hamming-Code
USB (CRC-5)
x5 + x2 + 1
31

Identisch mit dem (31,26)-Hamming-Code
Bluetooth
x5 + x4 + x2 + 1 = (x + 1)(x4 + x + 1)
15

Verkürzter (15,10)-Hamming-Code.
SD/MMC-Card (CRC-7)
x7 + x3 + 1
127
3
Identisch mit dem (127,120)-Hamming-Code
CRC-8 (Dallas/Maxim 1-Wire Bus)
x8 + x5 + x4 + 1 = (x + 1)(x7 + x6 + x5 + x3 + x2 + x + 1)
127
4
Beschrieben bei Dallas/Maxim
CRC-8 (ITU-T)
x8 + x2 + x + 1
127
4
ISDN Header Error Control
CRC-8 (SAE-J1850)
x8 + x4 + x3 + x2 + 1
255
3
Verwendet bei AES/EBU
CRC-12
x12 + x11 + x3 + x2 + x1 + 1



CAN-CRC
x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1 = (x + 1)(x7 + x3 + 1)(x7 + x3 + x2 + x + 1)
127
6

CRC-CCITT (CRC-16)
x16 + x12 + x5 + 1
32767
4
Verwendet bei HDLC, X.25
CRC-XModem (CRC-XModem)
x16 + x12 + x5 + 1
32767
4
Identisch mit CRC-CCITT
IBM-CRC-16
x16 + x15 + x2 + 1
32767
4

CRC-DNP (CRC-16)
x16 + x13 + x12 + x11 + x10 + x8 + x6 + x5 + x2 + 1



CRC-16 VÖV 04.05.1
x16 + x14 + x13 + x11 + x10 + x9 + x8 + x6 + x5 + x1 + 1



CRC-24 (IETF RFC2440)
x24 + x23 + x18 + x17 + x14 + x11 + x10 + x7 + x6 + x5 + x4 + x3 + x + 1



CRC-24 (Mode-S)
x24 + x23 + x22 + x21 + x20 + x19 + x18 + x17 + x16 + x15 + x14 + x13 + x12 + x10 + x3 + 1


Bei Framelänge bis 112 Bits fehlerkorrigierend bis 5 Bit
CRC-32 (IEEE802.3)
x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1
232 − 1
3
Verwendet bei Ethernet
CRC-64 (ISO 3309)
x64 + x4 + x3 + x + 1






In Visual Basic sieht eine Lösung für die Prüfung mit CRC 32 übersichtlich aus:


Public Function CRC32(Str As String) As Long

  Dim i As Long
  Dim j As Long
  Dim nPowers(0 To 7) As Integer
  Dim nCRC As Long
  Dim nByte As Integer
  Dim nBit As Boolean
  
  For i = 0 To 7

     nPowers(i) = 2 ^ i

  Next 'i
  
For i = 1 To Len(Str)   
nByte = Asc(Mid$(Str, i, 1))
    For j = 7 To 0 Step -1
      nBit = CBool((nCRC And 32768) = 32768) Xor _
       ((nByte And nPowers(j)) = nPowers(j))
      nCRC = (nCRC And 32767&) * 2&
      If nBit Then
        nCRC = nCRC Xor &H8005&
      End If
    Next 'j
  Next 'i
  CRC32 = nCRC
End Function


Die Funktion wird einfach in die Telegrammbearbeitung eingebunden, die Fehlerbehandlung muss dann noch zusätzlich programmiert werden.


Die Polynom­division lässt sich, nach dem im obigen Beispiel verwendeten normalen Divisions­verfahren, überraschend einfach in Hardware realisieren.
In Bild 1 dargestellt ist ein Schiebe­register, in das von rechts das zu dividierende Polynom h hinein geschoben wird. Wenn eine 1 in der vordersten Schiebe­register­zelle erscheint, wird das Generator­polynom (im ersten Bild das Polynom 1 0 0 1 1 1) mit dieser 1 multipliziert (Und-Gatter) und an der entsprechenden Position von dem zu dividierenden Polynom h subtrahiert (Xor-Gatter). Der verbleibende Rest zusammen mit der nächst­folgenden Stelle von h wird anschließend um eine Position nach links geschoben. Wenn in der vordersten Schiebe­register­zelle eine 0 erscheint, wird das 0-fache des Generator­polynoms subtrahiert, d.h. es geschieht nichts, außer dass der Schiebe­register­inhalt geschoben wird.
Es ist leicht zu sehen, dass durch diese Hardware genau das o.a. Divisions­verfahren realisiert wird. Wenn das zu dividierende Polynom h zu Ende ist, d.h. keine Stellen mehr in das Schiebe­register eingegeben werden, steht im Schiebe­register der Divisionsrest.
Die Schaltung kann sowohl zur Codierung als auch zur Fehler­erkennung verwendet werden. Zur Fehler­erkennung wird durch eine Oder-Schaltung überprüft, ob der Divisionsrest gleich Null oder ungleich Null ist. Zur Codierung wird der Divisionsrest an die Nachricht angehängt. Vor Beginn einer Division muss das Schiebe­register gelöscht werden.




Schaltung zur Polynom­division




vereinfachte Schaltung

Die Schaltung von kann vereinfacht werden, wenn das Generator­polynom festliegt. Dann können alle Und-Gatter mit einer 1 am Eingang durch eine einfache Draht­verbindung ersetzt werden. Alle Und-Gatter mit einer 0 am Eingang liefern am Ausgang konstant 0 und können daher wegfallen; die entsprechenden Xor-Gatter mit dieser 0 am Eingang können durch Draht­verbindungen ersetzt werden. Das vorderste Xor-Gatter kann ebenfalls entfallen, da sein Ausgang nicht verwendet wird (er ist im übrigen immer 0).
Das zweite Bild zeigt die vereinfachte Schaltung, ein rückgekoppeltes Schiebe­register (Linear Feed-Back Shift Register  LFSR), für das Generator­polynom 1 0 0 1 1 1.




Busmechanismen auf der Sicherungsschicht


Werden mehrere Teilnehmer an einer Übertragungsphysik (an einer Busleitung) eingesetzt, muss auf Schicht 2 auch ein Verfahren realisiert werden, um zu verhindern, dass mehrere Teilnehmer gleichzeitig Signale auf die Leitung geben, das Buszugriffsverfahren.
Hier wird unterschieden zwischen deterministischen Verfahren, d.h. Verfahren mit maximalen Übertragungszeiträumen z.B. für Steuerungsaufgaben und nichtdeterministischen Verfahren, bei denen keine maximale Reaktionszeit definiert werden kann.
Deterministische Verfahren sind das Master/Slave- und das Tokenbus- oder Tokenringverfahren, nichtdeterministisch CSMA/CD bei Ethernet oder CSMA/CA beim CAN-Bus.


In der Automatisierungstechnik werden primär deterministische Verfahren eingesetzt, da bei steuerungs- und sicherheitstechnischen Aufgaben die Reaktionszeit bei Anforderung einer Funktion definiert sein muss.

Beispiel ist hier eine Abschaltfunktion in einer Endschalteranlage auf einem Fördergerät. Hier spielt die Reaktionszeit eine große Rolle.


Master-Slave

Ein Teilnehmer ist der Master, alle anderen sind die Slaves. Der Master hat als einziger das Recht, unaufgefordert auf die gemeinsame Ressource zuzugreifen. Der Slave kann von sich aus nicht auf die gemeinsame Ressource zugreifen; er muss warten, bis er vom Master gefragt wird.
Hauptvorteil ist, dass der Master die Zugriffsverhältnisse beherrscht: um ihn wird das System aufgebaut, was die Planung einfach macht.
Master-Slave-Architekturen können auch mit dem TokenBus kombiniert werden, wobei dann nur die Master den Token weiter geben.
Ein großer Nachteil ist, dass die Kommunikation zwischen Slaves nicht möglich ist. Weiterhin ist das Abfragen (Polling) der Slaves durch den Master ineffizient. Dies bedingt eine hohe Übertragungsgeschwindigkeit, um akzeptable Übertragungszeiten zu erreichen.




Sicherungsschicht beim Profibus


PROFIBUS Protokolle (OSI-Modell)
OSI-Schicht
Englisch
PROFIBUS
7
Anwendung
Application

DPV0
DPV1
DPV2

Management
6
Darstellung
Presentation
--
5
Sitzung
Session
4
Transport
Transport
3
Netzwerk
Network
2
Sicherung
Data Link
FDL
1
Bitübertragung
Physical
EIA-485
Optisch
MBP




Sicherungsschicht bei Profibus

Die Sicherungsschicht FDL (Fieldbus Data Link) arbeitet mit einem hybriden Zugriffsverfahren, das Token-Passing mit einem Master-Slave-Verfahren kombiniert. In einem PROFIBUS-Netzwerk sind die Steuerungen oder Prozessleitsysteme die Master und die Sensoren und Aktoren die Slaves.


DP-Anwendungsschicht 

Die DP-Anwendungsschicht wurde in drei Schritten definiert. Das ursprünglich 1993 festgeschriebene DP-Protokoll wird heute umgangssprachlich als „DP-V0“ bezeichnet, die beiden Erweiterungen entsprechend „DP-V1“ und „DP-V2“. In den einzelnen Stufen wurden folgende Funktionen definiert:
§                     In DP-V0 der zyklische Austausch der Daten und Diagnosen. Geräte, die diesen Funktionsumfang unterstützen, finden vor allem in der allgemeinen Automatisierungstechnik und Maschinensteuerung Einsatz.
§                     In DP-V1 der azyklische Datenaustausch und die Alarmbehandlung. Geräte, die diese Erweiterungen unterstützen, finden sich vor allem in der Verfahrenstechnik.
§                     In DP-V2 der isochrone Datenaustausch, der Slave-Querverkehr und die Uhrzeitsynchronisation. Mit dieser Erweiterung wurde vor allem Anforderungen aus der Fertigungstechnik und Robotersteuerung Rechnung getragen.
Das PA-Protokoll wurde im Rahmen der Entwicklungsstufe DP-V1 definiert.