DE60222575T2 - Verfahren zur Generierung eines DFA-Automaten, wobei Übergänge zwecks Speichereinsparung in Klassen gruppiert werden - Google Patents

Verfahren zur Generierung eines DFA-Automaten, wobei Übergänge zwecks Speichereinsparung in Klassen gruppiert werden Download PDF

Info

Publication number
DE60222575T2
DE60222575T2 DE60222575T DE60222575T DE60222575T2 DE 60222575 T2 DE60222575 T2 DE 60222575T2 DE 60222575 T DE60222575 T DE 60222575T DE 60222575 T DE60222575 T DE 60222575T DE 60222575 T2 DE60222575 T2 DE 60222575T2
Authority
DE
Germany
Prior art keywords
state
characters
alphabet
list
rdfa
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
DE60222575T
Other languages
English (en)
Other versions
DE60222575D1 (de
Inventor
Daniel Newton WYSCHOGROD
Alain Newton ARNAUD
Davod Eric Lexington LEES
Leonid Weston LEIBMAN
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.)
Thales DIS CPL USA Inc
Original Assignee
SafeNet 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
Priority claimed from US10/005,462 external-priority patent/US6856981B2/en
Application filed by SafeNet Inc filed Critical SafeNet Inc
Publication of DE60222575D1 publication Critical patent/DE60222575D1/de
Application granted granted Critical
Publication of DE60222575T2 publication Critical patent/DE60222575T2/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/742Route cache; Operation thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • H04L67/63Routing a service request depending on the request content or context
    • 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/03Protocol definition or specification 
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/40Network security protocols
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/10015Access to distributed or replicated servers, e.g. using brokers
    • 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/30Definitions, standards or architectural aspects of layered protocol stacks
    • H04L69/32Architecture of open systems interconnection [OSI] 7-layer type protocol stacks, e.g. the interfaces between the data link level and the physical level
    • H04L69/322Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions
    • H04L69/327Intralayer communication protocols among peer entities or protocol data unit [PDU] definitions in the session layer [OSI layer 5]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Radar Systems Or Details Thereof (AREA)
  • Debugging And Monitoring (AREA)
  • Communication Control (AREA)

Description

  • Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft allgemein ein System und eine Methode zur Durchführung von Mustererkennung mit hohen Geschwindigkeiten in digitalen Datenströmen.
  • Hintergrund der Erfindung
  • Durch die fortlaufende Verbreitung von vernetzten und verteilten Computersystemen und Anwendungen, die auf diesen Systemen laufen, ergeben sich ein stetig wachsender Fluß und eine stetig zunehmende Vielfalt des Nachrichtenverkehrs zwischen Computereinheiten. Zum Beispiel stellen das Internet und das World Wide Web (das „Netz") global offen zugängliche Einrichtungen zum Austausch von Nachrichtenverkehr bereit. Vernetzte und/oder verteilte Systeme umfassen eine große Vielfalt von Kommunikationsverbindungen, Netzwerk- und Anwendungsservern, Teilnetzwerken und vernetzt arbeitende Elemente, wie beispielsweise Repeater, Switches, Bridges, Router und Gateways.
  • Kommunikation zwischen Einheiten findet gemäß definierten, von den Kommunikationseinheiten verstandenen Kommunikationsprotokollen statt. Diese Protokolle können proprietär oder nicht-proprietär sein. Beispiele von nicht-proprietären Protokollen umfassen X.25 für paketvermittelte Datennetzwerke (PSDNs = packet switched data networks), TCP/IP für das Internet, ein Fertigungsautomatisierungsprotokoll (MAP = manufacturing automation protocol) und ein Bürokommunikationsprotokoll (TOP = technical & office protocol). Andere proprietäre Protokolle können ebenfalls festgelegt sein. Meistens umfassen die Nachrichten Pakete, die eine bestimmte Anzahl von Informationsbytes beinhalten. Das üblichste Beispiel ist das Internetprotokollpaket (IP-Paket), das von unterschiedlichen web- und internetfähigen Einheiten verwendet wird.
  • Eine Hauptfunktion der zahlreichen Netzwerkservern und anderen Netzwerkeinheiten (oder Knoten), wie beispielsweise Switches, Gateways, Router, Lastausgleichern usw., ist das Zuordnen oder Bearbeiten von Nachrichten in Abhängigkeit des Inhalts in den Nachrichtenpaketen. In einer einfachen, starren Form weiß der empfangende Knoten (z. B. ein Switch) genau, wo in der Nachricht (oder in deren Paketen) ein bestimmter Typ von Inhalt (z. B. IP-Adresse) in Abhängigkeit von dem verwendeten Protokoll gefunden werden kann. Üblicherweise kann die Hardware, wie beispielsweise Switches oder/und Router, ihre Funktion nur in Abhängigkeit von festen Positionsheadern, wie beispielsweise TCP- oder IP-Headern, durchführen. Eine weitergehende Paketuntersuchung wird nicht durchgeführt.
  • Manchmal wird Software, die nicht fähig ist, mit Leitungsgeschwindigkeit zu arbeiten, zur Paketnutzlast-Untersuchung verwendet. Diese Software ermöglicht üblicherweise keine große Flexibilität bei der Spezifizierung des zuerkennenden Musters bzw. des Pattern-Matchings und arbeitet in einer Geschwindigkeitsgrößenordnung, die langsamer ist als die Leitungsrate. Es ist daher sehr erwünscht, die Untersuchung und Erkennung von Mustern, beschrieben durch Regulärausdrücke sowohl im Paketheader als auch in der Nutzlast zu ermöglichen.
  • Beispielsweise kann ein derartiger Paketinhalt Adressinformation oder Dateitypinformation enthalten, wobei jede dieser Informationen zur Weiterleitung oder Verarbeitung der Nachricht und/oder ihrer Inhalte verwendet werden kann. Der Inhalt kann durch einen „Regulärausdruck" beschrieben werden, beispielsweise eine Folge von Zeichen, die mit bestimmten Ausdrucksparadigmen übereinstimmen.
  • Der hier verwendete Ausdruck „Regulärausdruck" ist nicht auf eine bestimmte Sprache oder ein bestimmtes Betriebssystem beschränkt und wird im weitesten Sinne aufgefaßt. Ein Regulärausdruck kann in jeder der Vielfalt von Kodierungen oder Sprachen geschrieben werden, die im Fach bekannt sind, beispielsweise Perl, Python, Tcl, grep, awk, sed, egrep oder POSIX-Ausdrücken. Regulärausdrücke können unter Bezugnahme auf „Mastering Regular Expressions", J. E. F. Friedl, O'Reilly, Cambridge, 1997 besser verstanden werden.
  • Für ein inhaltbasiertes Routing wäre die Möglichkeit, Regulärausdrücke zu erkennen bzw. zu matchen, nützlich. Für das Erkennen bzw. Matchen der Regulärausdrücke könnte ein deterministischer endlicher Zustandsautomat (DFA = deterministic finite state automaton) oder ein nicht-deterministischer endlicher Zustandsautomat (NFA = non-deterministic finite state automaton) verwendet werden. Der Ansatz, der durch die vorliegende Erfindung verfolgt wird, folgt einem DFA-Ansatz. Ein üblicher DFA er fordert vor dessen Verwendung auf einem Datenstrom oder Zeichenstrom das Erzeugen einer Zustandsmaschine.
  • Im allgemeinen verarbeitet ein DFA einen Eingangszeichenstrom sequentiell und führt eine Transition basierend auf dem aktuellen Zeichen und dem aktuellen Zustand durch. Dies ist ein herkömmlicher, 1-Byte-pro-Zeiteinheit-Bruteforce-Ansatz. Per Definition ist eine DFA-Transition in einen Folgezustand, basierend auf einem aktuellen Zustand und Eingabezeichen, eindeutig. Beispielsweise zeigt 1A gemäß dem Stand der Technik eine DFA-Zustandsmaschine 100, die einen Regulärausdruck „binky.*\.jpg" implementiert. Die Zustandsmaschine 100 umfaßt die Zustände 0 bis 9, wobei das Auftreten der Zeichen 110 des Regulärausdrucks die iterative Transition von einem Zustand in einen Zustand innerhalb der DFA-Zustandsmaschine 100 beeinflußt.
  • Der Startzustand der DFA-Zustandsmaschine ist durch einen Kreis mit doppelten Linien gekennzeichnet und hat die Zustandsnummer „0". Ein ,Annahme-'Zustand, der ein erfolgreiches Erkennen anzeigt, ist durch einen Kreis mit doppelten Linien gekennzeichnet und hat die Zustandsnummer „9". Beispielsweise muß für eine Transition von dem Zustand 0 zum Zustand 1 das Zeichen „b" in dem Zeichenstrom gefunden werden. Gegeben ein „b", muß für einen Übergang aus dem Zustand 1 in den Zustand 2 das Folgezeichen ein „i" sein.
  • In der 1A werden Transitionen nicht explizit gezeigt, wenn das Eingabezeichen nicht mit dem Zeichen übereinstimmt, das für eine Transition in einen Folgezustand benötigt wird. Beispielsweise tritt, wenn der DFA in den Zustand 1 gelangt und das Folgezeichen ein „x" ist, ein Fehler auf und die Transition in einen Fehlerzustand findet statt. Die 1B zeigt Abschnitt 150 der 1A, wobei Fehlerzustandstransitionen eingezeichnet sind und ein Fehlerzustand durch den „Fehler-"Zustand gekennzeichnet ist. In 1B bezeichnet die Tilde „nicht". Beispielsweise bedeutet das Symbol „~ b", daß das aktuelle Zeichen „nicht b" ist. Nach einmaligem Eintritt in den Fehlerzustand verursachen alle Zeichen eine Transition, die in den Fehlerzustand zurückführt.
  • Einmal im Annahmezustand, wenn zum Beispiel der Zeichenstrom für „binky.*\.jpg" paßt, unternimmt der Empfangsknoten die vorbestimmte Folgeaktion. In diesem Beispiel, in dem der Zeichenstrom einen bestimmten Dateityp (z. B. „.jpg") anzeigt, kann die vorbestimmte Folgeaktion das Senden der entsprechenden Datei an einen bestimmten Server, Prozessor oder System sein.
  • Während solche DFA-Einheiten nützlich sind, sind sie hinsichtlich ihrer Geschwindigkeit beschränkt. Die Geschwindigkeit eines herkömmlichen DFA wird durch die Zykluszeit des bei der Implementierung verwendeten Speichers beschränkt. Beispielsweise muß eine Einheit, die zur Verarbeitung einer OC-192-Quelle fähig ist, 10 Milliarden Bits pro Sekunde (z. B. 10 Gigabits pro Sekunde, Gbps = Gigabits per second) bearbeiten. Diese Geschwindigkeit impliziert, daß ein Byte pro 0,8 Nanosekunden (ns) verarbeitet werden muß, was die Grenzen des aktuellen Speichers überschreitet.
  • Zum Vergleich arbeitet ein aktueller Hochgeschwindigkeits-SDRAM-Chip, der einen herkömmlichen DFA implementiert, mit einer Zykluszeit von 7,5 ns, was 10 mal langsamer ist, als dies für OC-192 nötig wäre. Außerdem wird üblicherweise mehr als eine einzige Speicherreferenz benötigt, was diese Schätzungen optimistisch macht. Daher müssen Nachrichten oder Pakete für die Verarbeitung in Warteschlangen eingereiht werden, was unvermeidbare Verzögerungen verursacht.
  • Das US-Patent 6 856 981 , das am 12.03.2001 angemeldet worden ist, beschreibt ein Echtzeithochgeschwindigkeits-Parallelbytemustererkennungssystem, das relativ niedrige Speicheranforderungen hat. Das System, das in dem US-Patent 6 856 981 gezeigt wird, kann als deterministischer endlicher Echtzeit-Zustandsautomat (im weiteren RDFA = Real-time Deterministic Finite state Automaton) bezeichnet werden. Der RDFA ist fähig, Regulärausdrücke bzw. reguläre Ausdrücke mit hoher Geschwindigkeit in Zeichen zu erkennen, die parallel bereitgestellt werden.
  • Die Zeichen können dem RDFA seriell oder parallel bereitgestellt werden; der RDFA arbeitet jedoch parallel mit den Zeichen. Beispielsweise können jeweils 4 Zeichen gleichzeitig ankommen oder die 4 Zeichen können pro Datenstrom in ein Register in den RDFA seriell eingeleitet werden; der RDFA jedoch arbeitet in beiden Fällen mit den Zeichen parallel. Der Vollständigkeit halber wird der RDFA, der in dem US-Patent 6 856 981 beschrieben wird, auch hier beschrieben.
  • Ein RDFA-System umfaßt ein RDFA-Compiler-Subsystem und ein RDFA-Auswerter-Subsystem. Der RDFA-Compiler erzeugt einen Satz von Tabellen, die von dem RDFA- Auswerter verwendet werden, um das Erkennen bzw. Matching eines Regulärausdrucks in einem ankommenden Datenstrom durchzuführen. Die vorliegende Erfindung richtet sich auf ein Compiler-Subsystem, das die Sätze in Tabellen generiert.
  • In der folgenden Beschreibung ist der Ausdruck „n-Abschlußliste" gleichbedeutend mit einer Liste von Zuständen, die in n-Transitionen von einem aktuellen Zustand erreicht werden können. Der Ausdruck „Alphabettransitionsliste" ist gleichbedeutend mit einer Liste von Transitionen aus einem bestimmten Zustand für jedes der Zeichen in einem Alphabet.
  • In der Veröffentlichung US-A-5 978 801 wird ein Zeichen- und/oder Zeichenketten-Auffindverfahren gezeigt, die jeweils eine Vielzahl von Mustern unter Verwendung eines einzigen deterministischen endlichen Automaten auffindet, der für eine Vielzahl von unterschiedlichen Mustern erstellt worden ist. Dort wird auch ein Verfahren zur Optimierung der Anzahl von Zuständen für das oben bezeichnete Auffindverfahren und eine Speichereinrichtung, die Programmeinträge und Daten hat, die für die Ausführung des oben bezeichneten Zeichen- und/oder Zeichenketten-Auffindverfahrens notwendig ist, und ein Zustandsanzahloptimierungsverfahren gezeigt.
  • Eine Vielzahl von Regulärausdrücken r1, r2, ..., rn, die gleichzeitig durch das Erkennen eines Musters aufgefunden werden sollen, werden vorbereitet und dann erweitert, um einen erweiterten Regulärausdruck ((r1)#1)|((r2)#2)|... ((rn)#n) zu bilden. Ein deterministischer endlicher Automat wird so erzeugt, daß er Zustände behandelt, die Positionen umfassen, die #1, #2, ..., n entsprechen, wobei eine Vielzahl von regulären Ausdrucksmustern durch das Unterscheiden von Übereinstimmungen untereinander aufgefunden wird.
  • Zusammenfassung der Erfindung
  • Die vorliegende Erfindung gibt ein Verfahren und ein System zur Erzeugung von Nachschlagetabellen für eine Regulärausdruck-Erkennungsmaschine gemäß den unabhängigen Ansprüchen an.
  • Die vorliegende Erfindung benutzt Zeichenklassen. Die Zeichenklassen sind eine komprimierte Darstellung des von der Zustandsmaschine verwendeten Alphabets. Viele Mitglieder oder Elemente des Alphabets können durch eine einzige Klasse dargestellt werden. Die Verwendung der Klassen führt zu einer starken Reduktion der Anzahl von Bytes, die zur Darstellung der Symbole bzw. Zeichen in dem Zeichenalphabet benötigt werden, was wiederum zu einer starken Reduktion der Größe der Folgezustand-Nachschlagetabellen führt.
  • Das hierin beschriebene Verfahren und System beginnt mit einem gemäß dem Stand der Technik erzeugten DFA und es erzeugt zwei Tabellenarten. Die erste Tabellenart ist ein Satz von Alphabet-Nachschlagetabellen und die zweite Tabellenart wird als Folgezustandtabelle bezeichnet.
  • Die Alphabet-Nachschlagetabellen werden wie folgt erzeugt. Es wird angenommen, daß die Maschine M Bytes gleichzeitig verarbeitet. Für jeden Zustand in dem DFA werden die 1-Abschluß- bis M-Abschluß-Sätze berechnet. Für jeden der n-Abschlüsse werden sämtliche Zeichen, die von dem gleichen Zustand in dem n-1-Abschluß zu dem gleichen Zustand in dem n-Abschluß führen, zusammengruppiert und mit einer Zeichenklassennummer versehen. Die Alphabet-Nachschlagetabelle bildet ein Zeichen auf dessen Klassennummer ab.
  • Die Folgezustandtabelle wird wie folgt erzeugt. Für einen gegebenen Zustand und eine Folge von M Zeichenklassen wird ein eindeutiger Zustand des DFA erreicht. Die Folgezustandtabelle nimmt einen aktuellen Zustand und eine Folge von M Zeichenklassenindizes auf und erzeugt den Folgezustand von dem DFA.
  • Anders gesagt, die vorliegende Erfindung erzeugt einen Satz von Folgezustandtabellen für eine Zustandsmaschine unter der Verwendung von Zeichenklassencodes. Die Zeichenklassencodes von zahlreichen gleichzeitig ausgewerteten Bytes werden konkatiniert (oder anders verknüpft) und stellen einen Index für einen Eintrag in einer Folgezustandtabelle bereit, der den Folgezustand spezifiziert. Die Folgezustandtabelle ist eine Tabelle von Zeigern, wobei jeder Zeiger auf den entsprechenden Folgezustand zeigt oder jeder Tabelleneintrag der Wert eines entsprechenden Folgezustands ist. Wenn der Folgezustand festgestellt worden ist, bestimmt dies einen bestimmten Satz von Folgezustandtabellen, die für den Folgezustand verwendet werden.
  • Die vorliegende Erfindung umfaßt zahlreiche Merkmale, die mittels der folgenden Beschreibung von Ausführungsbeispielen der Erfindung besser verstanden werden, wenn diese mit den begleitenden Zeichnungen gelesen wird.
  • Kurzbeschreibung der Zeichnungen
  • 1A ist ein Zustandsdiagramm, das einen Regulärausdruck gemäß dem Stand der Technik implementiert;
  • 1B ist ein Teil des Zustandsdiagramms des Regulärausdrucks aus 1A, der einen Fehlerzustand enthält;
  • 2A ist ein Blockdiagramm eines RDFA-Systems gemäß der vorliegenden Erfindung;
  • 2B ist ein Blockdiagramm eines RDFA-Compilers aus dem RDFA-System gemäß 2A;
  • 2C ist ein Blockdiagramm eines RDFA-Auswerters aus dem RDFA-System gemäß 2A;
  • 3 ist eine Darstellung, die eine 4-Byte-Parallelverarbeitung und 4 entsprechende Alphabet-Nachschlagetabellen zeigt, die von dem RDFA-Auswerter gemäß 2C verwendet werden;
  • 4 ist eine Darstellung, die eine Folgezustandtabelle darstellt, die von dem RDFA-Auswerter gemäß 2C verwendet wird;
  • 4A ist eine Darstellung, die den Datenstrom von den Zeichentabellen, der Indextabelle und dem Speicher anzeigt;
  • 5 ist eine Darstellung, die die Zeichen darstellt, die die gleichen Zustandstransitionen verursachen, die von dem RDFA-Compiler gemäß 2B verwendet werden;
  • 6 ist eine Darstellung, die eine Zustandsmaschine darstellt, die von dem RDFA-Compiler gemäß 2B verwendet wird;
  • 6A verdeutlicht eine Anzahl von Zuständen, die durch einen 2-Abschluß erreichbar sind;
  • 7A verdeutlicht einen DFA zur Verarbeitung von 8 Zeichen;
  • 7B verdeutlicht einen RDFA zur parallelen Verarbeitung von 4 Bytes;
  • 8 ist ein Programmflußdiagramm, das zeigt, wie Zeichen-Nachschlagetabellen erzeugt werden;
  • 9 ist ein Programmflußdiagramm, das das Erzeugen einer 1-Zeichen-Nachschlagetabelle zeigt;
  • 10 ist ein Programmflußdiagramm, das zeigt, wie eine n-Abschlußliste generiert wird;
  • 11 ist ein Programmflußdiagramm, das zeigt, wie die Alphabettransitionsliste erzeugt wird;
  • 12 ist ein Programmflußdiagramm, das zeigt, wie Transitionen in Klassen gruppiert werden.
  • Detaillierte Beschreibung von bevorzugten Ausführungsbeispielen
  • Das bevorzugte Ausführungsbeispiel der Erfindung kann mit einem System und Verfahren verwendet werden, das in Echtzeit feststellt, ob ein Satz von Zeichen in einem Datenstrom einen oder mehrere Sätze von vorher festgelegten Regulärausdrücken erfüllt.
  • Der Datenstrom kann von einem üblichen Computer und/oder einer üblichen Netzwerkeinheit, wie beispielsweise einem PC, einem Minicomputer (PDA = Personal Digital Assistant), einer Workstation, einem Telefon, einem Mobiltelefon, einer drahtlosen E-Mail-Einheit, einem Pager, einem netzwerkfähigen Apparat, einem Server, einem Hub, einem Router, einer Bridge, einem Gateway, einer Regler- oder Steuereinheit, Switches, Sicherheitseinheiten, Knoten, Prozessoren oder Ähnlichem empfangen werden. Der Datenstrom kann über jedes aus einer Vielfalt von einem oder mehreren Netzwerken, wie beispielsweise dem Internet, einem Intranet, einem Extranet, einem lokalen Netzwerk (LAN = Lokal Area Network), einem Weitverkehrsnetz (WAN = Wide Area Network), einem Telefonnetz, einem Mobilfunknetz und einem virtuellen privaten Netzwerk (VPN = Virtual Private Network) empfangen werden.
  • Das RDFA-Compiler-Subsystem gemäß der vorliegenden Erfindung erzeugt eine DFA-Zustandsmaschine aus einem vom Benutzer vorgegebenen Regulärausdruck. Die DFA-Zustandsmaschine ist mittels bekannten Techniken derart optimiert, daß sie eine minimale Anzahl von Zuständen umfaßt. Die Anzahl der Bytes, die parallel verarbeitet werden, wird als M festgelegt. Für jeden Zustand in der Zustandsmaschine bestimmt der RDFA-Compiler die durch Bytes repräsentierten Zeichen, die die gleichen Transitionen verursachen. Diese Zeichen, die dieselben Transitionen verursachen, sind in Klassen gruppiert.
  • Daher umfaßt jede Klasse für einen gegebenen aktuellen Zustand der Zustandsmaschine einen Satz von Zeichen, die alle die gleichen Transitionen in einen Satz von Folgezuständen verursachen. Jede Klasse wird durch einen Klassencode repräsentiert. Die für einen Klassencode nötige Anzahl von Bits wird allein anhand der Anzahl von Klassen für einen gegebenen Zustand und eine gegebene Byteposition bestimmt.
  • Während der gleichzeitigen Auswertung bestimmt der RDFA-Auswerter die nächsten M Bytes und holt die entsprechenden M Nachschlagetabellen, die auf die auszuwertenden Bytes angewandt werden. Jedes Byte wird in seiner entsprechenden Nachschlagetabelle nachgeschlagen, um dessen Klassencode zu bestimmen. Wie bereits erwähnt, sind die Klassencodes konkatiniert bzw. verknüpft. Für einen gegebenen aktuellen Zustand findet der RDFA-Auswerter die entsprechende Folgezustandtabelle. Der Code, der von der Verknüpfung der Klassencode-Nachschlageergebnisse resultiert, wird als Index für die ausgewählte Folgezustandtabelle verwendet, um den Folgezustand zu bestimmen, der n Transitionen von dem aktuellen Zustand involviert.
  • Dieser Vorgang wird fortgeführt, bis die Auswertung endet oder der Regulärausdruck erfüllt ist. Der Vorgang kann enden, wenn beispielsweise die auszuwertenden Bytes eine Transition in einen Fehlerzustand verursachen. Wenn ein Regulärausdruck erfüllt ist, kann die nächste Aktion durch das RDFA-System oder einem damit verbundenen System bestimmt werden.
  • 2A zeigt ein bevorzugtes Ausführungsbeispiel eines RDFA-Systems 200. Das System 200 umfaßt zwei Subsysteme. Das erste Subsystem ist ein RDFA-Compiler 210, der die grundlegenden Berechnungen durchführt, die notwendig sind, um die Tabellen für die folgende Echtzeitmustererkennung zu erzeugen. Das zweite System ist ein RDFA-Auswerter 250, der die Auswertung der Zeichen unter Verwendung der RDFA-Tabellen durchführt, die von dem RDFA-Compiler 210 erzeugt worden sind.
  • 2B zeigt die Hauptkomponenten in dem RDFA-Compiler-Subsystem. 2C zeigt die Hauptkomponenten in dem RDFA-Auswerter 250. Die vorliegende Erfindung richtet sich auf die Erzeugung der Nachschlagetabellen, die Transitionen in Klassen gruppieren, und dadurch wesentlich weniger Speicher als vorhergehende DFA-Zustandsmaschinen verwenden.
  • Das RDFA-System 200 umfaßt einen ersten Speicher 220 für den Hochgeschwindigkeitszugriff durch den RDFA-Auswerter 250 während der Auswertung der Zeichen aus dem Datenstrom. Dieser erste Speicher 220 umfaßt einen integrierten oder nicht integrierten Speicher oder jede Kombination dieser. Ein zweiter Speicher 204 umfaßt einen oder mehrere Ausgangsregulärausdrücke, die von Interesse sind, und muß nicht für einen Hochgeschwindigkeitszugriff geeignet sein, außer dies wird in Abhängigkeit von einer bestimmten Anwendung verlangt, in der der RDFA angewandt wird.
  • Der RDFA-Compiler 210, umfaßt, wie weiter unten detaillierter dargestellt, einen Regulärausdruck-Compiler 212, der einen Regulärausdruck aus dem Speicher 204 in eine optimierte Zustandsmaschine umwandelt. Ein Alphabet-Nachschlagetabellen-Generator 214 erzeugt aus dem Regulärausdruck und der Zustandsmaschine abhängig von den Alphabet-Nachschlagetabellen eine Serie von Zuständen. Die Alphabet-Nachschlagetabellen umfassen Codes, die jedem Zeichen in einem anwendbaren Alphabet von Zeichen zugeordnet sind. Diese Alphabet-Nachschlagetabellen werden in dem Hochgeschwindigkeitsspeicher 220 gespeichert. Während der RDFA den Datenstrom verarbeitet (z. B. Zeichen auswertet), wird ein Zeichen, das durch ein Byte unter Auswertung repräsentiert ist, in einer entsprechenden Alphabet-Nachschlagetabelle nachgeschlagen, um dessen zustandsabhängigen Code zu bestimmen, wie es später näher erläutert wird.
  • Ein Folgezustandtabellen-Generator 216 erzeugt eine Tabelle von Folgezuständen der Zustandsmaschine, die während der Auswertung eines Satzes von Zeichen angewandt wird, wobei Folgezustände in Abhängigkeit eines aktuellen Zustands und den Zeichen codes aus den Alphabet-Nachschlagetabellen bestimmt werden. Die Folgezustandtabelle wird bevorzugt in dem Hochgeschwindigkeitsspeicher 220 gespeichert.
  • 2C ist eine Funktionsblockdarstellung eines RDFA-Auswerters 250. Der RDFA-Auswerter 250 umfaßt mehrere funktionale Module, die die Alphabet-Nachschlagetabellen und die Folgetabellen, die von dem RDFA-Compiler 210 generiert worden sind, verwenden. Auf höchster Ebene erfaßt ein Auswählermodul 252 die nötige Anzahl von Bytes (z. B. M Bytes) in einem ankommenden Datenstrom 205. Eine optionale Bitmaske 251 kann den Eingangsstrom filtern, um Wörter aus einer vorher festgelegten Position auszuwählen, so daß es der Verarbeitung ermöglicht wird, bestimmte Teile des Eingangsstroms zu ignorieren.
  • Jedes Bit in der Maske entspricht in diesem Ausführungsbeispiel einem 4-Byte-Abschnitt eines Pakets. Die ausgewählten Bytes werden von einem Alphabet-Nachschlagemodul 254 aufgenommen und dort parallel verarbeitet, wobei das Alphabet-Nachschlagemodul gezielt die Alphabet-Nachschlagetabellen aus dem Speicher 220 anwendet, um einen Zeichenklassencode für jedes Byte zu bestimmen. Zeichen, die die gleiche Zustandstransition verursachen, werden, wie später dargestellt, in Klassen gruppiert, die in den Alphabet-Nachschlagetabellen als Klassencodes einer bestimmten Bitbreite dargestellt sind.
  • Das Alphabet-Nachschlagemodul 254 verknüpft die von den Nachschlagetabellen erhaltenen Klassencodes und reicht den verknüpften Code an ein Folgezustandmodul 256 weiter. Das Folgezustandmodul 256 wendet die verknüpften Klassencodes gezielt auf die entsprechende Folgezustandtabelle aus dem Speicher 220 an, wobei ein aktueller Zustand vorgegeben ist, um einen Mten Folgezustand in der entsprechenden Zustandsmaschine zu bestimmen. Dieser Vorgang wird zumindest solange fortgeführt, bis ein Fehlerzustand oder ein Annahmezustand erreicht ist.
  • Der RDFA-Auswerter 250 kann genauso wie der RDFA-Compiler 210 als Hardware, Software, Firmware oder als beliebige Kombination von diesen implementiert werden. In einer bevorzugten Form ist der RDFA-Auswerter 250 eine chipbasierte Lösung, wobei der Hochgeschwindigkeitsspeicher 220 integriert bzw. auf dem Chip 270 implementiert sein kann. Der Speicher 204 kann ebenfalls ein integrierter Speicher oder ein nicht integrierter Speicher sein, da bei der Erzeugung von dem RDFA Hochgeschwindigkeit nicht unerlässlich ist. Jedoch kann, wenn Hochgeschwindigkeit gefordert wird, der RDFA-Compiler 210 und der Speicher 204 jeweils auf dem Chip bzw. integriert sein.
  • Vorzugsweise ist daher für das Erzielen von hohen Geschwindigkeiten bzw. von Hochgeschwindigkeiten die primäre Funktionalität des RDFA-Auswerters 250 zur Verarbeitung von ankommenden Datenströmen als Hardware ausgebildet. Die Verwendung von Zeigern auf Folgezustandtabellen ermöglicht eher als die unmittelbare Verwendung von Alphabettabellen-Nachschlageergebnissen, eine flexible Speicherverwaltung. Beispielsweise können, wenn integrierter und nicht integrierter Speicher zur Verfügung steht, die Zeiger derart verwendet werden, daß häufiger verwendeter Speicher integriert bzw. auf dem Chip ist, um die RDFA-Leistung zu verbessern. Der RDFA-Ausdruckcompiler 210 wird die Menge des benötigten Speichers bestimmen. Dies ermöglicht es dem Benutzer festzustellen, ob ein bestimmter Satz von Regeln auf den integrierten Speicher passen wird. So kann die speicherbezogene Leistung vorab genau bestimmt werden.
  • Das erfindungsgemäß ausgebildete RDFA-System 200 erfordert relativ moderate Mengen von Hochgeschwindigkeits- oder integriertem Speicher 220, die sicherlich innerhalb der Grenzen der Menge liegen die momentan zur Verfügung steht. Der Speicher 220 wird verwendet, um die Alphabet-Nachschlagetabellen und die Folgezustandtabellen für einen gegebenen Regulärausdruck zu speichern.
  • Anders als ein konventioneller (z. B. 1 Byte pro Zeiteinheit verarbeitender) DFA-Ansatz ist ein RDFA für eine skalierbare Parallelverarbeitung konfiguriert. Im allgemeinen beschränkt, begründet durch die Beschränkungen der anderen relevanten Einheiten, eine Zunahme der Anzahl der parallel zu verarbeitenden Bytes (M) schnellere Verarbeitungsgeschwindigkeiten. In einem hier bereitgestellten, bevorzugten Ausführungsbeispiel verarbeitet der RDFA-Auswerter 250 vier (4) Bytes gleichzeitig (z. B. M = 4); jedoch gibt es keine inhärente Beschränkung für die Anzahl von Bytes, die parallel verarbeitet werden können.
  • Datenstromauswerter
  • 3 zeigt das multiple Alphabet-Nachschlagetabellenkonzept 300 für einen Satz von 4 Bytes 320, die aus dem Datenstrom 205 durch den Byteauswähler 252 ausgewählt werden und als Paralleleingabe 260 von dem Alphabet-Nachschlagemodul 254 (vgl. 2C) aufgenommen werden. Jedes Byte stellt ein Zeichen (z. B. eine Zahl, einen Buchstaben oder ein Symbol) des erlaubten Alphabets dar. In dem bevorzugten Ausführungsbeispiel wird eine getrennte Alphabet-Nachschlagetabelle mit 256 Elementen für jedes der 4 Bytes und für jeden Zustand definiert und in dem Speicher 220 gespeichert. Die Alphabet-Nachschlagetabellen 310 sind in Abhängigkeit vom aktuellen Zustand einer den Regulärausdruck repräsentierenden Zustandsmaschine ausgebildet und werden entsprechend angewandt.
  • In dem Beispiel der 3 wird eine erste Alphabet-Nachschlagetabelle 312 mit einer 2-Bit-Breite verwendet, um ein erstes Byte 322 nachzuschlagen. Eine zweite Alphabet-Nachschlagetabelle 314 mit einer 3-Bit-Breite wird verwendet, um ein zweites Byte 324 nachzuschlagen, und des weiteren werden die Tabellen 316 und 318 für ein drittes Byte 326 bzw. ein viertes Byte 328 verwendet. Die Elemente der Alphabet-Nachschlagetabellen 310 beziehen sich auf die Zustandstransitionen für eine entsprechende Zustandsmaschine, die den Regulärausdruck modelliert.
  • Dementsprechend hängen die Auswahl und die Anwendung der Alphabet-Nachschlagetabellen 310 von dem aktuellen Zustand der Zustandsmaschine ab. Der aktuelle Zustand ist der letzte Zustand, der aus der Verarbeitung der vorhergehenden 4 Zeichen resultiert, wenn diese vorhanden sind. Deshalb wird ein unterschiedlicher Satz von Alphabet-Nachschlagetabellen für jeden aktuellen Zustand verwendet.
  • Die Breiten der Tabelleneinträge für jedes Byte können zwischen einem Zustand und dem nächsten Zustand abhängig von dem Regulärausdruck und dem aktuellen Zustand der entsprechenden Zustandsmaschine variieren. In 3 sind die Tabellenbreiten in Bits wie folgt: 2 Bits für die Tabelle 312, 3 Bits für die Tabelle 314, 3 Bits für die Tabelle 316 und 4 Bits für die Tabelle 318. Die Tabellenbreiten können in einem anderen Zustand beispielsweise 1, 2 und 4 Bits sein.
  • Wenn es beispielsweise für das erste Byte nur zwei mögliche Zeichenklassen gibt, dann muß die Breite der Alphabet-Nachschlagetabelle für dieses Byte nur ein Bit sein. Der aktuelle Zustand wird im Speicher (z. B. im integrierten Speicher 220) gespeichert, um diesen bei der Bestimmung, welche Alphabet-Nachschlagetabelle auf die 4 Bytes 320 angewandt werden, und zur Bestimmung eines Folgezustands zu verwenden.
  • Für jedes der 4 Bytes 320 wird unter Verwendung der Nachschlagetabellen 310 ein unterschiedlicher Klassencode durch das Alphabet-Nachschlagemodul 254 erhalten. Wie bereits angesprochen, werden die Zeichen entsprechend den von den Zeichen verursachten Zustandstransitionen in Klassen gruppiert und Codes, die diesen Klassen (z. B. Klassencodes) zugehören, werden in den Alphabet-Nachschlagetabellen dargestellt. Daher findet, wenn das Byte 322 das Zeichen „a" darstellt, das Alphabet-Nachschlagemodul 254 das dem „a" entsprechende Element in der Alphabet-Nachschlagetabelle 312, und erhält den Klassencode, der mit diesem Element (z. B. Klassencode 01) gespeichert ist. Dies wird für jedes weitere Byte (z. B. Byte 324, 326 und 328) unter Verwendung der entsprechenden Alphabet-Nachschlagetabellen (z. B. Tabellen 314, 316 und 318) durchgeführt.
  • Die Nachschlagetabelleklassencodes für jedes der 4 Bytes sind verknüpft, was für das Beispiel gemäß 3 ein 12-Bit-Ergebnis (z. B. 2 + 3 + 3 + 4 Bits) erzeugt. Nehmen wir beispielsweise an, daß aus den Nachschlagetabellen 310 der 3 folgendes resultiert:
    Ein 2-Bit-Wort „01" aus Tabelle 312, ein 3-Bit-Wort „001" aus Tabelle 314,
    ein 3-Bit-Wort „011" aus Tabelle 316 und
    ein 4-Bit-Wort „0000" aus Tabelle 318.
  • Das sich ergebende verknüpfte 12-Bit-Wort wäre dann „010010110000".
  • Wie in 4 gezeigt, wird der aktuelle Zustand der Zustandsmaschine als Index auf eine Tabelle von Zeigern 410 verwendet. Die Tabelle 410 ist in Abhängigkeit von der Zustandsmaschine des Regulärausdrucks definiert, so daß jeder aktuelle Zustand eine entsprechende Tabelle für mögliche Folgezustände hat. Jeder Zeiger in der Tabelle 410 zeigt auf eine lineare (z. B. eindimensionale (1-D)) Tabelle 420 von Folgezustandwerten (oder eine „Folgezustandtabelle") und das verknüpfte 12-Bit-Ergebnis des parallelen Alphabet-Nachschlagevorgangs wird als Offset oder Index in der ausgewählten Folgetabelle 420 verwendet.
  • Daher wird ein Folgezustandwert aus der Folgezustandtabelle 420 in Abhängigkeit von dem aktuellen Zustand und dem verknüpften 12-Bit-Wort ausgewählt. Der ausgewählte Folgezustandwert entspricht dem Folgezustand. Der Folgezustand, der durch die Auswertung der 4 Bytes bestimmt wird, dient als aktueller Zustand für die Auswertung des Folgesatzes von 4 Bytes.
  • In einer bevorzugten Ausführungsform umfaßt der ausgewählte Folgezustandtabellenwert einen Endzustandcode (z. B. wird das hochwertige Bit auf eine 1 gesetzt), der anzeigt, ob ein Annahmezustand (oder Endzustand) innerhalb der M gerade besuchten Zustände besucht worden ist oder ob nicht. Im allgemeinen ist ein Endzustand ein Zustand, den der Vorgang einnimmt, wenn das Verarbeiten von einem Datenstrom hinsichtlich eines oder mehrerer bestimmter Regulärausdrücke abgeschlossen ist; z. B. zeigt er das Ende der Verarbeitung hinsichtlich eines oder mehreren Regulärausdrücken an.
  • Beispielsweise wird in einer bevorzugten Ausführungsform während der Transition in einen Endzustand das hochwertige Bit, das einem oder mehreren auszuwertenden Bytes zugeordnet ist, auf eine „1" gesetzt. In einer Ausführungsform speichert die Hardware das Wort (z. B. die 4 auszuwertenden Bytes), für das der Endzustand auftrat, und den entsprechenden Offset aus der Nachschlagetabelle (z. B. das verknüpfte 12-Bit-Wort).
  • Danach kann eine nachverarbeitende Software die gespeicherten Daten verwenden, um festzustellen, bei welchem der 4 Bytes der Regulärausdruck endete. Dies ist in vielen Situationen nützlich, in denen nur eine geringe Anzahl von Regulärausdruckerkennungen pro Paket auftritt, so daß die Anzahl derartiger Feststellungen relativ gering ist. In einer anderen Ausführungsform werden die Codes (z. B. die 4 Bytes und das 12-Bit-Wort) in einer Sekundärendzustandtabelle gespeichert, die es der Hardware ermöglicht, unmittelbar festzustellen, welches Byte den Vorgang beendet bzw. abschließt. Der Vorteil, der Hardware solche Feststellungen zu ermöglichen, besteht darin, daß die Feststellung wesentlich schneller von der Hardware durchgeführt werden kann, was bei Hochgeschwindigkeitsechtzeitverarbeitung eine entscheidende Überlegung ist.
  • Entsprechend einem bevorzugten Ausführungsbeispiel werden lediglich drei (3) Speicheroperationen für die Verarbeitung der 4 Bytes benötigt. Diese sind folgende:
    • (i) das Auffinden der Zeichen in den Nachschlagetabellen 310;
    • (ii) das Auffinden des Zeigers in der Tabelle 410; und
    • (iii) das Holen der Folgezustandindizes der Folgezustandstabelle 420.
  • Des weiteren können diese Operationen einfach gepipelined werden, indem das Nachschlagen der Zeichentabelle gleichzeitig mit dem Nachschlagen der letzten 4 Byteergebnisse in der Folgezustandtabelle durchgeführt wird, was eine verbesserte Ver arbeitungszeit ermöglicht, wobei die einzige wesentliche Beschränkung der längste Speicherzugriff ist.
  • Die Vorteile des bevorzugten Ausführungsbeispiels können besser eingesehen werden, wenn die RDFA-Speicheranforderungen mit denen des einfachen DFA-Ansatzes verglichen werden, wobei das Nachschlagen für ein 4-Byte-Wort durchgeführt wird. Bei einer derartigen DFA-Parallelisierung würden 4 Bytes parallel nachgeschlagen. Dies würde eine Tabelle mit 2564 Einträgen, was ungefähr 4.295 Millionen Einträge wären, und eine (4-Byte-)Wordzykluszeit von 3,2 Nanosekunden erfordern, um OC-192-Raten (z. B. 10 Gb) einzuhalten.
  • Aufgrund der Geschwindigkeit und Größe, die zum Einhalten der OC-192-Raten nötig wären, ist es unmöglich, solch ein System mit der aktuellen oder der in naher Zukunft bereitstehenden Speichertechnologie zu implementieren. Des weiteren kann eine derart große Menge von Speicher aktuell nicht integriert bzw. auf einem Chip implementiert werden, da so eine wesentliche Menge von integriertem Speicher gefordert würde, daß dies den Ablauf nicht akzeptabel verlangsamen würde.
  • Man sollte die Speicheranforderungen einer einfachen DFA-Parallelisierung mit der stark reduzierten Menge von Speicher vergleichen, die in der bevorzugten Ausführungsform des RDFA-Systems 200 verwendet wird. Es läßt sich feststellen, daß die einfache DFA-Parallelisierung eine um viele Größenordnungen größere Speichergröße benötigt als ein erfindungsgemäßes RDFA-System 200.
  • 4A ist eine weitere Darstellung der Alphabet-Nachschlagetabellen 310, der Indextabelle 410 und der Folgezustandtabelle 450, wobei deren Wirkungsweise und Interaktion gezeigt wird. Die zu betrachtenden Bytes sind mit dem Bezugszeichen 320 bezeichnet. Die Bytes 320 sind 4-Byte-Segmente aus einem Datenstrom (z. B. 4 Bytes eines Datenpakets, das untersucht wird). Die Alphabet-Nachschlagetabellen 310 haben ein jedem möglichen Zustand einer Zustandsmaschine zugehöriges Segment.
  • In 4A werden die Zustände mit den Bezugszeichen s1, s2, s3, usw. entlang der linken Seite der Figur bezeichnet. In jedem Zustand werden die Bytes 320 verwendet, um den Abschnitt der Tabelle 310 abzufragen, der einem bestimmten Zustand zugeordnet ist. Die Nachschlageoperation erzeugt ein Mehr-Bit-Ergebnis 330. Die Anzahl der Bits in dem Ergebnis 330 (z. B. die Anzahl der Bits, die von der Alphabet-Nach schlagetabelle abgefragt oder von dieser erzeugt werden) ist von den jeweiligen Bytes 320, dem jeweiligen Zustand und der Byteposition abhängig.
  • Die Indextabelle 410 hat einen Eintrag für jeden Zustand. Jeder Eintrag in der Tabelle 410 umfaßt einen Code, der dem System sagt, wie viele Bits von der Ausgabe der Nachschlagetabelle 310 für den jeweiligen Zustand abgefragt werden sollen. (Es sei darauf hingewiesen, daß in einem anderen Ausführungsbeispiel dieser Code in einer getrennten Tabelle gespeichert werden kann, die einen Ort für jeden Zustand ähnlich der Tabelle 410 hat). Für jeden beliebigen Zustand adressieren und lesen konventionelle Adressierungsschaltungen den Inhalt des Ortes in der Tabelle 410, die dem jeweiligen Zustand zugeordnet ist. Die Ergebnis-Bits 330 und die Bits in der aktuellen Zustandsposition der Indextabelle 410 werden verknüpft, um eine Speicheradresse 441 zu erzeugen.
  • Wie an der rechten Seite der 4A angedeutet, haben unterschiedliche Orte in der Indextabelle 410 unterschiedliche Anzahlen von Bits. Die Anzahl der Bits in einem verknüpften Ergebnis 441 (z. B. die Gesamtanzahl von Bits aus der Tabelle 410 und dem Ergebnis 330) ist jedes Mal eine feste Anzahl. In dem bevorzugten Ausführungsbeispiel ist diese Zahl 13. Die Anzahl der Bits gleicht der Anzahl der Bits in einer Speicheradresse für ein bestimmtes System. So zeigt der zugehörige Ort in der Tabelle 410 für jeden Zustand an, wie viele Bits aus der Tabelle 310 abgefragt werden sollen, und er stellt eine Serie von Bits derart bereit, daß sich eine Gesamtzahl von 13 Bits für die Adresse 441 ergibt.
  • Die Adresse 441 ist die Adresse eines Eintrags in der Folgezustandtabelle 450. Die Speicheradresse 441 wird zum Abfragen der Folgezustandtabelle 450 unter Verwendung einer herkömmlichen Adressierungsschaltung benutzt. Der Eintrag in der Folgezustandtabelle 450 an der Adresse 441 zeigt den Folgezustand an. Der Eintrag in der Folgezustandtabelle 450 kann auch eine Markierung umfassen, die anzeigt, ob der Ablauf einen bestimmten Punkt, wie beispielsweise einen Endpunkt, erreicht hat.
  • Der Ablauf wird fortgesetzt, bis die Markierung in der Folgezustandtabelle anzeigt, daß der Ablauf einen Endpunkt erreicht hat oder daß die Bytes erkannt bzw. gematcht worden sind. Wenn eine Übereinstimmung gefunden worden ist, kann die Verarbeitung der Bytes eines bestimmten Pakets entweder beendet werden oder das System kann derart programmiert sein, daß die Verarbeitung anderer Sätze von Bytes 320 in einem Versuch, weitere übereinstimmende Muster zu linden, fortgesetzt wird.
  • Wenn die Folgezustandtabelle nicht anzeigt, daß der Ablauf endet, fährt der Vorgang mit dem Folgezustand fort und der Vorgang wird wiederholt. Wenn der Vorgang wiederholt wird, wird die Information in der entsprechenden Folgezustandtabelle 450 verwendet. Das bedeutet, daß die Zuweisung des Folgezustands in der Tabelle 450 verwendet wird, um die Adresse eines entsprechenden Abschnitts der Nachschlagetabelle 310 zu erzeugen, und daß der Vorgang wiederholt wird. Sobald ein Endzustand erreicht wird, werden die folgenden Daten im Speicherregister 442 gespeichert:
    • 1. Ein Zeiger auf das Wort (4 Bytes) in dem Paket, in dem der Endzustand auftrat.
    • 2. Ein Tabellen-Offset (berechnet aus den Nachschlageergebnissen in der Alphabettabelle und der Indextabelle) in der Folgezustandtabelle.
  • Die gespeicherten Daten können in Nachverarbeitungsoperationen verwendet werden, die bestimmen, welche Aktionen nach der Beendigung des Ablaufs unternommen werden. In einigen Ausführungsbeispielen wird, wenn die Endmarkierung aufgefunden wird, die anzeigt, daß eine Übereinstimmung aufgefunden worden ist, der Ablauf fortgesetzt, so daß weitere Bytes in der Kette bzw. Zeichenkette verarbeitet werden, um weitere Übereinstimmungen für den bestimmten Regulärausdruck zu finden.
  • Im allgemeinen werden nach der Verarbeitung von 4 Bytes 4 weitere Bytes in das Register 320 als Datenstrom eingeleitet, und der Ablauf wird wiederholt. Des weiteren kann man nach einer großen Liste von unterschiedlichen Mustern suchen. Ein Zielmuster kann mehr als 4 Bytes lang sein. Beispielsweise kann, wenn man nach einem 5-Byte-Muster sucht, nachdem 4 der Bytes aufgefunden worden sind, ein weiterer Satz von 4 Bytes als Datenstrom in das Register 320 eingeleitet werden, um festzustellen, ob das 5te Byte an einer entsprechenden Position ist.
  • Das US-Patent 6 856 981 umfaßt einen Anhang auf einer CD, der ein konkretes Beispiel von Daten umfaßt, die in der Tabelle 310, 410 und 450 gespeichert würden, so daß das System eine Folge von Zuständen besuchen würde, um die Zeichenkette „raqia" aufzufinden.
  • Es sei angemerkt, daß für jeden Satz von Regulärausdrücken, die man auffinden möchte, ein unterschiedlicher Satz von Daten in den Tabellen 310, 410 und 450 nötig ist. Das Beispiel ist ein Beispiel, das 5 bestimmte Zeichen in Folge umfaßt. Es sollte jedoch verstanden werden, daß die Erfindung dazu verwendet werden kann, jeden gewünschten Regulärausdruck aufzufinden und nicht nur bestimmte Zeichenfolgen.
  • Die konkreten, in dem referenzierten Anhang gegebenen Daten für die Tabellen 310, 410 und 450 sind zum Auffinden und Erkennen der bestimmten Zeichensequenz „raqia". Die Dateien in dem referenzierten Anhang sind folgendermaßen bezeichnet:
    • (a) Die Daten für die 4-Byte-Positionen für die Tabelle 310 sind wie folgt bezeichnet: _hwct_0.txt, _hwct_1.txt, _hwct_2.txt, _hwct_3.txt.
    • (b) Die Daten für die Indextabelle 410 sind folgendermaßen bezeichnet: _it.txt.
    • (c) Die Daten für die Folgezustandtabelle 450 sind folgendermaßen bezeichnet: _nst.txt.
  • In dem konkreten Beispiel, das in dem referenzierten Anhang bereitgestellt wird, stellen die Tabellen 32 Zustände des Ablaufs bereit. Die 4 Tabellen 310 haben jeweils 32 Abschnitte, jeder mit 256 Einträgen für eine Gesamtzahl von 8.192 Einträgen. Die Indextabelle hat 32 Einträge. Es sei angemerkt, daß die Auswahl von 32 Zuständen eine technische Entscheidung für die bestimmte Anwendung war. In dem bestimmten, in dem referenzierten Anhang angegebenen Beispiel hat die Folgezustandtabelle 450 8.192 Einträge. Es sei jedoch angemerkt, daß die Anzahl der Einträge in dieser Tabelle ebenfalls der Auswahl unterliegt. Die Anzahl der Einträge in der Folgezustandtabelle für jeden Zustand wird durch die Anzahl von Kombinationen der Zeichenklassen für diesen Zustand für alle Bytepositionen bestimmt.
  • Beispielsweise ist, wenn die Anzahl der Zeichenklassen für die Bytepositionen 0 bis 3 gleich 4 bzw. 4 bzw. 8 bzw. 8 ist, die Gesamtanzahl der Folgezustandtabelleeinträge für diesen Zustand 4 × 4 × 8 × 8 = 1.024. Die Gesamtgröße des Adressenbereichs für sämtliche Zustände ist die Summe der Tabellengrößen für jeden Zustand. In einem Ausführungsbeispiel ist die Anzahl der Zeichenklassen an jeder Byteposition eine Potenz von 2, jedoch benutzen andere Ausführungsbeispiele vielfältige, unterschiedliche Anzahlen von Zeichenklassen.
  • Es soll angemerkt werden, daß es für jeden Zustand eine Tabelle für jedes gleichzeitig ausgewertete Byte gibt. In dem beschriebenen Ausführungsbeispiel werden 4 Zeichen gleichzeitig ausgewertet, daher gibt es 4 Tabellen für jeden Zustand. Jede Tabelle hat einen Eintrag für jedes Mitglied des verwendeten Alphabets. Beispielsweise gäbe es, wenn das Alphabet ein ASCII-Alphabet ist, 256 Einträge in jeder Tabelle.
  • Es soll auch angemerkt werden, daß während in dem beschriebenen Ausführungsbeispiel 4 Bytes parallel verarbeitet werden, alternative Ausführungsbeispiele zur Parallelverarbeitung unterschiedlicher Anzahlen von Bits ausgebildet sind. Beispielsweise können andere Ausführungsbeispiele 1, 2, 6, 8, 12 Bytes parallel verarbeiten.
  • Erzeugen der RDFA-Tabellen
  • Zur Erzeugung von einem erfindungsgemäßen RDFA verwandelt der Regulärausdruck-Compiler 212 einen Regulärausdruck aus dem Speicher 204 in einen DFA. Der Regulärausdruck-Compiler 212 kann den DFA derart optimieren, daß die Anzahl der Zustände minimiert werden. Diese Abläufe sind im Fach bekannt, so daß sie hier nicht detailliert diskutiert werden. Der Regulärausdruck-Compiler ist ebenfalls dazu ausgelegt, die Menge des Speichers, die zum Speichern von dem RDFA für einen gegebenen Regulärausdruck benötigt wird, zu bestimmen, wie dies weiter unten detaillierter diskutiert wird. Dies ermöglicht es dem Benutzer zu wissen, ob ein bestimmter Satz von Regeln (z. B. Regulärausdrücken) auf den integrierten Speicher passt. So kann die Leistung akkurat vorhergesagt werden.
  • Der Regulärausdruck-Compiler 212 verringert auch die Redundanz in der Zustandstransition in dem Alphabet, das den Eingangsdatenstrom darstellt, in dem erkannt wird, daß Entscheidungen über eine DFA-Zustands-zu-Zustand-Transition durch das Gruppieren der Zeichen eines Alphabets gemäß der verursachten Transition vereinfacht werden können. Die Liste der Zustände, die in einer einzigen Transition erreicht werden können, wird als ,1-Abschluß' bezeichnet. Der Begriff „n-Abschluß" ist als Liste von Zuständen definiert, die in n-Transitionen aus einem aktuellen Zustand erreicht werden können. Der n-Abschluß kann einfach rekursiv als Liste der Zustände, die von dem n-1-Abschluß erreicht werden können, berechnet werden.
  • Es kann sein, daß es mehr als ein Zeichen gibt, das die gleichen Transitionen in den gleichen n-Abschlußsatz verursacht. In diesem Fall können die Zeichen entsprechend dem Satz von von ihnen verursachten Folgezustandtransitionen in Klassen gruppiert werden. Anstelle der Darstellung der individuellen Zeichen kann jede Klasse beispiels weise durch einen 1-, 2-, 3- oder 4-Bit-Code dargestellt werden. Auf diese Weise wird das anwendbare Alphabet in einer extrem ökonomischen Form dargestellt.
  • Sogar bei sehr komplizierten Ausdrücken kann eine signifikante Komprimierung der für die Darstellung des Alphabets nötigen Anzahl von Bits durch das Abbilden der Zeichenklassen erreicht werden. Beispielsweise kann ein Teil eines Regulärausdrucks, der als „(a|b|c|g)" dargestellt ist, in einem Zustandstransitionsdiagramm 500, wie in 5 gezeigt, dargestellt werden, wobei der Ausdruck folgendes anzeigt: „a" oder „b" oder „c" oder „g". Diese Zeichen verursachen alle eine Transition aus dem Zustand „1" in den Zustand „2", weshalb diese Zeichen alle in eine einzige Klasse abgebildet werden können.
  • Wenn alle anderen Zeichen eine Transition in einen Fehlerzustand verursachen, dann können alle diese Zeichen in eine zweite Klasse eingeteilt werden. Daher können im Zustand 1 der 5 (z. B. der Zustand 1 ist der aktuelle Zustand) alle Transitionen mit einem 1-Bit-Code dargestellt werden, wobei ein Code „1" eine Transition in einen Zustand „2" und ein Code „0" eine Transition in einen Fehlerzustand F (nicht dargestellt) anzeigen könnte. Das Abbilden der Zeichen in Klassen beseitigt die Anforderung Zeichen mit 8 Bits darzustellen, wie dies üblicherweise in konventionellen Ansätzen getan wird.
  • Die Alphabet-Nachschlagetabellen werden durch den Alphabettabellen-Generator 240 der 2B erzeugt. In der vorliegenden Erfindung spiegeln die RDFA-Alphabet-Nachschlagetabellen die Klassen wider, die die Zustandstransitionen darstellen, wobei die 1-, 2-, 3- oder 4-Bit-Darstellung gemäß dem vorliegenden Fall Zeichenklassen verkörpern, die sich auf den aktuellen Zustand beziehen. Im allgemeinen wird für eine Parallelverarbeitung von M Bytes eine getrennte Alphabet-Nachschlagetabelle für jedes der M Bytes errechnet. Des weiteren wird ein unterschiedlicher Satz von Tabellen für jeden Zustand in der Zustandsmaschine errechnet. So werden, wenn eine Zustandsmaschine L Zustände und M Bytes parallel verarbeitet, gemäß dem bevorzugten Ausführungsbeispiel insgesamt (L × M) Alphabet-Nachschlagetabellen erzeugt.
  • Der Algorithmus, der zur Erzeugung der M Zeichenklassentabellen für eine Regulärausdruckzustandsmaschine von einem Startzustand S verwendet wird, sieht wie folgt aus. Die n-te Alphabet-Nachschlagetabelle (wobei 1 ≤ n ≤ M) verwendet den vorhergehend berechneten n-1-Abschluß und berechnet den n-Abschluß. Dann wird für jedes Zeichen in dem Alphabet eine Liste von Nicht-Fehlerzustandstransitionen aus dem n-1-Abschluß zu dem n-Abschluß erzeugt. Dann wird eine Alphabetabbildung durch das Platzieren des ersten Zeichens in dem Alphabet in einer Zeichenklasse 0 initialisiert. Die Transitionsliste für den Folgebuchstaben in dem Alphabet für einen gegebenen Regulärausdruck und für einen gegebenen Satz von n- bis n-1-Abschlußtransitionen wird untersucht und mit den Transitionen für die Zeichenklasse 0 verglichen.
  • Wenn diese identisch sind, dann wird das Zeichen in die Klasse 0 abgebildet, andernfalls wird eine neue Klasse, mit dem Namen „Klasse 1" erzeugt, und das Zeichen wird in diese abgebildet. Dieser Vorgang wird für jedes Zeichen des Alphabets fortgesetzt. So wird, wenn eine Liste von Transitionen für ein Zeichen mit den Transitionen für eine bestehende Klasse übereinstimmen, das Zeichen durch die existierende Klasse dargestellt, andernfalls ist das Zeichen das erste Mitglied einer neuen Klasse.
  • Das Ergebnis dieses Vorgangs ist eine Zeichenklassennummer, die jedem Zeichen in dem Alphabet zugeordnet ist. Die Gesamtanzahl der Klassen für eine bestimmte Nachschlagetabelle kann durch ein P dargestellt werden. Dann kann die Anzahl von Bits, die für die Darstellung jedes Symbols notwendig ist, wie folgt angegeben werden: Q = floor(log2P) + 1.
  • Q ist dabei auch die Breite der Tabelleneinträge in der Alphabet-Nachschlagetabelle (z. B. 1, 2, 3 oder 4 Bits). Beispielsweise ist in der Alphabet-Nachschlagetabelle 312 der 3 der Wert von Q gleich 2. Es muß angemerkt werden, daß Q für jede Alphabet-Nachschlagetabelle getrennt berechnet werden muß und in Abhängigkeit von Zustand und Byteposition variiert.
  • Dieses Konzept kann anhand eines einfachen Beispiels zur Parallelverarbeitung von 2 Bytes (z. B. M = 2) für den Teil 650 der in 6 dargestellten Zustandsmaschine 600 eingesehen werden. Dieses Beispiel konzentriert sich hauptsächlich auf die Nachschlagetabellen und Transitionen für den Nullzustand. Die Zustandsmaschine 600 ist von einem vorher festgelegten Regulärausdruck abgeleitet worden. Der 1-Abschluß für den Zustand 0 ist (1, 2, 3, F), wobei der Fehler-(oder End-)zustand durch das Symbol F (nicht gezeigt) bezeichnet ist. Konkret können, wie in 6 gezeigt, von Zustand 0 Nicht-Fehlertransitionen die in die Zustände 1, 2 oder 3 sein. Die Tabelle 1 stellt eine Liste von Zustandstransitionen aus dem Zustand 0 für ein Alphabet, das die Zeichen „a" bis „k" umfaßt, entsprechend dem Zustandsdiagramm 600 der 6 bereit. Tabelle 1 – Transitionen für das Zustandsdiagramm 600, aus Zustand 0
    Zeichen Transitionen
    A 0 ⇒ 1
    B 0 ⇒ 1
    C 0 ⇒ 2
    D 0 ⇒ 2
    E 0 ⇒ 3
    F 0 ⇒ 3
    G 0 ⇒ 3
    H ∅ Null (oder F Zustand)
    I ∅ Null (oder F Zustand)
    J ∅ Null (oder F Zustand)
    K ∅ Null (oder F Zustand)
  • Bei einer Betrachtung zeigt die Tabelle 1, daß das Alphabet auf 4 unterschiedliche äquivalente Klassen abgebildet ist, was bedeutet, daß 2 Bits für die Breite einer Alphabet-Nachschlagetabelle für einen aktuellen Zustand 0 ausreichen. Daher können hinsichtlich des aktuellen Zustands 0 die folgenden Klassen gebildet werden: Klasse 0 (a, b), Klasse 1 (c, d), Klasse 2 (e, f, g) und eine Fehlerzustandsklasse 3 (h, i, j, k). In der entsprechenden Alphabet-Nachschlagetabelle kann die Klasse 0 durch „00", die Klasse 1 durch „01", die Klasse 2 durch „10" und die Klasse 3 durch „11" wie folgt dargestellt werden: Tabelle 2 – Nachschlagetabelleneinträge, aktueller Zustand 0
    Zeichen Klassencode der Nachschlagetabelle
    a 00
    b 00
    c 01
    d 01
    e 10
    f 10
    g 10
    h 11
    i 11
    j 11
    k 11
  • Der 2-Abschluß für die Zustandsmaschine 600 ist ausgehend von Zustand 0 (1, 4, 5, 6, 7, 8, F). Dementsprechend ist Tabelle 3 eine Liste von Zustandstransitionen für jedes Zeichen des 2-Abschlußes. In diesem Fall zeigt eine Durchsicht der Tabelle 3 die Alphabetabbildung auf 8 äquivalente Zeichenklassen, so daß 3 Bits für diese Tabellenbreite notwendig sind. Es sei angemerkt, daß, wie bereits bei der Q-Wert-Berechnung angezeigt, im Falle der Anzahl von 5 äquivalenten Zeichen die Tabellenbreite immer noch 3 Bits wäre. Tabelle 3 – Transitionen für das Zustandsdiagramm 600 aus Zustand 0
    Zeichen Transitionen
    a 1 ⇒ 4
    b ∅ Null (oder F Zustand)
    c 1 ⇒ 1
    d 1 ⇒ 4 2 ⇒ 5
    e 3 ⇒ 6
    f ∅ Null (oder F Zustand)
    g ∅ Null (oder F Zustand)
    h 2 ⇒ 6
    i 3 ⇒ 7
    j 3 ⇒ 8
    k ∅ Null (oder F Zustand)
  • Der Folgezustandtabellen-Generator 216 der 2B erzeugt für jeden Zustand in der Zustandsmaschine (als aktuellen Zustand) eine Liste von Folgezuständen, die in den Folgezustandtabellen (z. B. Folgezustandtabelle 420 der 4) dargestellt sind. Daher gibt es für jeden aktuellen Zustand eine eindimensionale (1-D) Liste von möglichen Folgezuständen. Unter Verwendung der Zustandsmaschine 600 der 6 nimmt man an, daß der aktuelle Zustand der Zustand 0 und M = 4 ist (wobei M die Anzahl der parallel verarbeiteten Bytes ist).
  • Wie bereits hinsichtlich der Zustände 0 bis 3 weiter oben diskutiert und in den Tabellen 1 bis 3 gezeigt, können die Zeichen, die Zustandstransitionen verursachen, in Klassen abgebildet werden. Die entsprechende Folgezustandtabelle umfaßt Einträge, die bei Vorhandensein des Klassencodes der vier auszuwertenden Zeichen (oder Bytes) aus den Alphabet-Nachschlagetabellen den Folgezustand vorgeben.
  • Man nehme an, daß 4 Bytes, die die 4 Zeichen „c, h, i, e" darstellen, empfangen werden. Wie vorhergehend erwähnt, ist der Klassencode für „c" bei einem aktuellen Zustand 0 gleich 01. Der Klassencode für „h" ist 3 Bits breit, für das zweite von 4 Bytes nehmen wir an, daß sein Klassencode gleich 011 ist. Es wird ebenfalls angenommen, daß für einen aktuellen Zustand 0 und daß für das dritte von 4 Bytes der Klassencode von „i" gleich 0011 ist. Schließlich wird angenommen, daß für einen aktuellen Zustand 0 und für das vierte Byte der Klassencode von „e" gleich 101 ist.
  • Unter der Voraussetzung der oben angegebenen Klassencodes für die 4 Bytes und einem aktuellen Zustand 0, wird die entsprechende Folgezustandtabelle einen dem Zustand 12 entsprechenden Folgezustandwert haben. In einer bevorzugten Form sind die Klassencodes verknüpft (z. B. 010110011101), um einen Index in der Folgezustandtabelle zu bilden, wobei sich der korrekte Folgezustand ergibt. Auf diese Art werden die Folgezustandtabelle und die entsprechende Tabelle von Zeigern, die von dem Zustand adressiert werden, für einen Regulärausdruck erzeugt. Das heißt, der Folgezustands-Generator 216 arbeitet sich durch die Zustandsmaschine und das Alphabet.
  • 6A verdeutlicht das Konzept des 1-Abschlusses und des 2-Abschlusses. Das Beispiel beginnt mit dem 0 Zustand. Die 1-Abschlußzustände sind beispielsweise 1, 2, 3 und F (wobei F ein Fehlerzustand ist). Die 2-Abschlußzustände sind beispielsweise 1, 4, 5, 6, 7, 8 und F.
  • Die 8 bis 12 sind Programmflußdiagramme für ein Compilerprogramm, das die Zeichen-Nachschlagetabellen entsprechend dem oben beschriebenen Algorithmus erzeugt. Anders gesagt, die 8 bis 12 beschreiben einen Compiler, der automatisch einen bestimmten Satz von Nachschlagetabellen 310 zur Erkennung eines bestimmten Regulärausdrucks erzeugt. Die Nomenklatur, die in den 8 bis 12 verwendet wird, ist wie folgt:
    • „b" stellt eine bestimmte Byte-Position dar.
    • „M" ist die Anzahl von parallel verarbeiteten Bytes.
    • „s" stellt einen bestimmten Zustand dar.
    • „L" ist die Anzahl der Zustände.
    • Die Bytes sind von „0" bis „M-1" durchnummeriert.
    • Die Zustände sind von „0" bis „L-1" durchnummeriert.
    • Die Nachschlagetabelle (b, s) bezeichnet die Nachschlagetabelle für das Byte b und den Zustand s.
    • Cb,s bezeichnet die Abschlußliste für das Byte b und den Zustand s.
    • Tb,s bezeichnet die Alphabettransitionsliste für die Abschlußliste Cb,s.
    • Ab,s bezeichnet die Alphabetabbildung, die aus der Transitionsliste Tb,s erzeugt worden ist.
  • Als erstes wird ein DFA zur Erkennung eines bestimmten Ausdrucks, der von Interesse ist, unter Verwendung von herkömmlichen Compilertechniken erzeugt. Der DFA kann mittels jeder der auf diesem Gebiet bekannten Techniken zur Erzeugung von DFAn erzeugt werden. Ein Beispiel entnimmt man dem Buch von A. V. Aho, R. Sethi, J. D. Ullman mit dem Titel „Compilers, Principals, Techniques and Tools", das von Addison-Wesley, Reading, MA, 1986 publiziert worden ist oder dem Buch von A. W. Appel, mit dem Titel „Modern Compiler Implementation in C", das von der Cambridge University Press, Cambridge, England, 1998 publiziert worden ist.
  • Die Anzahl der benötigten Nachschlagetabellen hängt von der Anzahl der parallel zu erkennenden Zeichen (4 in dem bevorzugten Ausführungsbeispiel, das in 4A gezeigt wird) und der Anzahl von Zuständen in der sich ergebenden Zustandsmaschine (32 in dem bestimmten, zur Erkennung des Ausdrucks „raqia" oben angegebenen Beispiel) ab. Für jeden Zustand gibt es eine Tabelle für jede Zeichenposition.
  • Zu Beginn, wie in dem Block 801 gezeigt, werden b und s beide auf 0 gesetzt. Dann wird eine Tabelle, wie im Block 803 angezeigt, erzeugt. Programmflußdiagramme, die den durch Block 803 angegebenen Ablauf durchführen, werden in den 9 bis 12 angegeben.
  • Nachdem die erste Tabelle erzeugt worden ist, wird der Wert b, wie durch den Block 804 angezeigt, erhöht. Wenn b kleiner oder gleich (M-1) ist, wiederholt sich der Vorgang zur Erzeugung der Folgetabelle, wie es durch den Block 805 angezeigt wird. Wenn b größer als (M-1) ist, wird der Wert von s, wie durch den Block 807 angezeigt, erhöht und der Vorgang wiederholt sich, wie es durch den Block 808 angezeigt wird, bis s größer als (L-1) ist.
  • Die Erzeugung jeder Zeichentabelle (Block 803) wird, wie in 9 angezeigt, fortgesetzt. Block 901 zeigt an, daß der gezeigte Vorgang eine Nachschlagetabelle (b, s) erzeugt, die eine Nachschlagetabelle für die Byte-Position b und den Zustand s ist. Wie durch die 8 angezeigt, wird der in 9 gezeigte Vorgang einmal für jedes Byte in jedem Zustand wiederholt. So erzeugt jeder Durchgang durch die Blöcke 903, 905 und 907 die Nachschlagetabelle für eine Byte-Position in einem Zustand.
  • Als erstes wird, wie durch den Block 903 angezeigt, die n-Abschlußliste Cb,s für jedes Byte b und jeden Zustand s erzeugt. Die b-Abschlußliste wird berechnet, wobei „b" die Nummer des Bytes ist und von 1 bis M reicht. Wenn beispielsweise 4 Bytes parallel erkannt werden sollen, werden die 1-Abschlußzustände, die 2-Abschlußzustände, die 3-Abschlußzustände und die 4-Abschlußzustände berechnet. Hinsichtlich des vorhergehenden, in 6 gezeigten Beispiels ist die 1-Abschlußliste für den Zustand 0 (Zustände 1, 2, 3, F) und die 2-Abschlußliste von Zustand 0 (Zustände 1, 4, 5, 6, 7, 8, F). Ein Flußdiagramm für den Vorgang der Erzeugung der Abschlußlisten wird in 10 angegeben.
  • Als nächstes wird, wie durch den Block 905 angezeigt, die Alphabettransitionsliste Tb,s für die Abschlußliste Cb,s erzeugt. Ein Programmflußdiagramm zur Erzeugung der Transitionsliste Tb,s ist in 11 angegeben. Für den jeweiligen zu berücksichtigenden Zustand und das jeweilige zu berücksichtigende Byte erzeugt der Block 905 eine Liste, die die Transitionen für jedes Zeichen des Alphabets angibt. Ein Beispiel dieser sind die vorhergehenden Tabellen 1 und 3.
  • Schließlich wird die Alphabetabbildung Ab,s, die die Klassenliste angibt, für das Byte b und den Zustand s erzeugt. Details, wie dies durchgeführt wird, werden in der 12 angegeben.
  • 10 zeigt den Ablauf der Erzeugung der n-Abschlußliste für einen bestimmten Zustand s. Eine grundlegende Funktion dieser Berechnung ist C1,s, was der „1-Abschluß" von Zustand s ist. Der 1-Abschluß von einem gegebenen Zustand ist lediglich die Liste von Zuständen, die in einer einzigen Transition von dem Zustand s erreicht werden können. Der Entscheidungsblock 732 kontrolliert, ob ein 1-Abschluß berechnet werden muß und, wenn dies so ist, gibt der Block 733 das C1,s zurück. Wenn der Abschluß größer als 1 ist, wird der Block 734 betreten, in dem die (n-1)-Abschlußliste für den Zustand s durch einen rekursiven Aufruf erzeugt wird. Die (n-1)-Abschlußliste für den Zustand s wird ,A' genannt.
  • Ein leerer Satz wird in Block 736 initialisiert und ,Z' benannt. Der Block 738 initialisiert eine Schleifenzählvariable ,i', die für jeden Schleifendurchlauf im Entscheidungsblock 746 kontrolliert wird. Diese Schleife wählt andererseits das i-te-Element der (n-1)-Abschlußliste aus und benennt es in Block 740 mit ,X'. Dann wird in Block 742 der 1-Abschluß von Zustand X berechnet und mit dem Satz ,Z' vereinigt. Der Block 744 erhöht die Schleifenzählvariable. Wenn die Schleife verlassen wird, gibt die Routine den Satz Z zurück.
  • 11 zeigt ein Blockflußdiagramm für ein Programm zur Berechnung der Transitionsliste, wie dies durch den Block 905 der 9 angezeigt wird. Diese Transitionsliste hat für jedes Zeichen in dem Alphabet eine komplette Liste von Transitionen (Start- und Endzustand für jede Transition), die für einen bestimmten Abschluß auftreten können. Der Algorithmus benutzt den DFA und die Abschlußliste der Zustände, Cb,s. Wie in 11 angezeigt, wird jedes Zeichen des Alphabets kontrolliert, um festzustellen, ob es eine Transition aus einem Zustand in der Abschlußliste Cb,s hat.
  • Der Vergleich beginnt mit dem Symbol 0, wie dies durch Block 751 angezeigt wird, und fährt mit den Zeichen in einer Schleife durch die Blöcke 755 und 756 fort. Die Blöcke 753 und 754 zeigen an, daß an der Stelle, an der eine Transition für ein auszuwertendes Zeichen gefunden wird, ein Eintrag in die Alphabettransitionsliste für dieses Zeichen vorgenommen wird. Dieser Eintrag umfaßt das Alphabetzeichen aufgrund dessen eine Transition auftritt, den Zustand von dem ausgehend die Transition auftritt und den Zustand in welchen die Transition führt.
  • Es sei angemerkt, daß es 0- oder Fehlerzustände wie in den Tabellen 1 und 3 gezeigt, geben kann, die besagen, daß es aus einem Zustand für ein bestimmtes Zeichen keine Transitionen gibt. Der Ablauf durchlauft hier die Blöcke 757 und 758 bis jedes Zeichen verarbeitet worden ist und sämtliche Transitionen, die diese verursachen, in der Transitionsliste Tb,s notiert sind.
  • Die 12 ist ein Blockdiagramm zur Erzeugung der Alphabetabbildung für die Transitionsliste. Das bedeutet, 12 zeigt an, wie die Zeichen eines Alphabets in Klassen angeordnet werden. Die Blöcke 772 und 773 zeigen an, daß der Ablauf mit dem gesamten Alphabet fortgesetzt wird. Die Blöcke 774 bis 779 fügen das zu berücksichtigende Zeichen entweder zu einer bestehenden Alphabetklasse hinzu oder erzeugen eine neue Klasse. Der Block 780 ist ein Test, der den Ablauf solange wiederholt, bis sämtliche Symbole des Alphabets berücksichtigt worden sind.
  • Infolge wird eine Erklärung der Erfindung aus einer etwas anderen Perspektive gegeben: Das Ziel der Erfindung ist eine Hochgeschwindigkeitserkennung von Mustern in einem Datenstrom. Muster werden durch ,Regulärausdrücke' beschrieben, wobei dies bedeutet, daß sie relativ allgemein sein können. Beispielsweise werden Dateinamen, denen ,binky' oder ,winkt' voransteht, die ,xyz' enthalten und eine Dateinamenendung ,.jpg' haben durch den folgenden Regulärausdruck gefunden:
    (binky|winky).*xyz.*\.jpg
  • Der RDFA (z. B. die vorliegende Erfindung) kann nach Mustern an bestimmten Orten (verankert) wie beispielsweise für IP Paketfilterung benötigt, suchen, aber er kann auch nicht verankerte Regulärausdrücke irgendwo in einer Paketnutzlast auffinden.
  • Der RDFA hat andere sehr wichtige Merkmale und Vorteile gegenüber einem herkömmlichen DFA. Er ermöglicht eine Parallelverarbeitung von Bytes. Dies ist für Hochgeschwindigkeitsanwendungen, wie beispielsweise OC-192-Transportschichten wichtig, bei denen 4 Bytes aus einem Frame gleichzeitig ankommen. Ein herkömmlicher DFA kann mit der momentan verfügbaren Speichergeschwindigkeit, Zykluszeit und den logischen Verzögerungszeitbegrenzungen nicht einfach für OC-192-Raten implementiert werden.
  • Ein weiterer Vorteil besteht darin, daß der RDFA Speicheranforderungen hat, die für einen bestimmten Satz von zu erkennenden Muster vorher berechnet werden können. Schließlich ermöglicht dessen Gestaltung eine vorteilhafte Trennung des Algorithmus zwischen integriertem und nicht integriertem Speicher, wenn die Ausdruckskomplexität hoch wird.
  • Die Verwendung von Zeigern auf Folgezustandtabellen anstelle von der unmittelbaren Verwendung von Alphabettabellen-Nachschlageergebnissen ermöglicht eine flexible Speicherverwaltung. Beispielsweise können in einem Ausführungsbeispiel mit integriertem und nicht integriertem Speicher Zeiger so verwendet werden, daß ein häufig verwendeter Speicher integriert ist, um die Leistung von dem RDFA zu erhöhen. Der Ausdruck-Compiler kann die benötigte Speichermenge bestimmen. Dies ermöglicht es dem Benutzer festzustellen, ob ein bestimmter Satz von Regeln auf den integrierten Speicher passen wird. So kann die sich auf den Speicher beziehende Leistung vorab genau festgestellt werden.
  • Das bevorzugte Ausführungsbeispiel benötige Speicher-Nachschlageoperationen, um die 4 Bytes zu verarbeiten. Genauer gesagt, es gibt die folgenden Speicher-Nachschlageoperationen:
    • 1. Gleichzeitiges Nachschlagen jedes ankommenden Bytes aus dem Datenstrom.
    • 2. Nachschlagen der Bit-Breite für jedes Alphabet-Nachschlageergebnis, basierend auf dem Zustand.
    • 3. Nachschlagen der Zeiger für die Folgezustandtabelle, basierend auf dem aktuellen Zustand.
    • 4. Nachschlagen des Folgezustands.
  • Diese Speicherabläufe können gepipelined werden, um effektive Verarbeitungszeiten zu ermöglichen, die durch den längsten Speicherzugriff begrenzt sind. Ein weiterer Vorteil des Ansatzes kann festgestellt werden, wenn dessen Speicheranforderungen mit einem einfachen, 4 Bytes parallel verarbeitenden DFA-Ansatz verglichen werden. Ein einfacher Ansatz der DFA-Parallelisierung führt ein Nachschlagen der 4 Bytes parallel durch.
  • Dies wird der Geschwindigkeit von dem RDFA entsprechen, aber eine Tabellengröße von 232 Einträgen, die 4.295 Millionen Einträge hat, und eine Zykluszeit von 3,2 Nanosekunden für das Einhalten der OC-192-Raten (10 Gb/sec) erfordern. Ein derartiges System läßt sich mit der aktuellen oder der in naher Zukunft zur Verfügung stehenden Speichertechnologie basierend auf den Geschwindigkeits- und Größenanforderungen schwierig implementieren. Des weiteren läßt sich ein derart großer Speicher schwierig auf einen Chip mit dem RDFA-Verarbeitungsalgorithmus implementieren.
  • Wichtiges Merkmal von dem RDFA:
  • Eine wichtige Eigenschaft von dem RDFA besteht darin, daß die Bytes in dem Datenstrom als Zeichen in einem Alphabet behandelt und auf Zeichenklassen abgebildet werden. Im allgemeinen können viele Zeichen auf eine einzige Klasse abgebildet werden, so daß die zur Darstellung eines Alphabetzeichens nötige Anzahl von Bits stark reduziert werden kann. Daher verringert sich, wenn zahlreiche Zeichen verknüpft und für ein Nachschlagen einer Folgezustandtabelle verwendet werden, die Größe der Folgezustandtabelle stark, wenn diese mit der Verknüpfung von zahlreichen Bytes verglichen wird.
  • Wichtiges Hardwareimplementierungsmerkmal:
  • Der RDFA hat zahlreiche Anwendungen, von denen einige das Durchsuchen von ganzen Paketen nach nicht verankerten Ausdrücken umfassen. Das oben beschriebene System (z. B. die Maschine) ist für diese Anwendung sehr gut geeignet. Eine andere Anwendung ist das Durchsuchen von festen Headern nach Mustern. Ein besonderes Merkmal, das der RDFA innewohnt, ist eine programmierbare Datenstrombitmaske, wobei jedes Bit mit einem sequentiellen Wort in dem Eingangsdatenstrom eines Pakets korrespondiert.
  • Beispielsweise umfaßt ein Ethernetpaket mit 1.500 Bytes 375 Wörter und eine 375 Bitmaske ermöglicht eine vollkommene Freiheit bei der Auswahl der zu verarbeitenden Wörter. Wenn ein Bit in der Datenstrommaske auf Aktiv gesetzt ist, wird das entsprechende Wort der RDFA zugeführt. Wenn das entsprechende Bit deaktiviert ist, wird das entsprechende Wort von der RDFA nicht wahrgenommen. Dies ermöglicht einen Vorstufenfilter, der einer Leitungsrate entsprechend arbeitet und die Last auf den RDFA stark reduziert, wenn Headerinformation an einer festen Position verarbeitet wird.
  • Des weiteren kann dies zu einer Verringerung der Komplexität und des von dem RDFA verwendeten Speicher führen. Mit der oben beschriebenen Maske muß lediglich eine schmale Untermenge des Datenstroms verarbeitet werden und die verarbeiteten Daten können auf einfache Art behandelt werden, was wiederum bedeutet, daß größere Regelsätze bei einer gegebenen Menge von Speicher verwendet werden können.
  • Verringerung der Tabellengrößen:
  • Der RDFA benötigt einen Satz von Alphabet-Nachschlagetabellen und eine Folgezustandtabelle für jeden Zustand. Wenn die Anzahl der Zustände verringert werden kann, dann kann die Größe der Nachschlagetabellen verringert werden. In einem klassischen DFA durchläuft, wenn M Zeichen verarbeitet werden, die Zustandsmaschine M Zustände. Für einen RDFA ist es anerkannt, daß die parallele Verarbeitung von M Bytes wie eine Blackbox mit einer Transition zwischen zwei Zuständen behandelt werden kann. Beispielsweise will man, wie in 7A gezeigt, die Zeichenkette ,abcdefgh' matchen bzw. erkennen. Berücksichtigt man den Ausgangszustand nicht, so hat ein klassischer DFA 8 innere Zustände die er durchlauft und die den Annahmezustand umfassen.
  • Jedoch werden, wenn 4 Bytes parallel verarbeitet werden, nur zwei Zustände benötigt, um die Transitionen, wie in 7B gezeigt, darzustellen. Es muß festgestellt werden, daß dies ein besonderer Fall ist, da ein zyklischer Graph, der Wildcards oder beliebige Anzahlen von Zeichenwiederholungen darstellt, in einem derartigen Ablauf nicht vorkommen kann. Es muß festgestellt werden, daß der RDFA-Compiler auch die Speicheranforderungen für die RDFA-Systemdaten, die einem bestimmten Regulärausdruck zugehören, bestimmen kann.
  • Das RDFA-System kann in jedem einer Vielfalt von Umständen eingesetzt werden, bei denen es notwendig oder gewünscht ist, das Erfüllen eines Regulärausdrucks in einem Datenstrom zu bestimmen, insbesondere wenn das Bestimmen in Hochgeschwindigkeit, beispielsweise wie von den OC-192-Raten gefordert, durchgeführt wird, wobei der Regulärausdruck verankert oder nicht verankert sein kann. Das RDFA-System kann auch in Bereichen eingesetzt werden, in denen der Verbrauch einer relativ geringen Menge von Speicher durch die RDFA-Systemdaten erfordert oder gewünscht ist.
  • Obwohl dies nicht detailliert besprochen worden ist, können ankommende Daten in Abhängigkeit von einer Vielzahl von Regulärausdrücken gleichzeitig ausgewertet werden. In diesem Fall beendet das Eintreten eines Fehlerzustands für eine Regulärausdruckzustandsmaschine nur den Ablauf hinsichtlich dieses Regulärausdrucks. Die vorliegende Erfindung kann auch in jeder einer Vielfalt von Systemen implementiert werden, beispielsweise zur Erkennung eines Computervirus in einer E-Mail.
  • Die vorliegenden Ausführungsbeispiele müssen daher in jeglicher Hinsicht als illustrativ und nicht als beschränkend angesehen werden, wobei der Umfang der Erfindung durch die beigefügten Ansprüche, und nicht durch die vorhergehende Beschreibung bestimmt wird und daher sämtliche Veränderungen, die in den Sinn- oder den Äquivalenzbereich der Ansprüche fallen, durch diese erfaßt werden sollen.

Claims (14)

  1. Verfahren zum Erzeugen einer Nachschlagetabelle für eine Regulärausdruck-Erkennungsmaschine, die eine Vielzahl von Zeichen gleichzeitig erkennt, wobei die Zeichen aus einem Alphabet stammen und das Verfahren die folgenden Schritte umfaßt: – Erzeugen einer Zustandsmaschine für einen deterministischen, endlichen Zustandsautomaten, DFA-Zustandsmaschine, zum Erkennen von Zeichen eines regulären Ausdrucks; – Erzeugen einer n-Abschlußliste, die eine Liste von Zuständen, die in n-Transitionen aus einem bestimmten Zustand erreichbar sind, für jede Zeichenbyteposition n und jeden Zustand s ist; – Erzeugen einer Alphabettransitionsliste, die eine Liste von Transitionen aus einem bestimmten Zustand für jedes Zeichen in dem Alphabet für jeden Eintrag in der n-Abschlußliste ist; und – Erzeugen eines beschränkten Satzes von Klassen, wobei Zeichen auf dieselbe Klasse abgebildet werden, die einen gleichen Satz von Transitionen für jede Byteposition n und jeden Zustand s haben, und – Erzeugen einer Nachschlagetabelle für jeden Zustand s und jede Byteposition n, wobei die Tabelle einen Wert für jedes Mitglied des Alphabets hat, wobei die Werte aus Mitgliedern des beschränkten Satzes von Klassen bestehen.
  2. Verfahren nach Anspruch 1, wobei der beschränkte Satz von Klassen zur Bestimmung eines Folgezustands der Zustandsmaschine verwendet wird.
  3. Verfahren nach Anspruch 1, wobei x Zeichen gleichzeitig betrachtet werden und die n-Abschlußliste für Werte von n bis x erzeugt wird.
  4. Verfahren nach Anspruch 1, wobei die DFA-Zustandsmaschine optimiert wird.
  5. Verfahren nach Anspruch 1, wobei x Zeichen gleichzeitig betrachtet werden und die Regulärausdruck-Erkennungsmaschine m Zustände hat und x mal m Nachschlagetabellen erzeugt werden.
  6. Verfahren nach Anspruch 1, wobei das Verfahren ferner folgendes umfaßt: ein Verfahren zum Erzeugen von Zustandsnachschlagetabellen für eine Zustandsmaschine für einen deterministischen endlichen Echtzeit-Zustandsautomaten, RDFA, die Zeichen in einem regulären Ausdruck von Zeichen aus einem Alphabet erkennt, wobei der RDFA eine Vielzahl von Zeichen gleichzeitig berücksichtigt, wobei die Nachschlagetabellen Zustandsnachschlagetabellen für den RDFA umfassen und die Größe der Zustandsnachschlagetabellen kleiner als die Größe der Nachschlagetabellen in der DFA-Maschine ist.
  7. Verfahren nach Anspruch 6, wobei n Zeichen gleichzeitig betrachtet werden und die n-Abschlußliste für Werte von n bis zu der Anzahl von gleichzeitig berücksichtigten Zeichen generiert wird.
  8. Verfahren nach Anspruch 6, wobei die DFA-Zustandsmaschine optimiert wird.
  9. Verfahren nach Anspruch 6, wobei n Zeichen gleichzeitig berücksichtigt werden und die Zustandsmaschine m Zustände hat und wobei n mal m Nachschlagetabellen erzeugt werden.
  10. Verfahren nach Anspruch 1, das ferner folgendes umfaßt: ein Verfahren zum Erzeugen von Folgezustand-Nachschlagetabellen für einen deterministischen endlichen Mehrbit-Echtzeit-Automaten, Mehrbit-RDFA, der einen regulären Ausdruck erkennt, der aus Zeichen eines Alphabets besteht, und zum Erzeugen von Nachschlagetabellen für den RDFA unter Verwendung von Klassen, wobei der RDFA weniger Zustände hat als der DFA.
  11. Verfahren nach Anspruch 10, wobei n Zeichen gleichzeitig berücksichtigt werden und die n-Abschlußliste für Werte von n bis zu der Anzahl von gleichzeitig betrachteten Zeichen generiert wird.
  12. Verfahren nach Anspruch 10, wobei die DFA-Zustandsmaschine optimiert wird.
  13. Verfahren nach Anspruch 10, wobei n Zeichen gleichzeitig betrachtet werden und die Zustandsmaschine m Zustände hat und wobei n mal m Nachschlagetabellen erzeugt werden.
  14. System zum Erzeugen von Nachschlagetabellen für eine Zustandsmaschine, die einen regulären Ausdruck von Zeichen in einem Alphabet erkennt, wobei beim Erkennen eine Vielzahl von Zeichen gleichzeitig betrachtet werden, und wobei das System folgendes umfaßt: – Einrichtungen zum Erzeugen einer Zustandsmaschine für einen deterministischen, endlichen Automaten, DFA, um Zeichen eines regulären Ausdrucks zu erkennen; – Einrichtungen zum Erzeugen einer n-Abschlußliste, die eine Liste von Zuständen, die in n-Transitionen aus einem bestimmten Zustand erreichbar sind, für jede Zeichenbyteposition n und jeden Zustand s ist; – Einrichtungen zum Erzeugen einer Alphabettransitionsliste, die eine Liste von Transitionen aus einem bestimmten Zustand für jedes Zeichen in dem Alphabet für jeden Eintrag in der n-Abschlußliste ist; – Einrichtungen zum Erzeugen eines beschränkten Satzes von Klassen durch ein Abbilden von Zeichen auf dieselbe Klasse, die einen gleichen Satz von Transitionen für jede Byteposition n und für jeden Zustand s haben; und – Einrichtungen zum Erzeugen einer Nachschlagetabelle für jeden Zustand s und jede Byteposition n, wobei die Tabelle eine Vielzahl von Werten hat, die einen Wert für jedes Mitglied des Alphabets umfaßt, wobei die Werte aus Mitgliedern des beschränkten Satzes von Klassen bestehen, wobei eine Größe der Nachschlagetabellen kleiner ist als eine Anzahl von Zeichen in dem zu betrachtenden Alphabet.
DE60222575T 2001-09-12 2002-08-08 Verfahren zur Generierung eines DFA-Automaten, wobei Übergänge zwecks Speichereinsparung in Klassen gruppiert werden Expired - Lifetime DE60222575T2 (de)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US32201201P 2001-09-12 2001-09-12
US322012P 2001-09-12
US10/005,462 US6856981B2 (en) 2001-09-12 2001-12-03 High speed data stream pattern recognition
US5462 2001-12-03
US35738402P 2002-02-15 2002-02-15
US357384P 2002-02-15
PCT/US2002/025369 WO2003023553A2 (en) 2001-09-12 2002-08-08 Method of generating a dfa state machine that groups transitions into classes in order to conserve memory

Publications (2)

Publication Number Publication Date
DE60222575D1 DE60222575D1 (de) 2007-10-31
DE60222575T2 true DE60222575T2 (de) 2008-06-26

Family

ID=27357888

Family Applications (1)

Application Number Title Priority Date Filing Date
DE60222575T Expired - Lifetime DE60222575T2 (de) 2001-09-12 2002-08-08 Verfahren zur Generierung eines DFA-Automaten, wobei Übergänge zwecks Speichereinsparung in Klassen gruppiert werden

Country Status (6)

Country Link
US (1) US7240040B2 (de)
EP (1) EP1436718B1 (de)
AT (1) ATE373846T1 (de)
AU (1) AU2002332497A1 (de)
DE (1) DE60222575T2 (de)
WO (1) WO2003023553A2 (de)

Families Citing this family (69)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6959297B2 (en) 2002-04-25 2005-10-25 Winnow Technology, Llc System and process for searching within a data stream using a pointer matrix and a trap matrix
WO2004107111A2 (en) * 2003-05-23 2004-12-09 Sensory Networks, Inc. Efficient representation of state transition tables
US7617091B2 (en) * 2003-11-14 2009-11-10 Xerox Corporation Method and apparatus for processing natural language using tape-intersection
US7181556B2 (en) * 2003-12-23 2007-02-20 Arm Limited Transaction request servicing mechanism
US20050273450A1 (en) * 2004-05-21 2005-12-08 Mcmillen Robert J Regular expression acceleration engine and processing model
US8301788B2 (en) * 2004-09-10 2012-10-30 Cavium, Inc. Deterministic finite automata (DFA) instruction
US8392590B2 (en) * 2004-09-10 2013-03-05 Cavium, Inc. Deterministic finite automata (DFA) processing
US8560475B2 (en) * 2004-09-10 2013-10-15 Cavium, Inc. Content search mechanism that uses a deterministic finite automata (DFA) graph, a DFA state machine, and a walker process
US7356663B2 (en) * 2004-11-08 2008-04-08 Intruguard Devices, Inc. Layered memory architecture for deterministic finite automaton based string matching useful in network intrusion detection and prevention systems and apparatuses
BRPI0419214B1 (pt) * 2004-12-09 2021-09-21 Mitsubishi Denki Kabushiki Kaisha Sistema e método de correspondência de sequência
US7779049B1 (en) * 2004-12-20 2010-08-17 Tw Vericept Corporation Source level optimization of regular expressions
GB2422450A (en) * 2005-01-21 2006-07-26 3Com Corp Pattern-matching using a deterministic finite state machine
GB2422507A (en) * 2005-01-21 2006-07-26 3Com Corp An intrusion detection system using a plurality of finite state machines
US7486673B2 (en) 2005-08-29 2009-02-03 Connect Technologies Corporation Method and system for reassembling packets prior to searching
US20070226362A1 (en) * 2006-03-21 2007-09-27 At&T Corp. Monitoring regular expressions on out-of-order streams
US7512634B2 (en) * 2006-06-05 2009-03-31 Tarari, Inc. Systems and methods for processing regular expressions
US20080022401A1 (en) * 2006-07-21 2008-01-24 Sensory Networks Inc. Apparatus and Method for Multicore Network Security Processing
US7529746B2 (en) * 2006-09-19 2009-05-05 Netlogic Microsystems, Inc. Search circuit having individually selectable search engines
US7539032B2 (en) 2006-09-19 2009-05-26 Netlogic Microsystems, Inc. Regular expression searching of packet contents using dedicated search circuits
US7644080B2 (en) * 2006-09-19 2010-01-05 Netlogic Microsystems, Inc. Method and apparatus for managing multiple data flows in a content search system
US7539031B2 (en) * 2006-09-19 2009-05-26 Netlogic Microsystems, Inc. Inexact pattern searching using bitmap contained in a bitcheck command
US7624105B2 (en) 2006-09-19 2009-11-24 Netlogic Microsystems, Inc. Search engine having multiple co-processors for performing inexact pattern search operations
US7636717B1 (en) 2007-01-18 2009-12-22 Netlogic Microsystems, Inc. Method and apparatus for optimizing string search operations
US7630982B2 (en) 2007-02-24 2009-12-08 Trend Micro Incorporated Fast identification of complex strings in a data stream
US7904961B2 (en) 2007-04-20 2011-03-08 Juniper Networks, Inc. Network attack detection using partial deterministic finite automaton pattern matching
US9021582B2 (en) 2007-04-24 2015-04-28 Juniper Networks, Inc. Parallelized pattern matching using non-deterministic finite automata
US8219508B2 (en) * 2007-07-06 2012-07-10 Lsi Corporation Systems and methods for compressing state machine instructions using a two access indexing scheme
US7991723B1 (en) * 2007-07-16 2011-08-02 Sonicwall, Inc. Data pattern analysis using optimized deterministic finite automaton
US7805393B1 (en) 2007-07-30 2010-09-28 Netlogic Microsystems, Inc. Assigning encoded state values to a search tree according to failure chains
US7610269B1 (en) 2007-07-30 2009-10-27 Netlogic Microsystems, Inc. Method and apparatus for constructing a failure tree from a search tree
US8819217B2 (en) * 2007-11-01 2014-08-26 Cavium, Inc. Intelligent graph walking
US7949683B2 (en) * 2007-11-27 2011-05-24 Cavium Networks, Inc. Method and apparatus for traversing a compressed deterministic finite automata (DFA) graph
US8180803B2 (en) * 2007-11-27 2012-05-15 Cavium, Inc. Deterministic finite automata (DFA) graph compression
US8973824B2 (en) * 2007-12-24 2015-03-10 Dynamics Inc. Cards and devices with magnetic emulators with zoning control and advanced interiors
US8473523B2 (en) 2008-10-31 2013-06-25 Cavium, Inc. Deterministic finite automata graph traversal with nodal bit mapping
US8346697B2 (en) * 2008-10-31 2013-01-01 International Business Machines Corporation Direct construction of finite state machines
US9769149B1 (en) 2009-07-02 2017-09-19 Sonicwall Inc. Proxy-less secure sockets layer (SSL) data inspection
WO2011011916A1 (zh) * 2009-07-29 2011-02-03 华为技术有限公司 正则表达式匹配方法和系统及查找装置
US9083740B1 (en) 2009-09-28 2015-07-14 Juniper Networks, Inc. Network traffic pattern matching using adaptive deterministic finite automata
US9501705B2 (en) 2009-12-15 2016-11-22 Micron Technology, Inc. Methods and apparatuses for reducing power consumption in a pattern recognition processor
US8762320B2 (en) * 2009-12-23 2014-06-24 Drumright Group, Llc. State machine with out-of-order processing functionality and method thereof
WO2011104847A1 (ja) * 2010-02-25 2011-09-01 三菱電機株式会社 通信装置およびアドレス学習方法
US8630290B1 (en) * 2010-04-15 2014-01-14 ARRIS Enterprise, Inc. Using a DFA unit for classification list processing
US8862603B1 (en) 2010-11-03 2014-10-14 Netlogic Microsystems, Inc. Minimizing state lists for non-deterministic finite state automatons
US20120158635A1 (en) * 2010-12-16 2012-06-21 International Business Machines Corporation Storage efficient programmable state machine
US8688608B2 (en) * 2011-06-28 2014-04-01 International Business Machines Corporation Verifying correctness of regular expression transformations that use a post-processor
US9009448B2 (en) * 2011-08-17 2015-04-14 Intel Corporation Multithreaded DFA architecture for finding rules match by concurrently performing at varying input stream positions and sorting result tokens
US8990232B2 (en) * 2012-05-15 2015-03-24 Telefonaktiebolaget L M Ericsson (Publ) Apparatus and method for parallel regular expression matching
RU2608464C2 (ru) * 2012-09-28 2017-01-18 Телефонактиеболагет Лм Эрикссон (Пабл) Устройство, способ и сетевой сервер для обнаружения структур данных в потоке данных
US9268881B2 (en) 2012-10-19 2016-02-23 Intel Corporation Child state pre-fetch in NFAs
US9117170B2 (en) 2012-11-19 2015-08-25 Intel Corporation Complex NFA state matching method that matches input symbols against character classes (CCLs), and compares sequence CCLs in parallel
US9665664B2 (en) 2012-11-26 2017-05-30 Intel Corporation DFA-NFA hybrid
US9304768B2 (en) 2012-12-18 2016-04-05 Intel Corporation Cache prefetch for deterministic finite automaton instructions
US9268570B2 (en) 2013-01-23 2016-02-23 Intel Corporation DFA compression and execution
US11586956B2 (en) 2013-05-28 2023-02-21 Keysight Technologies, Inc. Searching apparatus utilizing sub-word finite state machines
US9172721B2 (en) 2013-07-16 2015-10-27 Fortinet, Inc. Scalable inline behavioral DDOS attack mitigation
US9875045B2 (en) * 2015-07-27 2018-01-23 International Business Machines Corporation Regular expression matching with back-references using backtracking
US9973528B2 (en) 2015-12-21 2018-05-15 Fortinet, Inc. Two-stage hash based logic for application layer distributed denial of service (DDoS) attack attribution
US10110563B1 (en) * 2016-04-28 2018-10-23 Palo Alto Networks, Inc. Reduction and acceleration of a deterministic finite automaton
CN106445891A (zh) * 2016-08-09 2017-02-22 中国科学院计算技术研究所 一种串匹配算法的加速方法及装置
US10564877B1 (en) * 2017-05-24 2020-02-18 Syncsort Incorporated Methods and apparatus to store and enable a transfer protocol for new file formats for distributed processing and preserve data integrity through distributed storage blocks
US10656949B2 (en) 2018-07-13 2020-05-19 Fungible, Inc. Instruction-based non-deterministic finite state automata accelerator
US10635419B2 (en) 2018-07-13 2020-04-28 Fungible, Inc. Incremental compilation of finite automata for a regular expression accelerator
US10983721B2 (en) 2018-07-13 2021-04-20 Fungible, Inc. Deterministic finite automata node construction and memory mapping for regular expression accelerator
US11636115B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Query processing using data processing units having DFA/NFA hardware accelerators
US11636154B2 (en) 2019-09-26 2023-04-25 Fungible, Inc. Data flow graph-driven analytics platform using data processing units having hardware accelerators
US11263190B2 (en) 2019-09-26 2022-03-01 Fungible, Inc. Data ingestion and storage by data processing unit having stream-processing hardware accelerators
US11934964B2 (en) 2020-03-20 2024-03-19 Microsoft Technology Licensing, Llc Finite automata global counter in a data flow graph-driven analytics platform having analytics hardware accelerators
US11630729B2 (en) 2020-04-27 2023-04-18 Fungible, Inc. Reliability coding with reduced network traffic

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1988001774A1 (en) * 1986-09-05 1988-03-10 Packard David W Programmable, character reduction lexical search circuit
US5151950A (en) * 1990-10-31 1992-09-29 Go Corporation Method for recognizing handwritten characters using shape and context analysis
US5317509A (en) * 1992-01-21 1994-05-31 Hewlett-Packard Company Regular expression factoring for scanning multibyte character sets with a single byte automata machine
JP3231673B2 (ja) * 1996-11-21 2001-11-26 シャープ株式会社 文字,文字列検索方法及び該方法に用いる記録媒体
US7185081B1 (en) * 1999-04-30 2007-02-27 Pmc-Sierra, Inc. Method and apparatus for programmable lexical packet classifier
US6493698B1 (en) * 1999-07-26 2002-12-10 Intel Corporation String search scheme in a distributed architecture
US6626960B1 (en) * 1999-09-01 2003-09-30 International Business Machines Corporation Method, system, and program for generating a table to determine boundaries between characters
US6742164B1 (en) * 1999-09-01 2004-05-25 International Business Machines Corporation Method, system, and program for generating a deterministic table to determine boundaries between characters
CA2307529A1 (en) * 2000-03-29 2001-09-29 Pmc-Sierra, Inc. Method and apparatus for grammatical packet classifier
US6785677B1 (en) * 2001-05-02 2004-08-31 Unisys Corporation Method for execution of query to search strings of characters that match pattern with a target string utilizing bit vector

Also Published As

Publication number Publication date
US7240040B2 (en) 2007-07-03
DE60222575D1 (de) 2007-10-31
US20030065800A1 (en) 2003-04-03
EP1436718B1 (de) 2007-09-19
EP1436718A2 (de) 2004-07-14
WO2003023553A2 (en) 2003-03-20
EP1436718A4 (de) 2005-07-20
WO2003023553A3 (en) 2003-08-07
ATE373846T1 (de) 2007-10-15
AU2002332497A1 (en) 2003-03-24

Similar Documents

Publication Publication Date Title
DE60222575T2 (de) Verfahren zur Generierung eines DFA-Automaten, wobei Übergänge zwecks Speichereinsparung in Klassen gruppiert werden
DE60305035T2 (de) Anpassen des längsten präfix unter verwendung von baumartigen "bitmap" datenstrukturen
DE69829645T2 (de) Verfahren zur Änderung von dynamischen Entscheidungsbäume
DE112012002624B4 (de) Regex-Kompilierer
DE60026229T2 (de) Verfahren und Vorrichtung für Klassifizierung von Datenpaketen
EP2490393B1 (de) Verfahren und Vorrichtung zur Analyse von Datenpaketen
DE68925557T2 (de) Verfahren zum Zugriff von Daten in einer Tabelle und seine Anwendung zum Lenken von Daten zwischen entfernten Stationen
DE60222622T2 (de) Verfahren und Vorrichtung zur Paketkopfteilverarbeitung
DE60214670T2 (de) Verfahren und vorrichtung zur leitweglenkungstabellenverwaltung
DE69026400T2 (de) System und Verfahren zur Verbindung von Anwendungen über verschiedene Netzwerke von Datenverarbeitungssystemen
DE60318722T2 (de) Eine programmierbare regelverarbeitungsvorrichtung für hochgeschwindigkeits-kontextsuchen und -erkennung von mustern in daten
DE10297269B4 (de) Kennzeichnung von Paketen mit einem Nachschlageschlüssel zur leichteren Verwendung eines gemeinsamen Paketweiterleitungs-Cache
DE60125954T2 (de) Adressierung und routen von datenpaketen in einem computer-netzwerk mit hilfe von inhaltsbeschreibenden labeln
DE60216938T2 (de) Gleichzeitiges durchsuchen verschiedener tabellen in einem inhaltsadressierbaren speicher
DE69937248T2 (de) Routers und verfahren für optimale leitwegtabellenkomprimierung
DE60022802T2 (de) System und Verfahren zum Übertragen verteilter Datensätze über mehrere Fäden
DE60316696T2 (de) Verfahren zum Routen von Datenpaketen und Routing-Vorrichtung
DE19954534A1 (de) Rückwärtsindexieren von Zeichenketten in einer relationalen Datenbank zum Suchen mit Joker
DE10058443A1 (de) Verfahren zum Klassifizieren von Datenpaketen
DE112011103561T5 (de) Netzwerkprozessor und Verfahren zum Beschleunigen der Datenpaket-Syntaxanalyse
DE60107964T2 (de) Vorrichtung zur kodierung und dekodierung von strukturierten dokumenten
DE10028563B4 (de) Kommunikationssteuerungseinheit
DE60032674T2 (de) Verfahren zum Suchen von Adressen
DE102018212297B4 (de) Verwendung von programmierbaren Switching-Chips als künstliche neuronale Netzwerk Module
EP1495611B1 (de) Repräsentation bool'scher ausdrücke zur spezifikation von filtern mittels xml

Legal Events

Date Code Title Description
8364 No opposition during term of opposition