DE60129643T2 - Verfahren und Gerät für die Ermittlung vom längsten Prefixzusammenbringen in einem Kommunikationsnetz - Google Patents

Verfahren und Gerät für die Ermittlung vom längsten Prefixzusammenbringen in einem Kommunikationsnetz Download PDF

Info

Publication number
DE60129643T2
DE60129643T2 DE60129643T DE60129643T DE60129643T2 DE 60129643 T2 DE60129643 T2 DE 60129643T2 DE 60129643 T DE60129643 T DE 60129643T DE 60129643 T DE60129643 T DE 60129643T DE 60129643 T2 DE60129643 T2 DE 60129643T2
Authority
DE
Germany
Prior art keywords
bitmap
stride
branch
address
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE60129643T
Other languages
English (en)
Other versions
DE60129643D1 (de
Inventor
David W. Nepean Carr
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nokia Canada Inc
Original Assignee
Alcatel Canada Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Alcatel Canada Inc filed Critical Alcatel Canada Inc
Application granted granted Critical
Publication of DE60129643D1 publication Critical patent/DE60129643D1/de
Publication of DE60129643T2 publication Critical patent/DE60129643T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • H04L45/74591Address table lookup; Address filtering using content-addressable memories [CAM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Mobile Radio Communication Systems (AREA)

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung bezieht sich im Allgemeinen auf Kommunikationsnetze und insbesondere auf ein Verfahren und eine Vorrichtung zum Bestimmen des längsten übereinstimmenden Präfixes in Kommunikationsnetzen.
  • Hintergrund der Erfindung
  • Datenkommunikationsnetze verwenden Adressen, um Informationspakete zwischen den Anwendern weiterzuleiten. Da sich die Datenkommunikationsnetze fortgesetzt entwickeln, nehmen die Anzahl der unterstützten Adressen, die Menge des Verkehrs und die Geschwindigkeit, mit der sich der Verkehr bewegt, alle zu. Als solche müssen die Router in derartigen Kommunikationsnetzen die Quellen und die Ziele der Endstationen, die dem Verkehr zugeordnet sind, schneller als in der Vergangenheit bestimmen.
  • Die Lenkung von Datenpaketen in Internetprotokoll-Netzen (IP-Netzen) erfordert das Bestimmen des besten übereinstimmenden Präfixes, das den Quell- und Zieladressen für das Paket entspricht, was außerdem als die Bestimmung einer längsten Präfix-Übereinstimmung (LPM) für die Adressen bezeichnet werden kann. Die Router, die die Pakete weiterleiten, enthalten typischerweise eine Datenbank, die eine Anzahl von Adressenpräfixen und ihre zugeordneten Weiterleitungsentscheidungen speichert, die angeben, wohin die Daten als Nächstes gesendet werden sollten (die nächsten Sprünge). Wenn der Router ein Paket empfängt, muss er bestimmen, welches der Präfixe in der Datenbank die beste Übereinstimmung für das Paket besitzt.
  • Es sind im Allgemeinen binäre Tries verwendet worden, um die LPM für Datenpakete zu bestimmen. 1 veranschaulicht eine grundlegende binäre Trie-Struktur, die eine Menge binärer Präfixe enthält. Der in 1 veranschaulichte Beispiel-Trie entspricht einem Sechs-Bit-Adressenraum, der verwendet wird, um die Erörterung zu vereinfachen. Die dunkel getönten Kreise geben die gültigen Präfixe an. Der in 1 veranschaulichte binäre Trie enthält eine vorgegebene Route, die der Wurzel des Tries entspricht, und mehrere gültige Präfixe, die nur teilweise (z. B. 000XXX) oder vollständig (z. B. 000100) spezifiziert sein können. Die in der aufzulösenden Adresse enthaltenen Bits werden verwendet, um Verzweigungsentscheidungen bei jedem der Knoten innerhalb des Tries zu treffen, wobei 0-Bits eine Verzweigung nach links verursachen, während Eins-Bits eine Verzweigung nach rechts verursachen. Wie veranschaulicht ist, ist das binäre Präfix 000XXX so wie das Präfix 000100 ein gültiges Präfix. Obwohl ein Paket, das eine Adresse besitzt, die dem Präfix 000100 entspricht, außerdem dem gültigen Präfix 000XXX entsprechen würde, ist das längste übereinstimmende Präfix 000100, wobei folglich 000100 das Präfix ist, das für die Adresse ausgewählt werden muss.
  • 2 veranschaulicht eine Technik des Standes der Technik, um den in 1 veranschaulichten grundlegenden binären Trie zu vereinfachen. 2 veranschaulicht einen Patricia-Trie, der den grundlegenden binären Trie in Bereichen abflacht, wo die Entscheidungen bei den Knoten innerhalb der Trie-Struktur nicht zu mehr als einer möglichen Präfixbestimmung führen können. Mit anderen Worten, die Knoten innerhalb der Trie-Struktur, die auf einer Route zu einem gültigen Präfix durchquert werden, ohne dass eine weitere Entscheidung erforderlich gemacht wird, sind unterdrückt. Eine derartige Wegkomprimierung kann die durchschnittliche Anzahl von Speicherzugriffen, die erforderlich ist, um die LPM für eine Adresse bestimmen, auf log2N Zugriffe verringern, wobei N die Anzahl der gültigen Präfixe ist, die im Trie gespeichert sind. Im schlimmsten Fall, in dem ein Weg nicht komprimiert werden kann, können jedoch die Patricia-Bäume L Speicherzugriffe erfordern, um eine LPM aufzulösen, wobei L gleich der Anzahl der Bits in der Adresse ist, die in einigen Anwendungen, wie z. B. dem IP, Version 4, 32 Bits und für das IP, Version 6, 128 Bits betragen kann. Die Variabilität der Anzahl der erforderlichen Speicherzugriffe stellt Probleme für die Konstruktion von Hochgeschwindigkeits-Routern dar. Außerdem würden die Anforderungen an die Speicherbandbreite die Router-Konstruktion trotzdem unpraktisch machen, wenn hohe Verbindungsraten unterstützt werden müssen, selbst wenn alle LPM-Bestimmungen mit log2N Speicherzugriffen ausgeführt werden könnten.
  • Ein weiteres Trie-Verarbeitungsverfahren, das versucht, die Zeit zu verringern, die erforderlich ist, um das geeignete Präfix zu bestimmen, besteht darin, einen Mehrwegeverzweigungs-Trie zu erzeugen, der mehrere Bits der Adresse in einem einzigen Schritt verarbeitet. Dies ist in 3 veranschaulicht, wo ein Trie, der in einem 32-Bit-Adressenraum vorhanden ist, in eine Menge von Schritten oder Strides aufgebrochen worden ist. Wie veranschaulicht ist, können die Strides so ausgewählt sein, dass sie verschiedene Bitlangen besitzen. Folglich können 4-Bit-Strides, 8-Bit-Strides und sogar 16-Bit-Strides verwendet werden, um die Trie-Struktur zu durchqueren. Für jeden Stride wird ein Abschnitt der Adresse mit der Menge von Bits verglichen, die diesem Stride entspricht, um zu bestimmen, ob eine LPM aufgelöst worden ist oder ob ein oder mehrere weitere Strides durchquert werden müssen, um die LPM zu bestimmen.
  • Um eine Anzahl von Adressenbits in einem Stride verarbeiten zu können, muss eine Präfixexpansion ausgeführt werden, so dass es ein gültiges Präfix für jeden binären Wert bei der Schnitttiefe für den Stride gibt, wobei die Schnitttiefe durch die Größe des Strides bestimmt ist. 4 zeigt die Wurzelebene eines 5-Bit-Abschnitts einer Trie-Struktur nach der Präfixexpansion. Die Schnitttiefe ist die unterste Menge der Präfixe der in 4 veranschaulichten Trie-Struktur, wobei sie durch einen langen rechteckigen Kasten umgeben gezeigt ist. Um gültige Präfixe bei allen Knoten auf der Schnittebene zu haben, kann es notwendig sein, neue Knoten auf der Schnitttiefe zu erzeugen, um den Trie vollständig zu machen. Die Werte für die neu erzeugten Knoten werden dann von den Elternknoten ausgebreitet. Die Ausbreitung eines Präfixwertes zu einem neu erzeugten Knoten ist über die Pfeile veranschaulicht, die von den Elternknoten ausgehen. Ein Beispiel ist der beschriftete Elternknoten, der ein gültiges Präfix zu drei beschrifteten ausgebreiteten Knoten ausbreitet. Wie zu sehen ist, dient der Knoten auf der höchsten Ebene oder der Wurzelknoten außerdem als ein Elternknoten für einige der Knoten auf der Schnittebene.
  • Jene Knoten in der Trie-Struktur nach 4, die eine endgültige Präfixübereinstimmung und eine getroffene Weiterleitungsentscheidung darstellen, sind durch einen dunkel getönten Kreis dargestellt, wohingegen jene Knoten, die angeben, das auf den nächsten Stride zugegriffen werden muss, um in Richtung auf die Bestimmung einer Weiterleitungsentscheidung fortzufahren, durch dunkel getönte Quadrate dargestellt sind. Folglich stellen die dunkel getönten Kreise einen Punkt dar, an dem die Suche nach einer Präfixübereinstimmung beendet wird, wohingegen die dunkel getönten Quadrate angeben, dass die Präfixübereinstimmung auf einer tieferen Ebene in der Gesamt-Trie-Struktur vorhanden sein muss und deshalb die Suche ausgedehnt wird.
  • Der Artikel von UGA, M., u. a., "A Fast and compact longest match prefix look-up method using pointer cache for very long network address", Computer Communications ans Networks, 1999, Proceedings 8th International Conference an Boston, MA, USA, 11.-13. Okt. 1999, Piscataway, NJ, USA, IEEE, USA, 11. Oktober 1999, Seite 595-602, offenbart ein Tabellennachschlageverfahren für die längste Übereinstimmung für sehr lange Netzadressen, wie das IP, Version 6. Das Verfahren verwendet zwei Ideen für eine Lenkungstabelle, die in einer Baumstruktur angeordnet ist. Die erste Idee ist, das Nachschlagen in der Tabelle schnell zu machen, indem die Zeiger auf die Zwischenknoten im Baum in einem Cache-Speicher gespeichert werden und die Anzahl der Knotendurchquerungen verringert wird. Die zweite Idee ist, die für jeden Knoten im Baum erforderliche Speichergröße um ein Drittel zu verringern, indem gemeinsame Abschnitte der Adressen benachbarter Knoten beseitigt werden.
  • Weil 2N gültige Präfixe typischerweise gespeichert sind, um einen N-Bit-Stride zu verarbeiten, erfordern größere Strides eine große Menge an Speicher, was ein begrenzender Faktor für die gewählte Stride-Größe sein kann. Kleinere Strides erfordern im Durchschnitt mehr Speicherzugriffe, um die Weiterleitungsentscheidungen zu ermitteln. Folglich gibt es einen Kompromiss zwischen der Menge des Speichers, die erforderlich ist, um die Daten für eine Trie-Struktur zu speichern, und der Anzahl der Speicherzugriffe, die erforderlich sind, um die Trie-Struktur zum geeigneten Endpräfix vollständig zu durchqueren.
  • Folglich gibt es einen Bedarf an einem Verfahren und einer Vorrichtung, die den Speicher verringern, der erforderlich ist, um die den Strides in der Trie-Struktur zugeordneten Werte zu speichern, so dass die Präfixübereinstimmung unter Verwendung einer minimalen Anzahl von Speicherzugriffen ausgeführt werden kann.
  • Kurzbeschreibung der Zeichnung
  • 1 veranschaulicht eine graphische Darstellung einer binären Trie-Struktur des Standes der Technik;
  • 2 veranschaulicht eine graphische Darstellung einer Patricia-Trie-Struktur des Standes der Technik;
  • 3 veranschaulicht eine graphische Darstellung einer binären Trie-Struktur des Standes der Technik, die in eine Anzahl von Strides aufgebrochen ist;
  • 4 veranschaulicht eine graphische Darstellung eines Tries des Standes der Technik mit expandiertem Präfix;
  • 5 veranschaulicht die Komprimierung der Stride-Ergebnisse für einen Trie-Schnitt zu einer Menge von komprimierten Stride-Ergebnissen gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 6 veranschaulicht eine graphische Darstellung eines Trie-Schnittes, der einem Stride zugeordnet ist, der komprimierte Knoten enthält;
  • 7 veranschaulicht die weitere Komprimierung der komprimierten Stride-Ergebnisse in einen Stride-Datensatz und entsprechende Blatt- und Zweigtabellen gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 8 veranschaulicht eine alternative Form der weiteren Komprimierung der komprimierten Stride-Ergebnisse in einen Stride-Datensatz, der Unter-Tries und eine entsprechende Blattzeigertabelle gemäß einer speziellen Ausführungsform der vorliegenden Erfindung enthält;
  • 9 veranschaulicht eine graphische Darstellung eines Trie-Schnittes mit komprimierten Knoten, der zwischen nachfolgenden dicht gepackten und nicht dicht gepackten Datensätzen gemäß einer speziellen Ausführungsform der vorliegenden Erfindung unterscheidet;
  • 10 veranschaulicht eine graphische Darstellung eines nicht dicht gepackten Stride-Datensatzes gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 11 veranschaulicht eine graphische Darstellung eines dicht gepackten Datensatzes gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 12 veranschaulicht eine graphische Darstellung eines dicht gepackten Blockes gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 13 veranschaulicht einen Ablaufplan eines Verfahrens zum Komprimieren von Stride-Daten gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 14 veranschaulicht einen Blockschaltplan einer Paketweiterleitungsschaltung gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 15 veranschaulicht einen Blockschaltplan eines Paketweiterleitungsprozessors gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 16 veranschaulicht einen Ablaufplan eines Verfahrens zur Paketlenkung gemäß einer speziellen Ausführungsform der vorliegenden Erfindung;
  • 17 veranschaulicht einen Ablaufplan eines Verfahrens zum Verarbeiten eines dicht gepackten Stride-Datensatzes gemäß einer speziellen Ausführungsform der vorliegenden Erfindung; und
  • 18 veranschaulicht eine graphische Darstellung der Bestimmung einer Weiterleitungsentscheidung für eine spezielle Adresse gemäß einer speziellen Ausführungsform der vorliegenden Erfindung.
  • Ausführliche Beschreibung einer bevorzugten Ausführungsform der Erfindung
  • Im Allgemeinen schafft die vorliegende Erfindung ein Verfahren und eine Vorrichtung zum Komprimieren der den Trie-Schnitten (Strides) zugeordneten Daten und ein Verfahren und eine Vorrichtung für die Verwendung derartiger komprimierter Daten zum Bestimmen der Weiterleitungsentscheidungen für Datenpakete in einem Kommunikationsnetz. Die dargestellte Komprimierungstechnik erzeugt für jede Menge komprimierter Daten ein Paar von Bitmaps und ein Paar von Basiszeigern. Die Bitmaps werden mit einem Abschnitt der Adresse verglichen, um zu ermitteln, ob die Weiterleitungsentscheidung innerhalb dieses Abschnitts des Tries bestimmt ist. Die Weiterleitungsentscheidungen sind in einer Blatttabelle gespeichert, auf die über einen Blatttabellen-Index zugegriffen wird. Der Blatttabellen-Index wird erzeugt, indem ein aus wenigstens einer der Bitmaps erzeugter Blatttabellen-Offset mit einem im Stride-Datensatz enthaltenen Blatttabellen-Basiszeiger kombiniert wird. Folglich wird, falls die Weiterleitungsentscheidung innerhalb des Strides bestimmt ist, über den Blatttabellen-Index auf die Blatttabelle zugegriffen, um die Weiterleitungsentscheidung wiederzugewinnen. Falls die Weiterleitungsentscheidung innerhalb des Strides nicht vollständig bestimmt ist, wird eine Zweigtabelle verwendet, um den Ort des nachfolgenden Strides zu bestimmen, der zu verarbeiten ist. Auf die Zweigtabelle wird über den Zweigtabellen-Index zugegriffen, der durch das Kombinieren des Zweigtabellen-Basiszeigers des Strides mit einem Zweigtabellen-Index, der aus einer oder mehreren der im Stride-Datensatz enthaltenen Bitmaps erzeugt wird, erzeugt wird.
  • Das hierin beschriebene Verfahren und die hierin beschriebene Vorrichtung schaffen Techniken zum Komprimieren der den Stride-Datensätzen zugeordneten Daten. Es werden außerdem Techniken zum Speichern der Daten in einer effizienten Weise beschrieben, so dass die Weiterleitungsentscheidungen unter Verwendung einer minimalen Anzahl von Speicherzugriffen bestimmt werden können. Die hierin beschriebenen Komprimierungstechniken ermöglichen, dass die großen Strides zugeordneten Daten in einer effizienten Weise gespeichert werden, so dass der Speicher, der erforderlich ist, um die Weiterleitungs- oder Verzweigungsentscheidungen für jeden Stride zu speichern, im Vergleich zu den Lösungen des Standes der Technik im hohen Maße verringert ist. Als solches kann die schnelle Bestimmung der Weiterleitungsentscheidungen in einem System ausgeführt werden, das den Speicher effizient verwendet, so dass große Strides mit einer praktischen Menge des Speichers in einem System untergebracht werden können, das die Hochgeschwindigkeitslenkung unterstützen kann.
  • Die Erfindung kann unter Bezugnahme auf die 5-18 besser verstanden werden. 5 zeigt die Liste oder Tabelle der Stride-Ergebnisse 62, wobei sie die entsprechenden Zeiger für jeden der Knoten in der erweiterten Trie-Struktur nach 4 darstellt. Im Kopf der Liste entspricht der Blattzeiger für 000XXX dem dunkel getönten Kreis am weitesten links in der Schnittebene der Trie-Struktur nach 4. Der unterste Eintrag in der Liste der Stride-Ergebnisse 62, ein Blattzeiger für 11111X, entspricht dem dunkel getönten Kreis am weitesten rechts auf der Schnittebene der Trie-Struktur nach 4.
  • Wie aus der Liste der Stride-Ergebnisse 62 in 5 ersichtlich ist, gibt es eine beträchtliche Menge von Wiederholungen für bestimmte Einträge. Die ersten zwei Einträge der Tabelle der Stride-Ergebnisse 62 sind z. B. die gleichen. Dies ist so, weil diese Einträge einem Paar der ausgebreiteten Knoten entsprechen, die erzeugt und mit dem Blattzeiger gefüllt worden sind, der dem Elternknoten entspricht. Ähnliche Mengen sich wiederholender Zeiger können innerhalb der Stride-Ergebnisse 62 beobachtet werden.
  • Durch das Erkennen, dass die Komprimierung der Stride-Ergebnisse 62 durch eine Form der Lauflängencodierung erreicht werden kann, kann die Menge des Speichers, die erforderlich ist, um die Ergebnisse für diesen 5-Bit-Stride zu speichern, im hohen Maße verringert werden. 6 veranschaulicht eine komprimierte Trie-Struktur 50, in der aufeinanderfolgende wiederholte Ergebnisse in ein einziges Ergebnis komprimiert sind. Eine Bitmap 54 wird verwendet, um anzugeben, ob ein Ergebnis für einen speziellen Knoten gespeichert ist. Das erste Bit in der Bitmap 54 ist z. B. eine Eins, die folglich angibt, dass die Ergebnisse in der komprimierten Menge der Ergebnisse für den ersten Knoten 52 auf der Schnittebene enthalten sind.
  • Wie in der Tabelle der Stride-Ergebnisse 62 gesehen worden ist, sind die Ergebnisse für den zweiten Knoten 51 die gleichen wie das Ergebnis für den ersten Knoten 52. Als solche speichert die Bitmap eine 0 an der Bitstelle, die dem zweiten Knoten 51 entspricht. Ein 0-Bit-Eintrag in der Bitmap 54 entspricht einem Knoten, für den das Ergebnis komprimiert worden ist und der zugeordnete Zeiger als solcher nicht unmittelbar verfügbar ist. Um diesen komprimierten Zeiger wiederzugewinnen, muss ein Suchalgorithmus nach dem ersten nicht komprimierten Eintrag (der durch ein 1-Bit dargestellt ist) nach links vom komprimierten Eintrag in der Bitmap 54 suchen. Der bei diesem Eintrag zurückgeschickte Zeiger ist zu jenem völlig gleich, der für den komprimierten Eintrag in einem unkomprimierten Format gespeichert worden wäre. Das nächste gesetzte Bit entspricht einem Knoten, für den gültige Ergebnisse in der in 5 veranschaulichten Menge der komprimierten Stride-Ergebnisse 66 gespeichert sind. Dieses Ergebnis ist außerdem auf die nachfolgenden Knoten anwendbar, für die eine 0 in der Bitmap 54 gespeichert ist. Wie veranschaulicht ist, verringern die komprimierten Stride-Ergebnisse 66 die Anzahl der Zeiger im hohen Maße, die gespeichert werden müssen, um die Ergebnisse für jeden der Knoten auf der Schnittebene in der erweiterten Trie-Struktur darzustellen. Die Bitmap 54 wird im Zusammenhang mit der Menge der komprimierten Stride-Ergebnisse 66 verwendet, um den geeigneten Zeiger für jeden der Knoten auf der Schnittebene zu bestimmen.
  • Viele moderne Prozessoren enthalten einen Einzyklusbefehl, der ein Register nach dem gesetzten niedrigst- oder höchstwertigen Bit abtastet. Wenn derartige Operationen mit der Maskierung von Abschnitten der Bitmap 54 kombiniert werden, schaffen sie ein einfaches Mittel zum Bestimmen des nächsthöheren gesetzten Bits in einer speziellen Bitmap in Bezug auf eine durch eine Adresse ausgewählte Bitposition.
  • Wie oben dargelegt worden ist, kann die Bitmap 54, um den geeigneten Zeiger oder das geeignete Ergebnis für einen Knoten innerhalb des Schnittabschnitts eines Strides wiederzugewinnen, im Zusammenhang mit den komprimierten Stride-Ergebnissen 66 verwendet werden. Falls die komprimierten Stride-Ergebnisse 66 in einer zusammenhängenden Weise im Speicher einzeln gespeichert sind, kann ein geeigneter Zeiger bestimmt werden, indem ein Offset innerhalb der Menge der zusammenhängenden komprimierten Ergebnisse anhand der Anzahl der gesetzten Bits in der Bitmap 54 von der gewünschten Bitstelle nach links berechnet wird. Obwohl dies ausgeführt werden kann, indem die Bitmap 54 sequentiell abgetastet wird und die Anzahl der 1en gezählt wird, sind effizientere Mittel zum Berechnen der Anzahl der 1en in einer speziellen Menge von Bits allgemein verfügbar. In vielen Prozessoren kann die Operation der Populationszählung (Popzähl) verfügbar sein, die die Anzahl der 1en in einer Menge von Bits berechnet. Indem der untere Abschnitt der Bitmap 54 unter der ausgewählten Bitstelle maskiert wird und eine Populationszählung der verbleibenden Menge der Bits ausgeführt wird, kann folglich ein Offset für die Tabelle der komprimierten Stride-Ergebnisse 66 bestimmt werden. In Prozessoren, die eine spezifische Populationszählungs-Operation nicht unterstützen, kann eine einfache lineare Menge von Befehlen verwendet werden, um die Populationszählung für eine Menge von Bits zu berechnen. Eine derartige Menge von Befehlen ist in der GNU-C-Bibliothek ausführlich beschrieben.
  • Obwohl die Kombination aus der Bitmap 54 und einer Menge der komprimierten Stride-Ergebnisse 66, die in 6 veranschaulicht ist, die Menge des Speichers verringert, die erforderlich ist, um die Ergebnisse für einen speziellen Trie-Schnitt oder Stride zu speichern, sind immer noch zwei Speicherzugriffe erforderlich, um ein spezifisches Ergebnis für einen Knoten zu bestimmen, ein Speicherzugriff, um die Bitmap 54 wiederzugewinnen, und ein weiterer, um den geeigneten Zeiger aus der Liste der komprimierten Stride-Ergebnisse 66 wiederzugewinnen. 7 veranschaulicht eine Verfeinerung der Datenstruktur nach 6, in der eine weitere Bitmap zum komprimierten Datensatz hinzugefügt ist, um anzugeben, welche der Zeiger Blattzeiger sind. Durch das Speichern der Blattzeiger in einer separaten Blattzeigertabelle und das Berechnen eines Index für diese Tabelle, wenn ein Blatt bestimmt wird, kann die Gesamtzahl der erforderlichen Speicherzugriffe verringert werden.
  • 7 veranschaulicht die komprimierten Stride-Ergebnisse 66, die in einen Stride-Block 70 weiter komprimiert sind, der eine Zweig-Bitmap 72, eine Blatt-Bitmap 74, einen Blattbasiszeiger 75 und eine Menge von Zweigen 77 (Unterbäumen) enthält. "Block" ist ein Begriff, der verwendet werden kann, um einen Abschnitt der Trie-Struktur zu beschreiben, der die Informationen für die Verarbeitung eines Strides enthält. Ein gesetztes Bit in der Zweig-Bitmap 72 gibt an, dass der der Bitstelle in der Zweig-Bitmap 72 entsprechende Knoten ein Ergebnis besitzt, das einem Eintrag in der Liste der Zweigzeiger entspricht. Ein gesetztes Bit in der Blatt-Bitmap 74 gibt an, dass der Knoten, dem die Bitstelle in der Blatt-Bitmap 74 entspricht, ein Ergebnis besitzt, das ein in der Blattzeigertabelle 76 gespeicherter Blattzeiger ist. Falls auf einen Blattzeiger Bezug genommen werden muss, kann eine Populationszählung verwendet werden, um einen Index in der Blattzeigertabelle 76 zu bestimmen. Dieser Index kann mit dem Blattbasiszeiger 75 kombiniert werden, der auf den ersten Eintrag der Blattzeigertabelle 76 zeigt, um auf den geeigneten Eintrag innerhalb der Blattzeigertabelle 76 zuzugreifen.
  • Um die Liste der Unter-Trie-Zeiger aus dem Stride-Block 70 zu beseitigen, werden die Unter-Tries in einen zusammenhängenden Speicher gesetzt, wobei die einzelnen Unter-Trie-Zeiger durch eine Bitmap und einen Basiszeiger auf die Stelle im zusammenhängenden Speicher ersetzt werden. Dies ist in 8 veranschaulicht. Der Stride-Datensatz 80 nach 8 ist auf die Zweig-Bitmap 72, die Blatt-Bitmap 74, den Blattbasiszeiger 75 und einen Zweigbasiszeiger 86 verringert worden. Der Zweigbasiszeiger 76 zeigt auf einen Basiseintrag einer Zweigtabelle 89 (die außerdem als ein nächster Unter-Trie-Block bezeichnet werden kann), der die Zweige (Unter-Tries) für den speziellen Stride speichert. Wie es der Fall bei der Blattzeigertabelle 76 gewesen ist, kann auf die Zweigtabelle 89 durch eine Kombination aus dem Zweigbasiszeiger 76 und einem unter Verwendung der Zweig-Bitmap 72 erzeugten Offset zugegriffen werden. Folglich kann durch das Maskieren eines Abschnitts der Zweig-Bitmap 72 und das Ausführen einer Populationszählung im verbleibenden Abschnitt ein geeigneter Offset für die Zweigtabelle 89 bestimmt werden.
  • Der Stride-Block 80 im komprimierten Format, der in 8 gezeigt ist, ist kompakt genug, um in eine Cache-Zeile einer Cache-Struktur zu passen, die durch einen Prozessor für die Verarbeitung des Strides verwendet wird. Wie im Stand der Technik bekannt ist, kann eine ganze Cache-Zeile (Gruppe von Wörtern) in etwa der gleichen Zeit wie der, die erforderlich ist, um ein einziges Wort zu lesen, aus dem Cache-Speicher gelesen werden. Dies erlaubt, dass der Stride in einer effizienten Weise verarbeitet wird, so dass die Weiterleitungsentscheidung für eine Adresse unter Verwendung einer minimalen Anzahl von Speicherzugriffen bestimmt werden kann. Weil die Komprimierung ausgeführt wird, wird außerdem die Menge des Speichers, die erforderlich ist, um die Daten zu speichern, die erforderlich sind, um jeden Stride zu verarbeiten, im Vergleich zu den Lösungen des Standes der Technik im hohen Maße verringert.
  • Um die Speicherung der Ergebnisse für einen speziellen Stride weiter zu optimieren, kann zwischen nachfolgenden Blöcken, die verarbeitet werden müssen, um die endgültige Weiterleitungsentscheidung zu bestimmen, eine Differenzierung ausgeführt werden. Einige Strides der Gesamt-Trie-Struktur können eine kleine Anzahl von Zeigern enthalten, die in einer kleinen Menge des Speichers gespeichert sein kann. Die nicht dicht gepackten Abschnitte des Tries können in ein spezielles nicht dicht gepacktes Komprimierungsformat komprimiert werden, das hinsichtlich der Verarbeitung effizienter ist, da es statt der Zeiger für eine Blatttabelle die tatsächlichen Ergebnisse für die Blätter enthalten kann. Um die Differenzierung zwischen nicht dicht gepackten und dicht gepackten Blöcken auszunutzen, kann der Stride-Block, der auf einen nachfolgenden nicht dicht gepackten oder dicht gepackten Block zeigt, eine Codierung enthalten, so dass der für die nachfolgenden Blöcke verwendete Typ der Komprimierung bekannt ist. 9 veranschaulicht eine spezielle Codierungstechnik, die verwendet werden kann, um diese Differenzierung auszuführen. 9 veranschaulicht einen Stride, der komprimierte Knoten enthält. Jeder Knoten auf der Schnittebene kann einen von vier Zuständen besitzen. Diese vier Zustände sind durch die Kombination einer Ausdehnungs-Bitmap 95 und einer Typ-Bitmap 96 codiert, die im Stride-Datensatz 99 enthalten sind. Für jeden Knoten auf der Schnittebene gibt es ein Bit in der Ausdehnungs-Bitmap 95 und ein Bit in der Typ-Bitmap 96. Die Kombination aus diesen zwei Bits für jeden Knoten gibt den speziellen Zustand dieses Knotens an.
  • Die Ausdehnungs- und Typ-Bitmaps erlauben, dass die vier Zustände für jeden Knoten codiert werden, was unter Verwendung der bis jetzt beschriebenen Blatt- und Zweig-Bitmaps nicht möglich gewesen ist. Wie es für einen Durchschnittsfachmann auf dem Gebiet offensichtlich ist, ist die Unterscheidung zwischen der Verwendung der Zweig- und Blatt-Bitmaps im Gegensatz zu den Typ- und Ausdehnungs-Bitmaps nur davon abhängig, ob in dem System eine verschiedene Codierung der Blöcke (nicht dicht gepackt gegen dicht gepackt) verwendet wird. Für Ausführungsformen, die nur eine Blockcodierung verwenden, stellen die Zweig- und Blatt-Bitmaps ausreichend codierte Zustände bereit. Für Ausführungsformen, die nicht dicht gepackte und dicht gepackte Blöcke unterstützen, stellen die Ausdehnungs- und Typ-Bitmaps die notwendige Anzahl von Zuständen bereit, um den Typ der Codierung für die nachfolgenden Blöcke anzugeben.
  • Es ist gezeigt, dass der erste Knoten einen Zustand besitzt, der einer Blattangabe 91 entspricht. Knoten, die einen Zustand besitzen, der einer Blattangabe entspricht, sind als dunkel getönte Kreise gezeigt. Eine Blattangabe gibt an, dass in der Blatttabelle für diesen speziellen Knoten ein gültiger Eintrag enthalten ist. Eine Kombination aus der Ausdehnungs-Bitmap 95 und der Typ-Bitmap 96 erzeugt die früher beschriebene Blatt-Bitmap 74, die dann manipuliert werden kann, um einen Offset für die Blatttabelle zu bestimmen. Dieser Offset kann dann mit dem Blattbasiszeiger 75 kombiniert werden, um auf die Blatttabelle zuzugreifen und die Weiterleitungsentscheidung für den Knoten aus der Blatttabelle zu holen. Die Blattangaben sind mit einer 0 in der Ausdehnungs-Bitmap 95 und einer 1 in der Typ-Bitmap 96 codiert. Wie für einen Durchschnittsfachmann auf dem Gebiet offensichtlich ist, sind die in den hierin beschriebenen Beispielen verwendeten speziellen Bitcodierungen beliebig, wobei, solange wie die speziellen Beziehungen zwischen den verschiedenen Bitmaps bewahrt werden, unterschiedliche Bitwerte für verschiedene Codierungen verwendet werden können.
  • Es ist gezeigt, dass die zweite Knotenstelle einer leeren Angabe 94 entspricht, die durch einen nicht dunkel getönten Kreis veranschaulicht ist. Leere Angaben sind mit einer 0 in der Ausdehnungs-Bitmap 95 und einer 0 in der Typ-Bitmap 96 codiert. Eine leere Angabe bedeutet, dass eine Suche nach links ausgeführt werden muss, um das geeignete Ergebnis für diesen speziellen Knoten zu bestimmen, da er komprimiert worden ist.
  • Es ist gezeigt, dass die dritte Knotenstelle auf der Schnittebene einer nicht dicht gepackten Angabe 92 entspricht. Nicht dicht gepackten Angaben sind durch eine 1 in der Ausdehnungs-Bitmap 95 und eine 0 in der Typ-Bitmap 96 angegeben. Eine nicht dicht gepackte Angabe bedeutet, dass die Suche über die in der Trie-Struktur 90 vorhandene Schnittebene ausgedehnt wird. Sie gibt ferner an, dass der nachfolgende Stride-Block, der anhand des für diesen Knoten erzeugten Index geholt wird, ein nicht dicht gepackter Stride-Block ist, der in einer Ausführungsform einen Stride von 8 Adressenbits verarbeiten kann. Die Kenntnis, dass dieser zu holende nachfolgende Block ein nicht dicht gepackter Block ist, ermöglicht es dem Prozessor, den Wirkungsgrad zu verbessern, mit dem der nachfolgende Stride-Block verarbeitet wird. Dies ist so, weil zusätzliche Informationen in dem nicht dicht gepackten Block gespeichert sein können, da er nicht so viele Endergebnisse wie ein dicht gepackter Block enthält. Ein beispielhafter nicht dicht gepackter Stride-Block 901 ist in 10 veranschaulicht.
  • Der nicht dicht gepackte Block 901 enthält einen Zweigbasiszeiger, der auf den nächsten Block in der Trie-Struktur zeigt. Der in dem nicht dicht gepackten Block enthaltene Blattbasiszeiger speichert eine Basisadresse für die Blatttabelle. Alle Blätter für den nicht dicht gepackten Block sind von dieser Basisadresse zusammenhängend gespeichert, wobei auf sie zugegriffen werden kann, indem unter Verwendung der Typ- und Ausdehnungs-Bitmaps ein geeigneter Offset erzeugt wird. Es ist gezeigt, dass die zweite Zeile des nicht dicht gepackten Blocks acht Werte enthält. Jeder dieser Werte kann direkt mit dem Abschnitt der Adresse verglichen werden, der verwendet wird, um diesen Stride aufzulösen. Wenn eine exakte Übereinstimmung gefunden wird, dann gibt es entweder in der Zweigtabelle oder in der Blatttabelle einen dieser Adresse zugeordneten Zeiger. Wenn keine Übereinstimmung bestimmt wird, wird eine Suche nach links so ausgeführt, dass der nächsthöchste Wert in der Anordnung der Werte ausgewählt wird, was zur Abtastbitoperation an einer Bitmap analog ist. Weil in dem nicht dicht gepackten Block nur acht Werte gespeichert sind, sind die Typ- und Ausdehnungs-Bitmaps jede nur 8-Bit-Bitmaps. Die Verwendung der Typ- und Ausdehnungs-Bitmaps ist zu jener eines dicht gepackten Blocks völlig gleich, wobei sie verwendet werden können, um die Offsets entweder für die Zweigtabelle oder für die Blatttabelle zu bestimmen, wobei die Bitmaps außerdem verwendet werden können, um zwischen nachfolgenden nicht dicht gepackten und dicht gepackten Blöcken zu unterscheiden.
  • In 9 ist gezeigt, dass die sechste Bitstelle in der Schnittebene des Strides einer dicht gepackten Angabe 93 entspricht. Die dicht gepackte Angabe 93 ist in der Ausdehnungs-Bitmap 95 durch eine 1 und in der Typ-Bitmap 96 durch eine 1 angegeben. Eine dicht gepackte Angabe 93 gibt an, dass ein Offset erzeugt und mit dem Zweigbasiszeiger 76 kombiniert werden sollte, um auf einen nachfolgenden Stride-Block Bezug zu nehmen, der ein dicht gepackter Block ist. Der Stride-Block 99 nach 9 ist ein dicht gepackter Stride-Block, weil er eine volle Ausdehnungs-Bitmap und eine volle Typ-Bitmap für alle Knoten auf der Schnittebene für den Stride enthält. Dies steht im Gegensatz zu einem nicht dicht gepackten Block, der nur eine begrenzte Menge von Werten, die einer begrenzten Menge von Knoten entspricht, und die geeigneten Typ- und Ausdehnungs-Bitmaps für diese speziellen Werte enthält.
  • Wie früher dargelegt worden ist, ist ein Block ein Abschnitt der Trie-Struktur, der verwendet wird, um einen Stride zu verarbeiten. Ein Block kann in eine Anzahl von Datensätzen unterteilt sein, wobei ein spezieller Datensatz durch einen Abschnitt der Adressenbits ausgewählt wird, die verwendet werden, um den Stride zu durchlaufen. Ein Block für einen 8-Bit-Stride kann z. B. in acht Datensätze unterteilt sein, wobei drei der acht Adressenbits, die verwendet werden, um diesen Stride zu verarbeiten, verwendet werden, um einen spezifischen der Datensätze in dem Block, der dem Stride entspricht, auszuwählen. Die verbleibenden fünf Bits könnten dann verwendet werden, um den ausgewählten Datensatz zu verarbeiten, wobei die Struktur des Datensatzes zu den bis jetzt für einen 5-Bit-Block beschriebenen Strukturen ähnlich sein kann. Mit anderen Worten, jeder Datensatz könnte als ein Block strukturiert sein, weil er Bitmaps und Basiszeiger enthalten würde. 11 veranschaulicht einen dicht gepackten Datensatz 911. Die Differenzierung zwischen den Blöcken und den Strides wird im Folgenden unter Bezugnahme auf 18 weiter erklärt.
  • Der dicht gepackte Datensatz 911 enthält eine Ausdehnungs-Bitmap, eine Typ-Bitmap, eine Anzahl von Bits, die für die zukünftige Verwendung reserviert sind (RFU), einen Zweigtabellen-Basiszeiger und einen Blatttabellen-Basiszeiger und kann eine Angabe enthalten, wie viele der Blöcke in dem Unter-Trie darunter nicht dicht gepackte Blöcke sind. Die Angabe, wieviel Blöcke in dem Unter-Trie darunter nicht dicht gepackte Blöcke sind, kann verwendet werden, um die Zugriffe auf den Unter-Trie darunter zu optimieren.
  • Die dicht gepackten Blöcke werden verwendet, wo die Dichte der Zeiger innerhalb eines Stride die Verwendung der speichereffizienteren nicht dicht gepackten Blöcke verhindert. Ein Beispiel eines dicht gepackten Blocks 921 für einen 8-Bit-Stride ist in 12 gezeigt.
  • Es wird angegeben, dass es für die Software schwierig sein kann, große Bitmaps, die in dem obigen dicht gepackten Block enthalten sind, zu manipulieren, wobei die Menge der Daten, die wiederzugewinnen ist, um einen derartigen Block zu verarbeiten, groß ist. Außerdem sind die Felder innerhalb des Blocks nicht auf die normalen Grenzen der Cache-Zeilen ausgerichtet, wobei die Menge des zusammenhängenden Speichers, die wahrscheinlich für die Blatttabelle und die Zweigtabelle erforderlich sein würde, der dynamischen Zuweisung von Speicher bei der Implementierung Einschränkungen auferlegen würde. Die oben veranschaulichte Darstellung stellt jedoch die minimale Speicherverwendung für einen dicht gepackten Block dar. In Ausführungsformen, die unfangreiche oder separate Speicherstrukturen enthalten, kann eine derartige dicht gepackte Blockstruktur praktisch sein.
  • In anderen Ausführungsformen, in denen die dicht gepackten Blöcke, wie z. B. die oben veranschaulichten, weniger praktisch sind, können die dicht gepackten Blöcke in Datensätze aufgebrochen werden, um sowohl die Hardware-Implementierung des Systems als auch die effiziente Verarbeitung durch die Software zu unterstützen. Dies ist oben kurz erörtert worden. Ein 32-Bit-Mikroprozessor würde z. B. am wahrscheinlichsten zu bevorzugen sein, um 32-Bit-Bitmaps zu manipulieren. Folglich könnten für einen 8-Bit-Stride acht Stride-Datensätze verwendet werden, die unter Verwendung der oberen drei Bits des Strides indexiert sind. Jeder der Datensätze würde dann verwendet werden, um die unteren fünf Bits des Strides zu verarbeiten, wobei die Bitmaps in einem dicht gepackten 5-Bit-Stride-Datensatz 32-Bit-Bitmaps sein würden.
  • Um das Holen der Datensätze für einen nachfolgenden Stride zu unterstützen, kann jeder Datensatz eine Angabe der Anzahl der nicht dicht gepackten Datensätze enthalten, die im folgenden Stride-Block enthalten sind. Falls die nicht dicht gepackten Datensätze vor den dicht gepackten Datensätzen zusammenhängend in der Zweigtabelle gespeichert sind, wird die Indexierung der Zweigtabelle vereinfacht, indem eine Zählung der Anzahl der nicht dicht gepackten Datensätze ausgeführt wird.
  • 13 veranschaulicht einen Ablaufplan eines Verfahrens zum Komprimieren eines dicht gepackten Stride-Blocks. Im Schritt 102 wird der Stride-Block in mehrere Stride-Abschnitte getrennt. Dies ist zum Trennen des Blocks in eine Anzahl von Datensätzen analog. Für jeden Stride-Abschnitt oder Datensatz werden die Schritte 104-112 ausgeführt.
  • Im Schritt 104 werden die Stride-Ergebnisse für den Abschnitt komprimiert, um eine komprimierte Bitmap und eine komprimierte Liste der Stride-Ergebnisse zu erzeugen. Dies ist der in 6 veranschaulichte Komprimierungsschritt. Im Schritt 106 werden die komprimierte Bitmap und die komprimierte Liste der Stride-Ergebnisse weiter komprimiert, um eine Blatt-Bitmap, eine Zweig-Bitmap, einen Blatttabellenabschnitt und einen Zweigtabellenabschnitt zu erzeugen. Dies ist zu dem in 7 gezeigten Schritt ähnlich, wo der Blatttabellenabschnitt der Menge der Blattzeiger entspricht, die in der Blattzeigertabelle für den Stride-Abschnitt enthalten ist, und der Zweigtabellenabschnitt der Menge der Zweigzeiger für den Stride-Abschnitt entspricht. Im Schritt 108 wird der Blatttabellenabschnitt im Abschnitt des Speichers oder der Tabelle gespeichert, der den Blattzeigern für den Trie zugeordnet ist. Vorzugsweise werden diese Blattzeiger in einer zusammenhängenden Weise in der Blatttabelle beginnend mit einem Blattbasiszeiger für den Stride-Abschnitt so gespeichert, dass auf sie durch die Kombination aus einem Basiszeiger und den Offsets, die kombiniert werden, um die Indizes für die Tabelle zu erzeugen, zugegriffen werden kann.
  • Im Schritt 110 wird der Zweigtabellenabschnitt im Speicher beginnend an einer Stelle, die dem Zweigbasiszeiger entspricht, gespeichert. Vorzugsweise wird er in einer zusammenhängenden Weise im Speicher gespeichert, so dass unter Verwendung eines Basiszeigers und der Offsets der Direktzugriff auf die Einträge in der Zweigtabelle ausgeführt werden kann.
  • Im Schritt 110 wird ein Stride-Datensatz im Speicher für den Stride-Abschnitt gespeichert, wobei der Stride-Datensatz die Blatt-Bitmap, die Zweig-Bitmap, den Blatttabellen-Basiszeiger, bei dem der Blatttabellenabschnitt gespeichert worden ist, und den Zweigtabellen-Basiszeiger, bei dem der Zweigtabellenabschnitt für den Stride-Abschnitt gespeichert worden ist, enthält. Das Speichern des Stride-Datensatzes im Schritt 112 kann das Codieren der Blatt-Bitmap und der Zweig-Bitmap in eine Ausdehnungs-Bitmap und eine Typ-Bitmap enthalten, wie oben in Bezug auf 9 beschrieben worden ist. Die Ausdehnungs-Bitmap und die Typ-Bitmap ermöglichen dem Stride-Datensatz, nicht dicht gepackte und dicht gepackte Formatunterscheidungen für nachfolgende Stride-Blöcke, auf die über die in der Zweigtabelle enthaltenen Zweigzeiger zugegriffen wird, zu codieren.
  • 14 veranschaulicht einen Blockschaltplan einer Paketweiterleitungsschaltung 250, die im Zusammenhang mit den bis jetzt erörterten Trie-Komprimierungstechniken verwendet werden kann, um die Paketlenkung in einem Kommunikationsnetz auszuführen. Die Paketweiterleitungsschaltung 250 enthält einen Speicher 220, einen Bestimmungsblock 200, einen Paketspeicher 230 und eine Ausgangsschaltungsanordnung 240. Die durch die Paketweiterleitungsschaltung 250 empfangenen Pakete 202 werden im Paketspeicher 230 gespeichert, während eine Weiterleitungsentscheidung für jedes Paket bestimmt wird. Die Adresse 203 für jedes Paket wird dem Bestimmungsblock 200 bereitgestellt, der die Weiterleitungsentscheidung 242 für jedes Paket bestimmt. Der Bestimmungsblock 200 kann als eine Zustandsmaschine, eine diskrete Schaltungsanordnung oder als ein Paketweiterleitungsprozessor, wie z. B. der, der in 15 veranschaulicht ist, implementiert sein. Der Bestimmungsblock 200 ist funktional an einen Speicher 220 gekoppelt, der eine Weiterleitungstabelle 222 speichert. Vorzugsweise ist die Weiterleitungstabelle 222 in einer Weise strukturiert, so dass die Weiterleitungsentscheidungen für die Pakete durch die Verwendung einer komprimierten Trie-Struktur bestimmt werden. Die komprimierte Trie-Struktur kann eine Anzahl von Strides enthalten, wobei der jedem Stride entsprechende Block in eine Anzahl von Datensätzen aufgebrochen sein kann.
  • Wenn der Bestimmungsblock 200 eine Paketadresse empfängt, verarbeitet er die Adresse, um eine Weiterleitungsentscheidung 242 in einer Weise zu bestimmen, die zu jener ähnlich ist, die im Ablaufplan nach 16 veranschaulicht ist, der im Folgenden weiter ausführlich beschrieben ist. Um die Bestimmung der Weiterleitungsentscheidung 242 zu unterstützen, kann ein Cache-Speicher 210 in der Paketweiterleitungsschaltung 250 enthalten sein. Der Cache-Speicher 210, der funktional an den Speicher 220 und den Bestimmungsblock 200 gekoppelt ist, kann verwendet werden, um bestimmte Abschnitte der Weiterleitungstabelle 222 im Cache-Speicher zu speichern, so dass die Bestimmung der Weiterleitungsentscheidung 242 in einer effizienteren Weise ausgeführt werden kann, die weniger Zugriffe auf den Speicher 220 erfordert.
  • Sobald eine Weiterleitungsentscheidung 242 durch den Bestimmungsblock 200 bestimmt worden ist, wird sie der Ausgangsschaltungsanordnung 240 bereitgestellt. Für jedes Paket empfängt die Ausgangsschaltungsanordnung eine Weiterleitungsentscheidung 242 und leitet das Paket anhand der Weiterleitungsentscheidung zu wenigstens einem der mehreren Ausgänge 246 weiter.
  • Vorzugsweise ist die Paketweiterleitungsschaltung 250 in einem Router für die Verwendung in einem Datenkommunikationsnetz enthalten. Ein derartiger Router kann in einem Datenkommunikationsnetz verwendet werden, das IP-Verkehr unterstützt. Der Speicher 220 kann mehrere Weiterleitungstabellen speichern, wobei eine spezielle Weiterleitungstabelle für die Verwendung beim Bestimmen der Weiterleitungsentscheidung für ein spezielles Paket entweder anhand eines in dem Paket enthaltenen Feldes oder anhand der Kennung eines Eingangs-Ports, über den das Paket empfangen worden ist, ausgewählt wird.
  • 15 veranschaulicht einen Paketweiterleitungsprozessor 300, der ein Verarbeitungsmodul 302 und einen Speicher 304 enthält. Der Paketweiterleitungsprozessor führt vorzugsweise das in 16 veranschaulichte Verfahren durch die Verwendung von Software aus, die als eine Menge von Operationsbefehlen im Speicher 304 gespeichert ist. Das Verarbeitungsmodul 302 kann eine einzige Verarbeitungs-Entität oder mehrere Verarbeitungs-Entitäten enthalten. Eine derartige Verarbeitungs-Entität kann ein Mikroprozessor, ein Mikrocontroller, ein digitaler Signalprozessor oder irgendeine Vorrichtung, die Informationen anhand von Operations- oder Programmbefehlen verarbeitet, sein.
  • Der Speicher 304 kann eine einzige Speichervorrichtung oder mehrere Speichervorrichtungen sein. Eine derartige Speichervorrichtung kann eine Festwert-Speichervorrichtung, eine Schreib-Lese-Speichervorrichtung, eine Diskette, ein Festplattenspeicher oder irgendeine Vorrichtung, die digitale Informationen speichert, sein. Es wird angegeben, dass der Speicher 304 im Speicher 220 enthalten sein kann, der in der Paketweiterleitungsschaltung enthalten ist, oder eine separate Speicherstruktur sein kann. Der Speicher 304 speichert die Programm- oder Operationsbefehle, die, wenn sie durch das Verarbeitungsmodul 302 ausgeführt werden, dem Verarbeitungsmodul 302 erlauben, die Paketweiterleitungsfunktionen auszuführen, wie z. B. jene, die im Ablaufplan nach
  • 16 veranschaulicht sind. Es wird angegeben, dass der Paketweiterleitungsprozessor 300 einige der Funktionen nach 16 durch im Speicher 304 gespeicherte Software implementieren kann, wohingegen andere Abschnitte unter Verwendung von Hardware oder einer Schaltungsanordnung implementiert sein können, die im Paketweiterleitungsprozessor 300 enthalten ist. Folglich kann in einigen Ausführungsformen eine Mischung aus Hardware und Software verwendet werden, um das in 16 veranschaulichte Verfahren auszuführen.
  • 16 veranschaulicht einen Ablaufplan eines Verfahrens zur Paketlenkung in einem Kommunikationsnetz. Das Verfahren beginnt im Schritt 402, in dem ein Paket empfangen wird. Das Paket enthält eine Adresse, die verwendet wird, um eine Weiterleitungsentscheidung für das Paket zu bestimmen. Die Weiterleitungsentscheidung wird anhand einer komprimierten Trie-Struktur bestimmt, die in einer Weiterleitungstabelle gespeichert sein kann. Die komprimierte Trie-Struktur besteht vorzugsweise aus einer Anzahl von Strides, wobei die Blöcke, die einen Stride bilden, in eine Anzahl von Datensätzen unterteilt sein können, wobei die Blöcke und die Datensätze vorzugsweise so strukturiert sind, wie oben angegeben worden ist.
  • Im Schritt 404 wird ein erster Stride-Block unter Verwendung eines ersten Abschnitts der Adresse geholt. Wie oben dargelegt worden ist, kann ein Stride-Block in eine Anzahl von Datensätzen aufgebrochen werden, um die Verarbeitung zu vereinfachen. In einer Ausführungsform werden die höchstwertigen Bits der Adresse verwendet, um einen in einem Stride-Block enthaltenen Stride-Datensatz wiederzugewinnen, wobei die höchstwertigen Bits zwischen einer Anzahl von Stride-Datensätzen, die einen dicht gepackten Block innerhalb der Trie-Struktur bilden, indexieren. Jeder Stride-Block enthält eine erste Bitmap, eine zweite Bitmap, einen Blatttabellen-Basiszeiger und einen Zweigtabellen-Basiszeiger. Sobald der Stride-Block im Schritt 404 geholt worden ist, wird er unter Verwendung der Schritte 406-416 verarbeitet.
  • Im Schritt 406 wird bestimmt, ob die Weiterleitungsentscheidung für die Adresse anhand des Stride-Blocks, der geholt worden ist, vollständig bestimmt werden kann. Dies wird anhand wenigstens einer der ersten und zweiten Bitmaps bestimmt. Die erste Bitmap ist eine Ausdehnungs-Bitmap, während die zweite Bitmap eine Typ-Bitmap ist, wobei die Ausdehnungs-Bitmap allein verwendet werden kann, um zu bestimmen, ob die Weiterleitungsentscheidung unter Verwendung dieses Stride-Datensatzes vollständig bestimmt ist.
  • Falls die Weiterleitungsentscheidung unter Verwendung des Stride-Blocks vollständig bestimmt ist, geht das Verfahren zu 408 weiter, wo aus wenigstens einer der ersten und zweiten Bitmaps und dem zweiten Abschnitt der Adresse ein Blatttabellen-Offset erzeugt wird. Der zweite Abschnitt der Adresse wird verwendet, um eine spezifische Bitstelle in einer oder mehreren der Bitmaps auszuwählen, wobei eine Maskierungsoperation, gefolgt von einer Populationszählung, verwendet wird, um einen Offset für die Blatttabelle zu bestimmen. Die Ausdehnungs-Bitmap und die Typ-Bitmap müssen kombiniert werden, um die Blatt-Bitmap zu erzeugen. Dies kann durch die Ausführung einer bitweisen UND-Operation der Typ-Bitmap und der bitweisen Inversen der Ausdehnungs-Bitmap ausgeführt werden.
  • Im Schritt 410 wird der im Schritt 408 erzeugte Blatttabellen-Offset mit dem Blatttabellen-Basiszeiger kombiniert, um einen Blatttabellen-Index zu erzeugen. Dieser Blatttabellen-Index wird dann im Schritt 412 verwendet, um auf die Blatttabelle zuzugreifen, um die Weiterleitungsentscheidung für das Paket wiederzugewinnen. Die Blatttabelle kann entweder die Weiterleitungsentscheidungen direkt speichern, oder sie kann die Zeiger auf eine Liste der Weiterleitungsentscheidungen speichern.
  • Falls im Schritt 406 bestimmt wird, dass die Weiterleitungsentscheidung in diesem Stride nicht vollständig bestimmt ist, geht das Verfahren zum Schritt 414 weiter, wo die Schritte beginnen, die notwendig sind, um einen nachfolgenden Stride-Datensatz oder -Block zu holen. Im Schritt 414 wird aus dem zweiten Abschnitt der Adresse und wenigstens einer der ersten und zweiten Bitmaps ein Zweigtabellen-Offset erzeugt. Falls durch das System, in dem das Verfahren nach 16 verwendet wird, nicht dicht gepackte und dicht gepackte Blöcke unterstützt werden, kann das Erzeugen des Zweigtabellen-Offsets das Erzeugen eines Zweigtabellen-Offsets entweder für einen nicht dicht gepackten Block oder für einen dicht gepackten Block enthalten. Die Unterscheidung zwischen nicht dicht gepackt und dicht gepackt und die Codierungen, die notwendig sind, um zwischen nicht dicht gepackten und dicht gepackten Blöcken zu unterscheiden, sind oben in Bezug auf 9 beschrieben worden. Folglich sind Ausdehnungs- und Typ-Bitmaps erforderlich, um zwischen nicht dicht gepackten und dicht gepackten Blöcken zu unterscheiden. Die Erzeugung des Zweigtabellen-Offsets wird unter Verwendung von Maskierungs- und Populationszählungs-Schritten in einer ähnlichen Weise wie jener ausgeführt, die verwendet wird, um den Blatttabellen-Offset zu erzeugen.
  • Im Schritt 416 wird der Zweigtabellen-Offset mit einem Zweigtabellen-Basiszeiger kombiniert, um einen Zweigtabellen-Index zu erzeugen. Der Zweigtabellen-Index wird dann verwendet, um im Schritt 418 einen nachfolgenden Stride-Block wiederzugewinnen. Der Schritt 418 kann das Wiedergewinnen eines nachfolgenden Blocks, der einem Stride entspricht, und dann das Indexieren zu einem speziellen Datensatz innerhalb des Strides enthalten. Er kann außerdem das einfache Holen eines nachfolgenden nicht dicht gepackten Blocks in seiner Gesamtheit umfassen.
  • Ein Verfahren, das für die Verarbeitung dicht gepackter Blöcke verwendet werden kann, ist in 17 veranschaulicht, die für erhöhte Klarheit aufgenommen worden ist. 17 veranschaulicht einen Ablaufplan eines Verfahrens zum Bearbeiten eines dicht gepackten Blockes oder Datensatzes unter Verwendung eines Abschnitts der dem Paket entsprechenden Adresse. Im Schritt 502 wird unter Verwendung des Adressenabschnitts ein spezielles Bit in den für den dicht gepackten Datensatz enthaltenen Bitmaps ausgewählt. Im Schritt 504 wird bestimmt, ob das Bit, dem der Adressenabschnitt entspricht, in der Ausdehnungs-Bitmap gesetzt ist. Falls nicht, gibt dies an, dass während dieses Datensatzes ein Blatt erreicht wird, wobei die Schritte 506-516 ausgeführt werden, um die Weiterleitungsentscheidung für dieses Blatt wiederzugewinnen.
  • Im Schritt 506 wird die Blatt-Bitmap unter Verwendung der bitweisen UND-Verknüpfung der Typ-Bitmap mit der bitweisen Inversen der Ausdehnungs-Bitmap erzeugt. Im Schritt 508 wird bestimmt, ob das Bit, dem der Adressenabschnitt entspricht, in der Blatt-Bitmap gesetzt ist. Falls es das ist, geht das Verfahren zum Schritt 510 weiter, während, falls es das nicht ist, das Verfahren zum Schritt 509 weitergeht. Im Schritt 509 wird eine Abtastung nach links in der Blatt-Bitmap ausgeführt, um das nächste gesetzte Bit zu finden. Im Schritt 510 werden unerwünschte Bits in der im Schritt 506 erzeugten Blatt-Bitmap maskiert. Die unerwünschten Bits sind jene Bits rechts vom im Schritt 506 bestimmten gesetzten Bit.
  • Im Schritt 512 wird an den verbleibenden nicht maskierten Bits in der Blatt-Bitmap eine Populationszählung ausgeführt, um einen Blatt-Offset zu bestimmen. Im Schritt 514 wird der Blatt-Offset mit dem Blattbasiszeiger für den Datensatz kombiniert, um einen Blattindex zu erzeugen. Dieser Blattindex wird dann im Schritt 516 verwendet, um die Weiterleitungsentscheidung für das Paket wiederzugewinnen.
  • Falls im Schritt 504 bestimmt wird, dass das Bit in der Ausdehnungs-Bitmap, die dem Abschnitt der Adresse entspricht, gesetzt ist, gibt dies an, dass ein nachfolgender Block geholt werden muss, um die Adresse weiter zu verarbeiten. Als solches geht das Verfahren zum Schritt 518 weiter. Im Schritt 518 wird bestimmt, ob das dem Adressenabschnitt entsprechende Bit außerdem in der Typ-Bitmap gesetzt ist, wobei die Typ-Bitmap angibt, ob der zu holende nachfolgende Block nicht dicht gepackt oder dicht gepackt ist. Falls bei 518 das Bit gesetzt ist, ist ein dicht gepackter Block zu verarbeiten, wobei das Verfahren zum Schritt 520 weitergeht.
  • Im Schritt 520 wird die Bitmap mit dicht gepackten Eintragen durch die bitweise UND-Verknüpfung der Typ- und Ausdehnungs-Bitmaps erzeugt. Die unerwünschten Bits in der Bitmap mit dicht gepackten Einträgen werden im Schritt 523 maskiert, wobei jene Bits rechts von jenem, das durch den Adressenabschnitt ausgewählt wird, maskiert werden. Im Schritt 524 wird eine Populationszählung an den verbleibenden nicht maskierten Bits ausgeführt, um einen dicht gepackten Offset zu bestimmen.
  • Im Schritt 526 wird der dicht gepackte Offset mit einem dicht gepackten Basiszeiger kombiniert, um den dicht gepackten Index zu erzeugen. Vorausgesetzt, dass alle nicht dicht gepackten Blöcke anhand eines Zweigbasiszeigers zusammenhängend gespeichert sind und alle dicht gepackten Blöcke unmittelbar nach den nicht dicht gepackten Blöcken (ebenfalls zusammenhängend) gespeichert sind, kann der dicht gepackte Basiszeiger bestimmt werden, indem die Größe der Anzahl der nicht dicht gepackten Blöcke, die im nachfolgenden Block enthalten sind, zum Zweigbasiszeiger hinzugefügt wird. Folglich kann das Speichern der Anzahl der nicht dicht gepackten Blöcke, die in einem nachfolgenden Stride enthalten ist, wie früher beschrieben worden ist, verwendet werden, um die Zeiger auf nachfolgende dicht gepackte Stride-Blöcke effizient zu erzeugen. Der im Schritt 526 erzeugte dicht gepackte Index kann dann im Schritt 528 verwendet werden, um den nachfolgenden dicht gepackten Stride-Block wiederzugewinnen. Weil das Verarbeitungssystem bereits weiß, dass der nachfolgende Block ein dicht gepackter Block ist, wird er in der Weise geholt und verarbeitet, die für dicht gepackte Blöcke am effizientesten ist.
  • Falls im Schritt 518 bestimmt wird, dass das dem Adressenabschnitt entsprechende Bit in der Typ-Bitmap nicht gesetzt ist, ist der zu holende nachfolgende Datenblock ein nicht dicht gepackter Block. Als solche wird im Schritt 530 eine Bitmap mit nicht dicht gepackten Einträgen erzeugt. Dies wird durch die bitweise UND-Verknüpfung der Ausdehnungs-Bitmap mit der bitweisen Inversen der Typ-Bitmap ausgeführt.
  • Im Schritt 532 werden die unerwünschten Bits in der Bitmap mit nicht dicht gepackten Einträgen maskiert. Im Schritt 534 wird eine Populationszählung ausgeführt, um einen nicht dicht gepackten Offset zu bestimmen. Der nicht dicht gepackte Offset wird im Schritt 536 mit einem nicht dicht gepackten Basiszeiger kombiniert, um einen nicht dicht gepackten Index zu erzeugen. Es wird angegeben, dass, falls die nicht dicht gepackten Datensätze für den nachfolgenden Stride alle vor den dicht gepackten Datensätzen zusammenhängend gespeichert sind, der nicht dicht gepackte Basiszeiger einfach der Zweigbasiszeiger für den nachfolgenden Stride ist. Im Schritt 538 wird der nachfolgende nicht dicht gepackte Stride-Datensatz unter Verwendung des im Schritt 536 erzeugten nicht dicht gepackten Index wiedergewonnen.
  • Die Methodologie für die Verarbeitung eines nicht dicht gepackten Stride-Datensatzes oder -Blocks ist zu jener für die Verarbeitung eines dicht gepackten Datensatzes ähnlich. Die Ausnahme ist, dass statt der Überprüfung der Ausdehnungs- und Typ-Bitmaps an einer speziellen Bitstelle, die einem Abschnitt der Adresse entspricht, zuerst ein Vergleich mit den im nicht dicht gepackten Datensatz enthaltenen Werten ausgeführt werden muss. Falls eine Übereinstimmung bestimmt wird, wird die Bitstelle, die diesem Wert in den Ausdehnungs- und Typ-Bitmaps entspricht, berücksichtigt, um zu bestimmen, ob ein Blatt erreicht worden ist oder ob ein nachfolgender nicht dicht gepackter oder dicht gepackter Datensatz geholt werden muss. Falls keine Übereinstimmung bestimmt wird, wird der nächsthöhere Wert ausgewählt, wobei auf die Bitstelle, die diesem Wert entspricht, in den Bitmaps Bezug genommen wird. Wie früher dargelegt worden ist, ist dies zum Ausführen einer Abtastoperation nach links in einer dicht gepackten Bitmap analog.
  • 18 veranschaulicht eine graphische Darstellung der Bestimmung eines Blatttabellenzeigers 750 unter Verwendung einer Adresse 702, die als ein Beispiel bereitgestellt wird, um die obige Diskussion zu ergänzen. Ein erster Abschnitt der Adresse 704 wird an einen Block angelegt, der dem ersten Stride in der Trie-Struktur entspricht, die die potentiellen Präfixübereinstimmungen für die Adresse speichert. Der erste Abschnitt der Adresse 704 indexiert durch diesen dicht gepackten Block, um den dicht gepackten Datensatz 706 auszuwählen. Obwohl gezeigt ist, dass der erste Stride 8 Bits der Adresse 702 verarbeitet, kann in anderen Ausführungsformen der erste Stride 16 Bits der Adresse verarbeiten. Die Verarbeitung der ersten 16 Bits der Adresse in einem einzigen Stride kann erlauben, dass die durchschnittliche Anzahl der Speicherzugriffe, die erforderlich ist, um eine Adresse zu verarbeiten, auf Kosten zusätzlichen Speichers verringert werden kann. Folglich kann die in jedem Stride eines Systems verarbeitete Anzahl von Bits anhand sowohl von Geschwindigkeit- als auch von Speicherüberlegungen ausgewählt werden.
  • In einer Ausführungsform wird angenommen, dass der erste Block der Trie-Struktur immer als ein dicht gepackter Block codiert ist. Wie für einen Durchschnittsfachmann auf dem Gebiet offensichtlich ist, kann unter einigen Umständen dieser Block außerdem als ein nicht dicht gepackter Block codiert sein, aber in Ausführungsformen, die die nicht dicht gepackte oder die dicht gepackte Codierung des ersten Blockes unterstützen, muss eine externe Variable, die den Typ der verwendeten Codierung angibt, verfügbar sein, so dass die Verarbeitung des ersten Blocks richtig ausgeführt wird.
  • Die Bitmaps 708 für den dicht gepackten Datensatz 706 werden über eine Funktion 707 verarbeitet, die die Bitmaps unter Verwendung eines zweiten Abschnitts der Adresse 705 verarbeitet, um einen Offset 709 zu erzeugen. Es wird angegeben, dass dies voraussetzt, dass die Adresse 702 mehrere Datensätze erfordert, um die Weiterleitungsentscheidung zu bestimmen. Falls die Weiterleitungsentscheidung anhand des dicht gepackten Datensatzes 706 allein bestimmt worden wäre, wäre ein Blatt im Trie während des ersten Stride erreicht worden, wobei keine weitere Verarbeitung notwendig sein würde.
  • Der Offset 709 wird mit dem Zweigtabellen-Basiszeiger 710 für den dicht gepackten Datensatz 706 kombiniert, um einen Zeiger 711 auf nicht dicht gepackten Block zu erzeugen. Der Offset 709 ist vorzugsweise in einer Weise bestimmt worden, die eine Differenzierung zwischen nachfolgenden Blöcken enthält, die nicht dicht gepackt oder dicht gepackt sind. Folglich weil der Prozessor, dass der zu holende nächste Block nicht dicht gepackt ist, wobei er entsprechend geholt und verarbeitet werden kann.
  • Der Zeiger 711 auf einen nicht dicht gepackten Block wird verwendet, um den nicht dicht gepackten Block 720 wiederzugewinnen. Weil der nicht dicht gepackte Block 720 nicht dicht gepackt ist, werden die nachfolgenden acht Bits der Adresse, die den Adressenabschnitt 712 bilden, in Vergleichsoperationen mit jedem der Werte verwendet, die in der Anordnung der Werte des nicht dicht gepackten Blockes 720 enthalten sind. Dieser Vergleich der Werte erzeugt einen Offset 724, der mit dem Zweigtabellen-Basiszeiger 722 für den nicht dicht gepackten Block kombiniert wird, um einen Basiszeiger 726 auf einen nachfolgenden dicht gepackten Block zu erzeugen.
  • Der Basiszeiger 726 auf einen dicht gepackten Block zeigt auf den Anfang eines dicht gepackten Blocks, der durch einen nachfolgenden Abschnitt der Adresse 731 indexiert wird. Diese Indexierung wählt einen speziellen dicht gepackten Datensatz 730 im dicht gepackten Block aus. Die Bitmaps 732 für den dicht gepackten Datensatz 730 werden zusammen mit den Adressenbits 737 der Funktion 707 bereitgestellt, um den Offset 733 zu erzeugen. Dann wird der Offset 733 mit einem Zweigtabellen-Basiszeiger 734 für den dicht gepackten Datensatz 730 kombiniert, um einen Zeiger 735 auf einen nicht dicht gepackten Block zu erzeugen, der den nicht dicht gepackten Block 740 auswählt.
  • Die letzten acht Bits der Adresse 741 werden dann verwendet, um sie mit den in dem nicht dicht gepackten Block gespeicherten Werten zu vergleichen, um den Offset 744 zu erzeugen. Der Offset 744 wird mit dem Blatttabellen-Basiszeiger 742 des nicht dicht gepackten Blocks 740 kombiniert, um den Blatttabellen-Index 750 zu erzeugen. Der Blatttabellen-Index 750 kann dann verwendet werden, um auf die Blatttabelle zuzugreifen und die Weiterleitungsentscheidung für das Paket wiederzugewinnen. Es sollte angegeben werden, dass dicht gepackte und nicht dicht gepackte Blöcke in irgendeiner Reihenfolge kombiniert werden können, wenn eine Adresse verarbeitet wird. 18 veranschaulicht ein Beispiel einer derartigen Kombination.
  • Die vorliegende Erfindung schafft ein Mittel zum Komprimieren der den Strides in einer Trie-Struktur zugeordneten Daten einer Weise, die die Speicherverwendung verbessert und die durchschnittliche Anzahl von Speicherzugriffen verringert, die erforderlich ist, um eine Weiterleitungsentscheidung für ein Paket zu bestimmen. Als solche können Netze mit höheren Geschwindigkeiten ohne die Notwendigkeit für unpraktisch große Speicherstrukturen, um die Trie-Strukturen zu speichern, unterstützt werden. Die Verwendung der komprimierten Datenstrukturen erfordert nur lineare Operationen, wobei folglich die Gesamtkosten und die Komplexität des Paketweiterleitungssystems verringert werden.
  • In der vorhergehenden Beschreibung ist die Erfindung unter Bezugnahme auf spezifische Ausführungsformen beschrieben worden. Ein Durchschnittsfachmann auf dem Gebiet erkennt jedoch, dass verschiedene Modifikationen und Änderungen vorgenommen werden können, ohne vom Umfang der vorliegenden Erfindung abzuweichen, wie er in den folgenden Ansprüchen dargelegt ist. Demzufolge sind die Beschreibung und die Figuren statt in einem einschränkenden Sinn in einem veranschaulichenden Sinn zu betrachten, wobei vorgesehen ist, dass alle derartige Modifikationen im Umfang der vorliegenden Erfindung enthalten sind.
  • Vorteile, andere Vorzüge und Lösungen für Probleme sind oben hinsichtlich spezifischer Ausführungsformen beschrieben worden. Die Vorteile, Vorzüge, Lösungen für Probleme und jedes Element (alle Elemente), die verursachen können, dass irgendein Vorteil, irgendein Vorzug oder irgendeine Lösung auftritt oder deutlicher wird, sind nicht als entscheidendes, erforderliches oder wesentliches Merkmal oder Element irgendeines oder aller Ansprüche auszulegen. Die Begriffe "umfasst", "umfassend" oder irgendeine Variation von ihnen sind so, wie sie hierin verwendet werden, vorgesehen, dass sie eine nicht ausschließliche Angabe abdecken, so dass ein Prozess, ein Verfahren, ein Gegenstand oder eine Vorrichtung, der bzw. die eine Liste von Elementen umfasst, nicht nur diese Elemente enthält, sondern andere Elemente enthalten kann, die nicht ausdrücklich aufgelistet sind oder für einen derartigen Prozess, ein derartiges Verfahren, einen derartigen Gegenstand oder eine derartige Vorrichtung inhärent sind.
  • Wo technischen Merkmalen, die in irgendeinem Anspruch erwähnt sind, Bezugszeichen folgen, sind diese Bezugszeichen nur für den Zweck der Vergrößerung der Verständlichkeit der Ansprüche einbezogen worden, wobei demzufolge derartige Bezugszeichen keine einschränkende Wirkung auf den Umfang jedes Elements besitzen, das durch derartige Bezugszeichen beispielhaft identifiziert wird.

Claims (32)

  1. Verfahren zur Paketlenkung, dadurch gekennzeichnet, dass es umfasst: Empfangen eines Pakets, das eine Adresse enthält; Holen eines ersten Stride-Blocks (70) anhand eines ersten Abschnitts der Adresse, wobei jeder Stride-Block (70) eine erste Bitmap (74), eine zweite Bitmap (72), einen Blatttabellen-Basiszeiger (75) und einen Zweigtabellen-Basiszeiger (76) enthält; Verarbeiten des ersten Stride-Blocks (70), wobei das Verarbeiten eines Stride-Blocks enthält: Bestimmen, ob eine Weiterleitungsentscheidung (242) anhand eines zweiten Abschnitts der Adresse und der ersten Bitmap (74) und/oder der zweiten Bitmap (72) des Stride-Blocks (70) bestimmt wird; wenn die Weiterleitungsentscheidung (72) anhand der ersten Bitmap (74) und/oder der zweiten Bitmap (72) bestimmt wird: Erzeugen eines Blatttabellen-Offsets aus der ersten Bitmap (74) und/oder der zweiten Bitmap (72) und dem zweiten Abschnitt der Adresse; Kombinieren des Blatttabellen-Offsets mit dem Blatttabellen-Basiszeiger (75), um einen Blatttabellen-Index zu erzeugen; und Zugreifen auf eine Blatttabelle unter Verwendung des Blatttabellen-Indexes, um die Weiterleitungsentscheidung (242) wiederzugewinnen; wenn die Weiterleitungsentscheidung nicht anhand des zweiten Abschnitts der Adresse und der ersten Bitmap (74) und/oder der zweiten Bitmap (72) bestimmt wird: Erzeugen eines Zweigtabellen-Offsets aus dem zweiten Abschnitt der Adresse und der ersten Bitmap (74) und/oder der zweiten Bitmap (72); und Kombinieren des Zweigtabellen-Offsets mit dem Zweigtabellen-Basiszeiger (76), um einen Zweigtabellen-Index zu erzeugen; Zugreifen auf eine Zweigtabelle unter Verwendung des Zweigtabellen-Indexes, um einen nachfolgenden Stride-Block (70) wiederzugewinnen; und Verarbeiten des nachfolgenden Stride-Blocks und irgendwelcher nachfolgender Stride-Blöcke, die unter Verwendung weiterer Abschnitte der Adresse erzeugt werden, bis die Weiterleitungsentscheidung (242) wiedergewonnen ist.
  2. Verfahren nach Anspruch 1, bei dem die erste Bitmap eine Blatt-Bitmap (74) ist und die zweite Bitmap eine Zweig-Bitmap (72) ist, wobei die Bestimmung, ob eine Weiterleitungsentscheidung (242) bestimmt wird, ferner das Bestimmen, ob die Weiterleitungsentscheidung (242) anhand des zweiten Abschnitts der Adresse und der Blatt-Bitmap (74) und der Zweig-Bitmap (72) bestimmt wird, umfasst, wobei das Erzeugen des Blatttabellen-Offsets ferner das Erzeugen des Blatttabellen-Offsets aus dem zweiten Abschnitt der Adresse und der Blatt-Bitmap (74) umfasst und wobei das Erzeugen des Zweigtabellen-Offsets ferner das Erzeugen des Zweigtabellen-Offsets aus dem zweiten Abschnitt der Adresse und der Zweig-Bitmap (72) umfasst.
  3. Verfahren nach Anspruch 2, bei dem das Erzeugen des Blatttabellen-Offsets ferner umfasst: Maskieren eines Abschnitts der Blatt-Bitmap (74), um eine maskierte Blatt-Bitmap zu erzeugen, wobei der Abschnitt der Blatt-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse erzeugt wird; und Ausführen einer Populationszählung an der maskierten Blatt-Bitmap, um den Blatt-Offset zu erzeugen.
  4. Verfahren nach Anspruch 2, bei dem das Erzeugen des Zweigtabellen-Offsets ferner umfasst: Maskieren eines Abschnitts der Zweig-Bitmap (72), um eine maskierte Zweig-Bitmap zu erzeugen, wobei der Abschnitt der Zweig-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse bestimmt wird; und Ausführen einer Populationszählung an der maskierten Zweig-Bitmap, um den Zweig-Offset zu erzeugen.
  5. Verfahren nach Anspruch 1, bei dem das Zugreifen auf die Blatttabelle (76) unter Verwendung des Blatttabellen-Indexes, um die Weiterleitungsentscheidung (242) wiederzugewinnen, ferner umfasst: Zugreifen auf die Blatttabelle (76), um einen Zeiger auf die Weiterleitungsentscheidung (242) wiederzugewinnen; und Wiedergewinnen der Weiterleitungsentscheidung (242) unter Verwendung des Zeigers auf die Weiterleitungsentscheidung.
  6. Verfahren nach Anspruch 1, bei dem die erste Bitmap (74) eine Ausdehnungs-Bitmap (95) ist und die zweite Bitmap (72) eine Typ-Bitmap (96) ist, wobei das Bestimmen, ob eine Weiterleitungsentscheidung (242) bestimmt wird, ferner das Bestimmen, ob die Weiterleitungsentscheidung anhand des zweiten Abschnitts der Adresse und der Ausdehnungs-Bitmap (95) bestimmt wird, umfasst, wobei das Erzeugen des Blatttabellen-Offsets ferner das Erzeugen des Blatttabellen-Offsets aus dem zweiten Abschnitt der Adresse sowie aus der Ausdehnungs-Bitmap (95) und der Typ-Bitmap (96) umfasst und wobei das Erzeugen des Zweigtabellen-Offsets ferner das Erzeugen des Zweigtabellen-Offsets aus dem zweiten Abschnitt der Adresse und der Ausdehnungs-Bitmap (95) und der Typ-Bitmap (96) umfasst.
  7. Verfahren nach Anspruch 6, bei dem das Erzeugen des Blatttabellen-Offsets ferner umfasst: Kombinieren der Ausdehnungs-Bitmap (95) und der Typ-Bitmap (96), um eine Blatt-Bitmap (74) zu erzeugen; Maskieren eines Abschnitts der Blatt-Bitmap (76), um eine maskierte Blatt-Bitmap zu erzeugen, wobei der Abschnitt der Blatt-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse bestimmt wird; und Ausführen einer Populationszählung an der maskierten Blatt-Bitmap, um den Blatt-Offset zu erzeugen.
  8. Verfahren nach Anspruch 6, bei dem das Erzeugen des Zweigtabellen-Offsets ferner umfasst: Kombinieren der Ausdehnungs-Bitmap (95) und der Typ-Bitmap (96), um eine Zweig-Bitmap (72) zu erzeugen; Maskieren eines Abschnitts der Zweig-Bitmap (72), um eine maskierte Zweig-Bitmap zu erzeugen, wobei der Abschnitt der Zweig-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse bestimmt wird; und Ausführen einer Populationszählung an der maskierten Zweig-Bitmap, um den Zweig-Offset zu erzeugen.
  9. Verfahren nach Anspruch 8, bei dem die Typ-Bitmap (96) jeden nachfolgenden Stride-Block entweder als einen nicht dicht gepackten Stride-Block oder als einen dicht gepackten Stride-Block identifiziert.
  10. Verfahren nach Anspruch 9, bei dem die nachfolgenden Stride-Blöcke für jeden Stride-Block in zusammenhängenden Mengen gespeichert werden.
  11. Verfahren nach Anspruch 10, bei dem sowohl nicht dicht gepackte Blöcke als auch dicht gepackte Blöcke in den zusammenhängenden Mengen zusammen gruppiert werden.
  12. Paketweiterleitungsprozessor (300), dadurch gekennzeichnet, dass er umfasst: ein Verarbeitungsmodul (302); und einen Speicher (304), der mit dem Verarbeitungsmodul (302) funktional gekoppelt ist, wobei der Speicher (304) Operationsbefehle speichert, derart, dass die Operationsbefehle dann, wenn sie durch das Verarbeitungsmodul (302) ausgeführt werden, das Verarbeitungsmodul (302) dazu veranlassen, die folgenden Funktionen auszuführen: Holen (404) eines ersten Stride-Blocks (70) anhand eines ersten Abschnitts einer Adresse für ein empfangenes Paket, wobei jeder Stride-Block eine erste Bitmap, eine zweite Bitmap, einen Blatttabellen-Basiszeiger und einen Zweigtabellen-Basiszeiger enthält; Verarbeiten des ersten Stride-Blocks (70), wobei die Verarbeitung eines Stride-Blocks umfasst: Bestimmen (406), ob eine Weiterleitungsentscheidung (242) anhand eines zweiten Abschnitts der Adresse und der erste Bitmap (74) und/oder der zweiten Bitmap (72) des Stride-Blocks bestimmt wird; wenn die Weiterleitungsentscheidung anhand der ersten und/oder der zweiten Bitmap bestimmt wird: Erzeugen (408) eines Blatttabellen-Offsets aus der ersten und/oder der zweiten Bitmap (74, 72) und dem zweiten Abschnitt der Adresse; Kombinieren (410) des Blatttabellen-Offsets mit dem Blatttabellen-Basiszeiger (75), um einen Blatttabellen-Index zu erzeugen; und Zugreifen (412) auf eine Blatttabelle unter Verwendung des Blatttabellen-Indexes, um die Weiterleitungsentscheidung (242) wiederzugewinnen; wenn die Weiterleitungsentscheidung nicht anhand des zweiten Abschnitts der Adresse und der ersten und/oder der zweiten Bitmap (74, 72) bestimmt wird: Erzeugen (414) eines Zweigtabellen-Offsets aus dem zweiten Abschnitt der Adresse und der ersten und/oder der zweiten Bitmap (74, 72); Kombinieren (416) des Zweigtabellen-Offsets mit dem Zweigtabellen-Basiszeiger (76), um einen Zweigtabellen-Index zu erzeugen; und Zugreifen (418) auf eine Zweigtabelle (89) unter Verwendung des Zweigtabellen-Indexes, um einen nachfolgenden Stride-Block wiederzugewinnen; und Verarbeiten des nachfolgenden Stride-Blocks und irgendwelcher weiterer nachfolgender Stride-Blöcke, die unter Verwendung weiterer Abschnitte der Adresse erzeugt werden, bis die Weiterleitungsentscheidung (242) wiedergewonnen ist.
  13. Paketlenkungsprozessor nach Anspruch 12, bei dem die erste Bitmap eine Blatt-Bitmap (74) ist und die zweite Bitmap eine Zweig-Bitmap (72) ist, wobei das Bestimmen, ob die Weiterleitungsentscheidung (242) bestimmt wird, ferner das Bestimmen, ob die Weiterleitungsentscheidung anhand des zweiten Abschnitts der Adresse und der Blatt-Bitmap (74) und der Zweig-Bitmap (72) bestimmt wird, umfasst, wobei das Erzeugen des Blatttabellen-Offsets ferner das Erzeugen des Blatttabellen-Offsets aus dem zweiten Abschnitt der Adresse und der Blatt-Bitmap umfasst und wobei das Erzeugen des Zweigtabellen-Offsets ferner das Erzeugen des Zweigtabellen-Offsets aus dem zweiten Abschnitt der Adresse und der Zweig-Bitmap (72) umfasst.
  14. Paketlenkungsprozessor nach Anspruch 13, bei dem das Erzeugen des Blatttabellen-Offsets ferner umfasst: Maskieren eines Abschnitts der Blatt-Bitmap (74), um eine maskierte Blatt-Bitmap zu erzeugen, wobei der Abschnitt der Blatt-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse bestimmt wird; und Ausführen einer Populationszählung an der maskierten Blatt-Bitmap, um den Blatt-Offset zu erzeugen.
  15. Paketlenkungsprozessor nach Anspruch 13, bei dem der Zweigtabellen-Offse ferner umfasst: Maskieren eines Abschnitts der Zweig-Bitmap (72), um eine maskierte Zweig-Bitmap zu erzeugen, wobei der Abschnitt der Zweig-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse bestimmt wird; und Ausführen einer Populationszählung an der maskierten Zweig-Bitmap, um den Zweig-Offset zu erzeugen.
  16. Paketlenkungsprozessor nach Anspruch 12, bei dem das Zugreifen auf die Blatttabelle unter Verwendung des Blatttabellen-Indexes, um die Weiterleitungsentscheidung wiederzugewinnen, ferner umfasst: Zugreifen auf die Blatttabelle, um einen Zeiger auf die Weiterleitungsentscheidung wiederzugewinnen; und Wiedergewinnen der Weiterleitungsentscheidung unter Verwendung des Zeigers auf die Weiterleitungsentscheidung.
  17. Paketlenkungsprozessor nach Anspruch 12, bei dem die erste Bitmap (74) eine Ausdehnungs-Bitmap (95) ist und die zweite Bitmap (72) eine Typ-Bitmap (96) ist, wobei das Bestimmen, ob eine Weiterleitungsentscheidung (242) bestimmt wird, ferner das Bestimmen, ob die Weiterleitungsentscheidung anhand des zweiten Abschnitts der Adresse und der Ausdehnungs-Bitmap (95) bestimmt wird, umfasst, wobei das Erzeugen des Blatttabellen-Offsets ferner das Erzeugen des Blatttabellen-Offsets aus dem zweiten Abschnitt der Adresse und der Ausdehnungs-Bitmap (95) sowie der Typ-Bitmap (96) umfasst und wobei das Erzeugen des Zweigtabellen-Offsets ferner das Erzeugen des Zweigtabellen-Offsets aus dem zweiten Abschnitt der Adresse und der Ausdehnungsbitmap (95) sowie der Typ-Bitmap (96) umfasst.
  18. Paketlenkungsprozessor nach Anspruch 17, bei dem das Erzeugen des Blatttabellen-Offsets ferner umfasst: Kombinieren der Ausdehnungs-Bitmap (95) und der Typ-Bitmap (96), um eine Blatt-Bitmap (74) zu erzeugen; Maskieren eines Abschnitts der Blatt-Bitmap (74), um eine maskierte Blatt-Bitmap zu erzeugen, wobei der Abschnitt der Blatt-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse bestimmt wird; und Ausführen einer Populationszählung an der maskierten Blatt-Bitmap, um den Blatt-Offset zu erzeugen.
  19. Paketlenkungsprozessor nach Anspruch 17, bei dem das Erzeugen des Zweigtabellen-Offsets ferner umfasst: Kombinieren der Ausdehnungs-Bitmap (95) und der Typ-Bitmap (96), um eine Zweig-Bitmap (72) zu erzeugen; Maskieren eines Abschnitts der Zweig-Bitmap (72), um eine maskierte Zweig-Bitmap zu erzeugen, wobei der Abschnitt der Zweig-Bitmap, der maskiert wird, anhand des zweiten Abschnitts der Adresse bestimmt wird; und Ausführen einer Populationszählung an der maskierten Zweig-Bitmap, um den Zweig-Offset zu erzeugen.
  20. Paketlenkungsprozessor nach Anspruch 19, bei dem die Typ-Bitmap (96) jeden nachfolgenden Stride-Block als einen nicht dicht gepackten Stride-Block oder als einen dicht gepackten Stride-Block identifiziert.
  21. Paketlenkungsprozessor nach Anspruch 20, bei dem dicht gepackte Stride-Blöcke aufeinander folgende nicht dicht gepackte Stride-Blöcke und aufeinander folgende dicht gepackte Stride-Blöcke in zusammenhängenden Mengen speichern.
  22. Paketlenkungsschaltung, dadurch gekennzeichnet, dass sie umfasst: einen Paketspeicher (230), der so beschaffen ist, dass er Pakete (202) empfängt und die Pakete speichert, bevor sie weitergeleitet werden, wobei jedes Paket eine Adresse enthält; eine Ausgangsschaltungsanordnung (240), die mit dem Paketspeicher (230) funktional gekoppelt ist, wobei die Ausgangsschaltungsanordnung (240) so beschaffen ist, dass sie für jedes Paket (202) eine Weiterleitungsentscheidung (242) empfängt und das Paket anhand der Weiterleitungsentscheidung (242) an wenigstens einen von mehreren Ausgängen (246) weiterleitet; einen Speicher (220), der so beschaffen ist, dass er eine Weiterleitungstabelle (222) speichert, wobei die Weiterleitungstabelle Weiterleitungsentscheidungen (242) für die Pakete (202) speichert; und einen Bestimmungsblock (200), der mit dem Speicher (220) und mit der Ausgangsschaltungsanordnung (240) funktional gekoppelt ist, wobei der Bestimmungsblock (200) so beschaffen ist, dass er die Adresse für jedes Paket (202) empfängt und die Weiterleitungsentscheidung (242) für das Paket (202) bestimmt, wobei der Bestimmungsblock (200) so beschaffen ist, dass er die Weiterleitungsentscheidung (242) für das Paket (202) für die Ausgangsschaltungsanordnung (240) bereitstellt, derart, dass das Paket (202) zu wenigstens einem der Ausgänge (246) weitergeleitet wird, wobei das Bestimmen der Weiterleitungsentscheidung für das Paket enthält: Holen (404) eines ersten Stride-Blocks aus der Weiterleitungstabelle, die in dem Speicher gespeichert ist, anhand eines ersten Abschnitts einer Adresse für ein empfangenes Paket, wobei jeder Stride-Block eine erste Bitmap, eine zweite Bitmap, einen Blatttabellen-Basiszeiger und einen Zweigtabellen-Basiszeiger enthält; Verarbeiten des ersten Stride-Blocks, wobei das Verarbeiten eines Stride-Blocks enthält: Bestimmen (406), ob eine Weiterleitungsentscheidung anhand eines zweiten Abschnitts der Adresse und der ersten und/oder der zweiten Bitmap des Stride-Blocks bestimmt wird; wenn die Weiterleitungsentscheidung anhand der ersten und/oder der zweiten Bitmap bestimmt wird: Erzeugen (408) eines Blatttabellen-Offsets aus der ersten und/oder der zweiten Bitmap und dem zweiten Abschnitt der Adresse; Kombinieren (410) des Blatttabellen-Offsets mit dem Blatttabellen-Basiszeiger, um einen Blatttabellen-Index zu erzeugen; und Zugreifen (412) auf eine in dem Speicher gespeicherte Blatttabelle unter Verwendung des Blatttabellen-Indexes, um die Weiterleitungsentscheidung wiederzugewinnen; wenn die Weiterleitungsentscheidung nicht anhand des zweite Abschnitts der Adresse und der ersten und/oder der zweiten Bitmap bestimmt wird: Erzeugen (414) eines Zweigtabellen-Offsets aus dem zweiten Abschnitt der Adresse und der ersten und/oder der zweiten Bitmap; Kombinieren (416) des Zweigtabellen-Offsets mit dem Zweigtabellen-Basiszeiger, um einen Zweigtabellen-Index zu erzeugen; und Zugreifen (418) auf eine in dem Speicher gespeicherte Zweigtabelle unter Verwendung des Zweigtabellen-Indexes, um einen nachfolgenden Stride-Block wiederzugewinnen; und Verarbeiten des nachfolgenden Stride-Blocks und irgendwelcher weiterer nachfolgender Stride-Blöcke, die unter Verwendung weiterer Abschnitte der Adresse erzeugt werden, bis die Weiterleitungsentscheidung wiedergewonnen wird.
  23. Paketlenkungsschaltung nach Anspruch 22, die ferner einen Cache-Speicher (210) umfasst, der mit dem Speicher (220) und mit dem Bestimmungsblock (200) funktional gekoppelt ist, wobei der Cache-Speicher (210) wenigstens einen Abschnitt der Weiterleitungstabelle (222) speichert.
  24. Paketlenkungsschaltung nach Anspruch 22, bei der der Speicher (220) mehrere Weiterleitungstabellen (222) speichert, wobei eine bestimmte Weiterleitungstabelle für die Verwendung bei der Bestimmung der Weiterleitungsentscheidung (242) für ein bestimmtes Paket (202) anhand eines in dem bestimmten Paket enthaltenen Feldes und/oder einer Kennung eines Eingangs-Ports in die Paketlenkungsschaltung, über den das bestimmte Paket empfangen wurde, ausgewählt wird.
  25. Paketlenkungsschaltung nach Anspruch 22, bei der der Bestimmungsblock (200) ferner umfasst: ein Verarbeitungsmodul (302); und einen Befehlsspeicher (304), der mit dem Verarbeitungsmodul (302) funktional gekoppelt ist, wobei der Befehlsspeicher (304) Befehle speichert, die, wenn sie von dem Verarbeitungsmodul ausgeführt werden, das Verarbeitungsmodul (302) dazu veranlassen, Funktionen auszuführen, die für die Bestimmung der Weiterleitungsentscheidung (242) für das Paket (202) notwendig sind.
  26. Paketlenkungsschaltung nach Anspruch 22, bei der der Bestimmungsblock (200) ferner eine Zustandsmaschine enthält.
  27. Paketlenkungsschaltungsanordnung nach Anspruch 22, wobei die Paketlenkungsschaltungsanordnung in einem Router enthalten ist.
  28. Paketlenkungsschaltung nach Anspruch 27, bei der die Pakete (202) Internetprotokoll-Pakete (IP-Pakete) sind.
  29. Paketlenkungsschaltung nach Anspruch 22, bei der der Bestimmungsblock (200) Populationszählungen verwendet, um Zweig- und Blatt-Offsets zu bestimmen.
  30. Paketlenkungsschaltung nach Anspruch 22, bei der der Bestimmungsblock (200) lineare Operationen verwendet, um die Weiterleitungsentscheidung (242) für jedes der Pakete (202) zu bestimmen.
  31. Verfahren zur Paketlenkung, dadurch gekennzeichnet, dass es umfasst: Empfangen eines Pakets (202), das eine Adresse enthält; Holen eines ersten Stride-Blocks (70), wobei der erste Stride-Block einen ersten Abschnitt eines längsten Präfix-Übereinstimmungs-Tries codiert, wobei der erste Stride-Block entweder ein nicht dicht gepackter Stride-Block oder ein dicht gepackter Stride-Block ist, wobei nicht dicht gepackte Stride-Blöcke Abschnitte des längsten Präfix-Übereinstimmungs-Tries codieren, die nicht mehr als eine erste Anzahl von Knoten enthalten, und dicht gepackte Stride-Blöcke Abschnitte des längsten Präfix-Übereinstimmungs-Tries codieren, die mehr als die erste Anzahl von Knoten enthalten; Vergleichen eines ersten Abschnitts der Adresse mit einem ersten Abschnitt des ersten Stride-Blocks, um zu bestimmen, ob eine Weiterleitungsentscheidung (242) für das Paket (202) durch den ersten Stride-Block getroffen wird; wenn die Weiterleitungsentscheidung (242) durch den ersten Stride-Block getroffen wird, Bestimmen der Weiterleitungsentscheidung für das Paket; wenn die Weiterleitungsentscheidung für das Paket durch den ersten Stride-Block nicht getroffen wird: Bestimmen eines zweiten Stride-Blocks anhand des ersten Abschnitts der Adresse und eines zweiten Abschnitts des ersten Schritt-Blocks; und Verarbeiten des zweiten Stride-Blocks und irgendwelcher nachfolgender Stride-Blöcke, die bestimmt wurden, bis die Weiterleitungsentscheidung (242) bestimmt wird, wobei die Verarbeitung eines Stride-Blocks das Holen des Stride-Blocks und das Vergleichen eines Abschnitts der Adresse mit einem Abschnitt des Stride-Blocks, um entweder die Weiterleitungsentscheidung oder einen nachfolgenden Stride-Block für die Verarbeitung zu bestimmen, umfasst; und Weiterleiten des Pakets anhand der Weiterleitungsentscheidung (242).
  32. Verfahren nach Anspruch 35, bei dem dann, wenn der erste Stride-Block (70) ein dicht gepackter Stride-Block ist, das Vergleichen eines ersten Abschnitts der Adresse mit dem Abschnitt des ersten Stride-Blocks ferner umfasst: Auswählen eines Stride-Datensatzes aus mehreren Stride-Datensätzen, die in dem ersten Stride-Block enthalten sind, unter Verwendung einer ersten Menge von Bits in dem ersten Abschnitt der Adresse, wobei jeder Stride-Datensatz der mehreren Stride-Datensätze einen Abschnitt von Knoten, die durch den ersten Stride-Block codiert werden, codiert; und Vergleichen einer zweiten Menge von Bits in dem ersten Abschnitt der Adresse mit einem Abschnitt des Stride-Datensatzes, um zu bestimmen, ob die Weiterleitungsentscheidung durch den ersten Stride-Block getroffen wird.
DE60129643T 2000-06-28 2001-04-24 Verfahren und Gerät für die Ermittlung vom längsten Prefixzusammenbringen in einem Kommunikationsnetz Expired - Lifetime DE60129643T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/606,859 US6697363B1 (en) 2000-06-28 2000-06-28 Method and apparatus for longest matching prefix determination in a communication network
US606859 2000-06-28

Publications (2)

Publication Number Publication Date
DE60129643D1 DE60129643D1 (de) 2007-09-13
DE60129643T2 true DE60129643T2 (de) 2008-05-21

Family

ID=24429768

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60129643T Expired - Lifetime DE60129643T2 (de) 2000-06-28 2001-04-24 Verfahren und Gerät für die Ermittlung vom längsten Prefixzusammenbringen in einem Kommunikationsnetz

Country Status (4)

Country Link
US (2) US6697363B1 (de)
EP (1) EP1168723B1 (de)
AT (1) ATE368988T1 (de)
DE (1) DE60129643T2 (de)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3591420B2 (ja) * 2000-04-07 2004-11-17 日本電気株式会社 ルータにおけるキャッシュテーブル管理装置およびプログラム記録媒体
US6697363B1 (en) * 2000-06-28 2004-02-24 Alcatel Canada Inc. Method and apparatus for longest matching prefix determination in a communication network
US6888838B1 (en) * 2000-11-16 2005-05-03 Tensilica, Inc. Fast IP route lookup with configurable processor and compressed routing table
US7274697B2 (en) * 2000-11-16 2007-09-25 Tensilica, Inc. Fast IP route lookup with 16/K and 16/Kc compressed data structures
US7007021B1 (en) * 2000-11-28 2006-02-28 Altera Corporation Data structure and method for pipeline heap-sorting
US6804677B2 (en) 2001-02-26 2004-10-12 Ori Software Development Ltd. Encoding semi-structured data for efficient search and browsing
US7227842B1 (en) 2001-04-24 2007-06-05 Tensilica, Inc. Fast IP packet classification with configurable processor
US6985483B2 (en) * 2001-07-31 2006-01-10 North Carolina State University Methods and systems for fast packet forwarding
US7212531B1 (en) * 2001-11-27 2007-05-01 Marvell Semiconductor Israel Ltd. Apparatus and method for efficient longest prefix match lookup
US7287033B2 (en) * 2002-03-06 2007-10-23 Ori Software Development, Ltd. Efficient traversals over hierarchical data and indexing semistructured data
DE10215719A1 (de) * 2002-04-10 2003-10-30 Philips Intellectual Property Datenspeicher
US7490162B1 (en) 2002-05-15 2009-02-10 F5 Networks, Inc. Method and system for forwarding messages received at a traffic manager
US7899067B2 (en) * 2002-05-31 2011-03-01 Cisco Technology, Inc. Method and apparatus for generating and using enhanced tree bitmap data structures in determining a longest prefix match
US7325071B2 (en) * 2002-06-04 2008-01-29 Lucent Technologies Inc. Forwarding traffic in a network using a single forwarding table that includes forwarding information related to a plurality of logical networks
US20030236793A1 (en) * 2002-06-19 2003-12-25 Ericsson Inc. Compressed prefix tree structure and method for traversing a compressed prefix tree
US7782853B2 (en) * 2002-12-06 2010-08-24 Stmicroelectronics, Inc. Apparatus and method of using fully configurable memory, multi-stage pipeline logic and an embedded processor to implement multi-bit trie algorithmic network search engine
US7099881B2 (en) * 2002-12-06 2006-08-29 Stmicroelectronics, Inc. Method for increasing average storage capacity in a bit-mapped tree-based storage engine by using remappable prefix representations and a run-length encoding scheme that defines multi-length fields to compactly store IP prefixes
US7162481B2 (en) * 2002-12-06 2007-01-09 Stmicroelectronics, Inc. Method for increasing storage capacity in a multi-bit trie-based hardware storage engine by compressing the representation of single-length prefixes
US7774484B1 (en) 2002-12-19 2010-08-10 F5 Networks, Inc. Method and system for managing network traffic
KR20170064003A (ko) * 2003-04-10 2017-06-08 가부시키가이샤 니콘 액침 리소그래피 장치용 운반 영역을 포함하는 환경 시스템
US7415463B2 (en) * 2003-05-13 2008-08-19 Cisco Technology, Inc. Programming tree data structures and handling collisions while performing lookup operations
US7483901B1 (en) * 2003-09-10 2009-01-27 Nextaxiom Technology, Inc. System and method for data transfer between two or more connected software services
US7533387B1 (en) 2003-09-10 2009-05-12 Nextaxiom Technology, Inc. Guaranteed invocation/consumption of nested, composite software services
US7584454B1 (en) 2003-09-10 2009-09-01 Nextaxiom Technology, Inc. Semantic-based transactional support and recovery for nested composite software services
US7702882B2 (en) * 2003-09-10 2010-04-20 Samsung Electronics Co., Ltd. Apparatus and method for performing high-speed lookups in a routing table
US7581205B1 (en) 2003-09-30 2009-08-25 Nextaxiom Technology, Inc. System and method of implementing a customizable software platform
US9614772B1 (en) 2003-10-20 2017-04-04 F5 Networks, Inc. System and method for directing network traffic in tunneling applications
US8225282B1 (en) 2003-11-25 2012-07-17 Nextaxiom Technology, Inc. Semantic-based, service-oriented system and method of developing, programming and managing software modules and software solutions
US7308505B2 (en) * 2003-12-17 2007-12-11 International Business Machines Corporation Method, system and program product for facilitating forwarding of data packets through a node of a data transfer network using multiple types of forwarding tables
US7564841B2 (en) * 2004-03-05 2009-07-21 Samsung Electronics Co., Ltd. Apparatus and method for performing forwarding table searches using consecutive symbols tables
CN101401090B (zh) * 2004-04-19 2010-08-25 加利福尼亚大学董事会 深度包过滤器及深度包过滤方法
US7586895B2 (en) * 2005-04-01 2009-09-08 Cisco Technology, Inc. Performing extended lookups on MAC-based tables including level 3 multicast group destination addresses
US20060288024A1 (en) * 2005-04-28 2006-12-21 Freescale Semiconductor Incorporated Compressed representations of tries
US7430560B1 (en) 2005-07-22 2008-09-30 X-Engines, Inc. Multi-level compressed lock-up tables formed by logical operations to compress selected index bits
US7921088B1 (en) 2005-07-22 2011-04-05 X-Engines, Inc. Logical operations encoded by a function table for compressing index bits in multi-level compressed look-up tables
US8418233B1 (en) 2005-07-29 2013-04-09 F5 Networks, Inc. Rule based extensible authentication
US8533308B1 (en) 2005-08-12 2013-09-10 F5 Networks, Inc. Network traffic management through protocol-configurable transaction processing
US7551609B2 (en) * 2005-10-21 2009-06-23 Cisco Technology, Inc. Data structure for storing and accessing multiple independent sets of forwarding information
US7620646B1 (en) * 2006-01-03 2009-11-17 Emc Corporation Real-time construction of a selection representation for items in tree structures
US7605815B1 (en) 2006-01-03 2009-10-20 Emc Corporation Selection representation methods applied to logical groupings
US7574445B2 (en) * 2006-01-03 2009-08-11 Emc Corporation Generating a selection representation for items in tree structures
US7526495B2 (en) * 2006-01-03 2009-04-28 Emc Corporation Real-time construction of a selection representation for items in tree structures
US8565088B1 (en) 2006-02-01 2013-10-22 F5 Networks, Inc. Selectively enabling packet concatenation based on a transaction boundary
US7446681B2 (en) * 2006-06-14 2008-11-04 Freescale Semiconductor, Inc. Lookup table array compression and indexing
EP2074767A2 (de) * 2006-08-02 2009-07-01 University Of Florida Research Foundation, Inc. Knappe darstellung statischer paketklassifikatoren
US7827218B1 (en) 2006-11-18 2010-11-02 X-Engines, Inc. Deterministic lookup using hashed key in a multi-stride compressed trie structure
US9106606B1 (en) 2007-02-05 2015-08-11 F5 Networks, Inc. Method, intermediate device and computer program code for maintaining persistency
CN101277252A (zh) * 2007-03-30 2008-10-01 迈普(四川)通信技术有限公司 多分支Trie树的遍历方法
US8073046B2 (en) * 2007-06-14 2011-12-06 Zoran Corporation Fast training equalization of a signal by using adaptive-iterative algorithm with main path phase correction
US9178785B1 (en) 2008-01-24 2015-11-03 NextAxiom Technology, Inc Accounting for usage and usage-based pricing of runtime engine
US8429143B2 (en) * 2008-04-25 2013-04-23 International Business Machines Corporation Methods and systems for improving hash table performance
CN101577662B (zh) 2008-05-05 2012-04-04 华为技术有限公司 一种基于树形数据结构的最长前缀匹配方法和装置
US9832069B1 (en) 2008-05-30 2017-11-28 F5 Networks, Inc. Persistence based on server response in an IP multimedia subsystem (IMS)
US9130846B1 (en) 2008-08-27 2015-09-08 F5 Networks, Inc. Exposed control components for customizable load balancing and persistence
US8295279B2 (en) * 2008-12-02 2012-10-23 Electronics And Telecommunications Research Institute Routing method and apparatus for providing different path by service
US8179898B2 (en) * 2009-06-11 2012-05-15 Alcatel Lucent Packet processing using braided tries
US8825936B2 (en) * 2009-08-03 2014-09-02 Quantum Corporation Systems and methods for increasing data volume sparseness
US9747293B2 (en) * 2012-02-28 2017-08-29 Deep Information Sciences, Inc. Method and system for storage and retrieval of information
US8923298B2 (en) * 2012-05-04 2014-12-30 Futurewei Technoligies, Inc. Optimized trie-based address lookup
US10133760B2 (en) * 2015-01-12 2018-11-20 International Business Machines Corporation Hardware for a bitmap data structure for efficient storage of heterogeneous lists
US10681417B2 (en) * 2017-05-12 2020-06-09 Google Llc Enhanced multicast network communications
US11178054B1 (en) 2018-08-22 2021-11-16 Marvell Israel (M.I.S.L) Ltd. Method and apparatus for longest prefix match search

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU620994B2 (en) * 1989-07-12 1992-02-27 Digital Equipment Corporation Compressed prefix matching database searching
US6011795A (en) * 1997-03-20 2000-01-04 Washington University Method and apparatus for fast hierarchical address lookup using controlled expansion of prefixes
US6396842B1 (en) * 1998-04-30 2002-05-28 3Com Corporation Method of searching using longest match based Randix Search Trie with variable length keys and having prefix capability
US6434115B1 (en) * 1998-07-02 2002-08-13 Pluris, Inc. System and method for switching packets in a network
PL200586B1 (pl) 1998-10-16 2009-01-30 Biogen Idec Inc Polipeptydy zawierające mutanty interferonu-beta-1a, kodujące je cząsteczki kwasów nukleinowych, komórki gospodarza transformowane tymi cząsteczkami, sposób wytwarzania polipeptydów, zawierające je kompozycje farmaceutyczne i zastosowania polipeptydów
US6192051B1 (en) * 1999-02-26 2001-02-20 Redstone Communications, Inc. Network router search engine using compressed tree forwarding table
US6560610B1 (en) * 1999-08-10 2003-05-06 Washington University Data structure using a tree bitmap and method for rapid classification of data in a database
US6590898B1 (en) * 1999-12-30 2003-07-08 New Jersey Institute Of Technology Method and apparatus for routing data packets
US6697363B1 (en) * 2000-06-28 2004-02-24 Alcatel Canada Inc. Method and apparatus for longest matching prefix determination in a communication network

Also Published As

Publication number Publication date
EP1168723B1 (de) 2007-08-01
EP1168723A3 (de) 2002-10-30
US20040167923A1 (en) 2004-08-26
US6697363B1 (en) 2004-02-24
ATE368988T1 (de) 2007-08-15
EP1168723A2 (de) 2002-01-02
DE60129643D1 (de) 2007-09-13

Similar Documents

Publication Publication Date Title
DE60129643T2 (de) Verfahren und Gerät für die Ermittlung vom längsten Prefixzusammenbringen in einem Kommunikationsnetz
DE60316696T2 (de) Verfahren zum Routen von Datenpaketen und Routing-Vorrichtung
DE60026229T2 (de) Verfahren und Vorrichtung für Klassifizierung von Datenpaketen
DE69532775T2 (de) Verfahren zur Datenkomprimierung und -Dekomprimierung und zugehöriges Datenkomprimierungs- und Dekomprimierungsgerät
DE19606178C2 (de) Verfahren zum Komprimieren einer Anordnung von Pixelwerten und zum Dekomprimieren einer Anordnung von Pixelwerten aus einem komprimierten Datensatz
DE602004010922T2 (de) Speicher und stromeffizienter mechanismus für schnelles tabellennachschlagen
DE69937248T2 (de) Routers und verfahren für optimale leitwegtabellenkomprimierung
DE60305035T2 (de) Anpassen des längsten präfix unter verwendung von baumartigen "bitmap" datenstrukturen
DE60222575T2 (de) Verfahren zur Generierung eines DFA-Automaten, wobei Übergänge zwecks Speichereinsparung in Klassen gruppiert werden
DE60127695T2 (de) Verfahren zur komprimierung von datenpaketen
DE10301362B4 (de) Blockdatenkompressionssystem, bestehend aus einer Kompressionseinrichtung und einer Dekompressionseinrichtung, und Verfahren zur schnellen Blockdatenkompression mit Multi-Byte-Suche
DE10085387T5 (de) Verfahren und Vorrichtung zur Adresssuche längster Übereinstimmung
DE2614916C2 (de) Konverter zur Codeumwandlung
DE10120644B4 (de) Bilddatenverdichtungsverfahren und -vorrichtung, welche Bilddaten separat durch Modifizieren der Farbe verdichten
DE10196890B4 (de) Verfahren zum Ausführen einer Huffman-Decodierung
DE60107964T2 (de) Vorrichtung zur kodierung und dekodierung von strukturierten dokumenten
DE69937185T2 (de) Verfahren und vorrichtung zum paketbeförderungsnachschlagen mit einer reduzierten anzahl von speicherzugriffen
DE69433620T2 (de) Datenkomprimierungsverfahren
DE69820230T2 (de) N-weg verarbeitung von bitketten in einer datenflussarchitektur
EP1571755A2 (de) Verfahren und Anordnung zur arithmetischen Enkodierung und Dekodierung mit Initialisierung eines Wahrscheinlichkeitsmodelles
DE2208664A1 (de) Verfahren zur Decodierung eines vorsatzfreien Verdichtungscodes veränderlicher Länge
DE60225785T2 (de) Verfahren zur codierung und decodierung eines pfades in der baumstruktur eines strukturierten dokuments
DE19802860A1 (de) Verfahren und Vorrichtung zur kontext-basierten arithmetischen Codieren/Decodieren
DE3137704A1 (de) Vorrichtung zum decodieren eines baumfoermigen codes variabler laenge
DE60024611T2 (de) Längentestvergleich in präfixnachschlagtabellen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition