# Distributed Queue Dual Bus

Distributed Queue Dual Bus, oder kurz DQDB, ist ein Netzwerkprotokoll für die Hochleistungsübertragung. DQDB ist für Übertragungsraten von 34 Mbit/s bis 155 Mbit/s ausgelegt und hat den Vorteil, dass es bei hoher Last besonders effizient arbeitet.

## Überblick und Entstehung

DQDB wurde Mitte der 80er Jahre in Abstimmung parallel zu ATM entwickelt. Dadurch haben beide Standards eine ähnliche Definition der Zellengröße. Ziel war es, den Anforderungen für neue Dienste, wie Bildtelefonie oder Videokonferenzen, gerecht zu werden.
DQDB wurde als IEEE 802.6 standardisiert.

## Topologie

DQDB besteht aus:
* 2 gegeneinander laufende, einseitig gerichtete Busse
* Kopfstationen an jedem Busanfang
* Ankopplung der Stationen an beide Busse
Oft werden diese 2 Busse ringförmig verlegt, wobei beide Kopfstationen zusammenfallen. Jede Station ist an beide Busse lesend und schreibend angeschlossen. Der Anschluss an das MAN wird über Bridge und Router abgewickelt.

## Übertragung

Der Kopf sendet einen ständigen Strom von 53 Byte großen "leeren" Zellen, die am jeweiligen Busende von einem Abschlusswiderstand "geschluckt" werden. Jede Station darf eine leere Zelle beschreiben, wenn sie berechtigt ist. Es können jeweils nur Stationen erreicht werden, die flussabwärts liegen. Das entscheidet implizit auch, welcher Bus verwendet wird. Das wiederum bedeutet auch, dass die Stationen Kenntnis über die Topologie haben müssen, d. h. welche Stationen hinter und welche vor ihnen liegen.

## Zugriffsverfahren

Um den Zugriff auf dem Medium gerecht zu gestalten, wurden 2 Verfahren im Standard vorgesehen:
* Warteschlange (oder auch Queued-Arbitrated)
* Isochroner Zugriff (oder auch Pre-Arbitrated)

### Steuerung über Warteschlange

Es existiert für jeden Bus eine Warteschlange, die nach dem FIFO Prinzip abgearbeitet wird. Ein Bus regelt die Steuerung der Schlange für den Anderen. Die Warteschlangen sind verteilt implementiert, d. h. in den Stationen. Dadurch kennt jede Station den aktuellen Zustand des Netzes. Sendewillige Stationen reihen sich in die Warteschlange ein.
In jedem Knoten sind 2 Zähler (pro Bus) implementiert:
* Requestcounter RC, der sendewillige Knoten zählt
* Countdowncounter CD, der angibt, wie viele Zellen durchgelassen werden müssen
In jeder Zelle gibt es ein Busy-Bit und ein Request-Bit, die anzeigen, ob eine Zelle belegt ist oder ob eine (nachfolgende) Station senden möchte. Hat ein Knoten eine Zelle für Bus A zusammengestellt, sendet er eine Anforderung über Bus B. Alle Knoten an B erhalten somit dieses Anforderungsbit. Kommt eine leere Zelle, wird der RC um eins erniedrigt, weil diese Zelle von jemand anders angefordert wurde, auf den man nun nicht mehr warten muss. Taucht eine Anfrage auf, wird der RC um eins erhöht. Bei einer Zelle mit belegtem Busy-Bit wird ignoriert.
Nach dem Senden des Anforderungsbit, überträgt der Sender den Zählerstand vom RC auf den CD und setzt den RC wieder auf 0.

### Isochroner Zugriff

Hier erfolgt der Zugriff über vorherbestimmte (PA-)Zellen, d. h., dass jede Station nur für sie bestimmte Zellen beschreiben darf. Es wird ebenso verbindungsorientiert gearbeitet, d. h. eine Akzeptanz einer Verbindung zweier Stationen muss vorausgegangen sein.
Bemerkung: Beide Zugriffsarten können gemischt werden