-
URHEBERRECHTSVERMERK
-
Hierin ist Material enthalten, das
dem Urheberrechtsschutz unterliegt. Der Urheberrechtsinhaber hat
keinen Einwand gegen die Reproduktion der Offenbarung der Patentanmeldung
durch eine Person, wie dies in den Akten bzw. Unterlagen des Patent-
und Markenamtes geschieht, behält
sich aber ansonsten alle Urheberrechte vor.
-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Die Erfindung betrifft allgemein
das Gebiet von Netzwerkgeräten.
Genauer gesagt betrifft die Erfindung ein Verfahren und eine Vorrichtung
zur Weiterleitung von Netzwerkpaketen mit einem Unified packet Internet
Protocol (IP) flow-based Cache unter Verwendung des Cache-Nachschlageschlüssels als ein
Packet-Tag.
-
Beschreibung
der verwandten Technik
-
Es wird eine Anzahl von unterschiedlichen Prozessen
von Netzwerkgeräten,
wie z. B. Brücken, Routers,
Schalter, Firewalls, Gateways oder anderen Internet-Zugangsprodukten,
an jedem empfangenen oder gesendeten Paket durchgeführt. Zum
Beispiel kann eine typische Liste von Aufgaben, die von einen Router
durchgeführt
werden, enthalten: (1) Anwenden von Network Address Translation
(NAT), (2) Anwenden von Paketfilterung und (3) Routing des Pakets.
-
Nachschlagen in einer kompletten
Routing-Tabelle eines Netzwerkgerätes kann recht langsam sein.
Somit implementieren viele Netzwerkgeräte eine An von Caching-Funkionalität zur Beschleunigung
von Paketverarbeitung. Typischerweise werden die letzten Weiterleitungsentscheidungen
in einer separaten Tabelle (dem forwarding cache) gespeichert, die
für schnelles
Nachschlagen optimiert ist. Wenn ein Paketfluß klassifiziert worden ist
und ein nachfolgendes Paket unter Verwendung der Cache-Information
gehandhabt werden kann, wird der Weiterleitungspfad typischerweise
der „schnelle
Pfad" genannt. Wenn
kein Cache-Eintrag vorhanden ist, wird das Paket auf der Grundlage
der gesamten Routing-Tabelle weitergeleitet. Dieser Weiterleitungspfad wird
der „langsame
Pfad" genannt. Dieselbe
An von Cache-Einrichtung
kann auch auf NAT und Filtern angewandt werden. Ältere Erzeugnisse verwendeten typischerweise
unabhängige
Caches für
jeden Funktionalitätstyp.
Ein beispielhafter Weiterleitungsablauf unter Verwendung von separaten
Caches wird nachfolgend dargestellt:
-
- – Lies
Header-Information vom Paket
- – Schlag
im NAT-Cache nach. Wenn Cache-Treffer vorliegt, dann führe NAT-Aktionen
(z. B. übersetze
Adressen im IP-Header) durch. Anderenfalls sende das Paket zum NAT-Modul
zur Verarbeitung auf dem langsamen Pfad.
- – Schlag
im Filter-Cache nach. Wenn Cache-Treffer vorliegt, dann führe Filteraktionen
(z. B. laß das
Paket passieren oder verwirf es) durch. Anderenfalls sende das Paket
zum Filtermodul zur Verarbeitung auf dem langsamen Pfad.
- – Schlag
im Forwarding/Routing-Cache nach. Wenn Cache-Treffer vorliegt, dann
führe Routing-Aktionen
(z. B. leite Paket zur im Cache-Eintrag spezifizierten Schnittstelle
weiter) durch. Anderenfalls sende das Paket zum Weiterleitungsmodul
zur Verarbeitung auf dem langsamen Pfad.
-
Das Konzept des schnellen/langsamen
Pfades im Zusammenhang mit Routing wird nun mehr unter Bezugnahme
auf 1 weiter beschrieben werden.
In diesem vereinfachten Beispiel ist ein Weiterleitungsablauf 100 in
einem Router dargestellt, der (1) einen schnellen Pfad, der Verarbeiten
eines empfangenen Netzwerkpakets 105 durch ein Modul 110 zur
Weiterleitung auf einem schnellen Pfad und eine Cache-Suche in einem
forwarding cache 115 enthält, und einen langsamen Pfad
aufweist, der zusätzlich zum
Verarbeiten auf einen schnellen Pfad Paketverarbeiten durch ein
Modul 120 zur Weiterleitung auf einen langsamen Pfad und
ein Nachschlagen einer vollständigen
Routing-Tabelle in einer Routing-Tabelle 125 enthält.
-
In vielen Fällen befindet sich die Verarbeitung
auf einem schnellen Pfad in einer anderen Verarbeitungseinheit als
die Verarbeitung auf einem langsamen Pfad (zum Beispiel in einer
anderen Mikromaschine auf demselben Netzwerkprozessor oder in einem
anderen Netzwerkprozessor). In Einzelprozessorsystemen werden der
Code des schnellen Pfades und der Code des langsamen Pfades typischerweise
als unterschiedliche Betriebssystemprozesse ausgeführt. Demzufolge
ist Process-Scheduling erforderlich, wenn das Paket zum langsamen Pfad
geleitet wird. Während
die Absicht eines schnellen Pfades und eines langsamen Pfades bleibt,
verwenden neuere Netzwerkprodukte häufig ein Konzept, das allgemein
als "flow-based
forwarding" bekannt
ist. Die Grundidee beim flow-based forwarding besteht darin, das
Paket einmal zu klassifizieren und danach eine einzige Suche in
einem gemeinsamen Cache durchzuführen,
in dem jeder Cache-Eintrag alle zur Handhabung des Pakets notwendigen
Informationen (z.B. Informationen hinsichtlich dessen, wohin das
Paket weiterzuleiten ist) enthält.
Da jedoch die Paketverarbeitungsfunktionen häufig in separaten Modulen (in
einigen Fällen
von unterschiedlichen Prozessoren und/oder Mikromaschinen ausgeführt) lokalisiert
sind, kann es recht komplex werden sicherzustellen, dass der gemeinsame
Cache konsistent bleibt. Wie weiter unten erörtert wird, sind zusätzlich weitere
Komplikationen mit der Verwendung eines gemeinsamen Cache verbunden,
wenn eine oder mehrere der Paketverarbeitungsfunktionen einen Teil des
Paket-Headers, auf dem der Cache-Nachschlageschlüssel basiert, modifiziert/modifzieren.
-
KURZBESCHREIBUNG
DER EINZELNEN ANSICHTEN DER ZEICHUNGEN
-
Die vorliegende Erfindung ist beispielhaft und
nicht begrenzend in den Figuren der beigefügten Zeichnungen dargestellt,
in denen gleiche Bezugszahlen ähnliche
Elemente bezeichnen und in denen:
-
1 das
Konzept des schnellen/langsamen Pfades im Zusammenhang mit Routing
darstellt;
-
2 ein
Problem der Implementierung eines NAT unterstützenden gemeinsamen Cache darstellt;
-
3A-3C ein Beispiel eines Synchronisationsproblems
darstellen, das angetroffen werden kann, wenn der Versuch unternommen
wird, Distributed-Packet-Processing in einer Umgebung mit gemeinsamen
Cache durchzuführen;
-
4 ein
Blockdiagramm auf höchster
Ebene eines Netzwerkgeräts
gemäß einer
Ausführungsform
der vorliegenden Erfindung ist;
-
5 ein
Blockdiagramm eines beispielhaften Netzwerkprozessors ist;
-
6 ein
Ablaufdiagramm ist, das die Durchführung einer Aktualisierung
eines gemeinsamen Cache gemäß einer
Ausführungsform
der vorliegenden Erfindung darstellt;
-
7 ein
Blockdiagramm ist, das grundlegenden Paketfluß, wenn ein neuer Fluß detektiert und
vom langsamen NAT-Empfangspfad empfangen wird, konzeptionell gemäß einer
Ausführungsform der
vorliegenden Erfindung darstellt;
-
8 ein
Blockdiagramm ist, das grundlegenden Paketfluß, wenn ein neuer Fluß detektiert und
vom langsamen Filterempfangspfad empfangen wird, konzeptionell gemäß einer
Ausführungsform der
vorliegenden Erfindung darstellt; und
-
9 ein
Blockdiagramm ist, dass grundlegenden Paketfluß, wenn ein neuer Fluß detektiert und
vom langsamen Weiterleitungspfad empfangen wird, konzeptionell gemäß einer
Ausführungsform der
vorliegenden Erfindung darstellt.
-
AUSFÜHRLICHE
BESCHREIBUNG DER ERFINDUNG
-
Es werden Vorrichtungen und Verfahren
für einen
NAT-kompatiblen gemeinsamen Cache beschrieben. Allgemein gesagt
versuchen Ausführungsformen
der vorliegenden Erfindung eine Einrichtung zur effizienten Implementierung
eines gemeinsamen Cache in einer Umgebung bereitzustellen, die eine
Anwendung, wie zum Beispiel NAT, enthält, die einen oder mehrere
Abschnitte des Pakets, wie zum Beispiel den Paket-Header, auf dem
ein Cache-Nachschlageschlüssel basiert,
modifiziert. Gemäß einer
Ausführungsform
wird der Cache-Nachschlageschlüssel als
Teil eines Paket-Tags gespeichert und für alle Aufgaben zugänglich gemacht,
die mit der Paketflußverarbeitung
zu tun haben. Danach markiert die erste Anwendung, die ein Netzwerkpaket
untersucht, das Paket mit Cache-Nachschlaginformation vom ursprünglichen
Paket-Header und verwenden nachfolgende Paketverarbeitungsanwendungen den
Cache-Nachschlageschlüssel
im Tag, wenn sie auf den gemeinsamen Cache zugreifen. Auf diese
Weise wird ein Cache-Zugriff konsistent von allen Paketverarbeitungsanwendungen
durchgeführt. Zusätzlich versucht
die hierin beschriebene Architektur des gemeinsamen Cache und das
hierin beschriebene Verfahren, die An zu verbessern, auf die ein
gemeinsamer Cache unter verteilten Modulen eines Netzwerkgeräts gemeinsam
benutzt wird. Gemäß einer
Ausführungsform
wird eine einfache und unkomplizierte Einrichtung zum Auffinden
von gelöschten oder
ungültig
erklärten
Cache-Einträgen
und Verhindern der Erzeugung von doppelten Einträgen bereitgestellt, ohne ein
Cache-Synchronisationsprotokoll zu erfordern.
-
In der folgenden Beschreibung werden,
für Erläuterungszwecke,
zahlreiche spezielle Details beschrieben, um für ein umfassendes Verständnis der vorliegenden
Erfindung zu sorgen. Ein Fachmann auf dem Gebiet wird jedoch erkennen,
dass die vorliegende Erfindung ohne einige dieser speziellen Details
praktiziert werden kann. In anderen Fällen sind allgemein bekannte
Strukturen und Geräte
in Blockdiagrammform gezeigt.
-
Die vorliegende Erfindung enthält zahlreiche Schritte,
die unten beschrieben werden. Die Schritte der vorliegenden Erfindung
können
durch Hardwarekomponenten ausgeführt
oder von maschinenausführbaren
Befehlen verkörpert
sein, die verwendet werden können,
um einen Mehrzweck- oder Spezialzweckprozessor, der mit den Befehlen
programmiert ist, die Schritte durchführen zu lassen. Alternativ
können
die Schritte von einer Kombination von Hardware und Software durchgeführt werden.
-
Die vorliegende Erfindung kann als
ein Computerprogrammprodukt bereitgestellt werden, das ein maschinenlesbares
Medium enthalten kann, das darauf gespeicherte Befehle aufweist,
die verwendet werden können,
um einen Computer (oder andere elektronische Geräte) zur Durchführung eines
Prozesses gemäß der vorliegenden
Erfindung zu programmieren. Das maschinenlesbare Medium kann, ohne
darauf beschränkt
zu sein, Disketten, optische Platten, Compact Disc Read-Only Member
Memories (CR-ROMs) und magnetooptische Platten, ROMs, Speicher mit
wahlfreiem Zugriff (Random Access Memories (RAMs)), Erasable Program mable
Read-Only Memories (EPROMs), Electrically Erasable Programmable
Read-Only Memories (EEPROMs), magnetische oder optische Karten,
Flash Memory oder andere Typen von Medienmaschinenlesbaren Medien,
die zum Speichern von elektronischen Befehlen geeignet sind, enthalten.
Außerdem
kann die vorliegende Erfindung auch als ein Computerprogrammprodukt heruntergeladen
sein, wobei das Programm von einem fernen Computer (z.B. einem Server)
auf einen anfordernden Computer (z.B. einen Client) mittels Datensignale,
die in einer Trägerwelle
oder einem anderen Ausbreitungsmedium verkörpert sind, über eine
Kommunikationsverbindung (z.B. ein Modem oder eine Netzwerkverbindung) übertragen
werden kann. Dementsprechend soll eine Trägerwelle und ein anderes Ausbreitungsmedium
so angesehen werden, als dass sie/es ein maschinelesbares Medium
für den
Zweck der vorliegenden Spezifikation umfasst.
-
Während
der Zweckmäßigkeit
halber Ausführungsformen
der vorliegenden Erfindung unter Bezugnahme auf ein Netzwerkgerät mit NAT-Funktionalität beschrieben
werden, ist die vorliegende Erfindung gleichermaßen auf zahlreiche andere Paketverarbeitungsanwendungen
anwendbar, die mit Modifizieren des gesamten oder eines Teils des
Abschnittes des Paket-Headers
zu tun haben, der zur Erzeugung eines Cache-Nachschlageschlüssels verwendet
wird.
-
Terminologie
-
Vor der Beschreibung einer beispielhaften Netzwerkumgebung,
in der zahlreiche Ausführungsformen
der vorliegenden Erfindung implementiert werden können, werden
einige Begriffe, die in der gesamten Anmeldung verwendet werden,
kurz definiert werden.
-
In der hierin verwendeten Form bezeichnet ein "Netzwerkgerät" allgemein ein Zwischengerät, das Kommunikationen
von Computer zu Computer über
eine miteinander verbundene Gruppe von lokalen Netzwerken (Local
Area Networks (LANs)) erleichtert. Beispielhafte Netzwerkgeräte schließen Gateways,
Routers, Schalter, Brücken,
Firewalls und Internet-Zugangsprodukte
ein.
-
Der Begriff "Netzwerkschnittstelle" oder einfach "Schnittstelle" bezeichnet allgemein
eine physikalische oder logische Schnittstelle eines Netzwerkgeräts, über die
Pakete empfangen oder gesendet werden können. Ein Beispiel für eine physikalische Schnittstelle
stellt ein Ethernet-Port dar. Ein Beispiel für eine logische Schnittstelle
stellt Port 80, die Standard-Port-Nummer für den Hyper Text Transfer Protocol
(HTTP)-Dienst, oder Schnittstellen für andere Protokolldienste dar.
-
Die Begriffe "Paketverarbeitungsanwendung", "Paketverarbeitungsaufgabe", "Paketverarbeitungsfunktion" oder "Modul" beziehen sich allgemein
auf eine Hardware, Software oder ein Hybridmodul eines Netzwerkgeräts, die/das
eine diskrete Funktion oder eine Gruppe von Operationen während der
Weiterleitung eines Pakets, zum Beispiel, vom Eintritts-Port des
Netzwerkgeräts
zum vorgesehenen Ziel des Pakets durch den Austritts-Port des Netzwerkgeräts durchführt. Beispielhafte
Paketverarbeitungsanwendungen schließen Empfangs-NAT (Receive NAT),
statisches Empfangsfiltern (Receive Static Filtering), Receive Firewall
Filtering, Routing-Cache-Nachschlagen (Routing Cache Lookup) (Weiterleiten
(Forwarding)), Statisches Sendefiltern (Transmit Static Filtering),
Transmit Firewall Filtering, Sende-NAT (Transmit NAT) und dergleichen
ein.
-
In der hierin verwendeten Form bezeichnet "modulspezifische
Information" allgemein
Information, die von einer besonderen Paketverarbeitungsanwendung
benutzt wird.
-
In der hierin verwendeten Form bezeichnet "gemeinsamer Cache" (unified cache)
oder ein "gemeinsamer
Weiterleitungs-Cache" (Unified
Forwarding Cache)) allgemein eine Cache-Einrichtung, typischerweise einen Speicher
separat von der kompletten Routing-Tabelle, die die letzten Weiterleitungsentscheidungen
speichert und zum schnellen Nachschlagen optimiert ist, die von
mehreren Paketweiterleitungsprozessen gemeinsam benutzt wird. Gemäß einer
Ausführungsform
der vorliegenden Erfindung ist der gemeinsame Cache ein gemeinsamer
IP Fluß basierter
Cache (unified IP flow-based cache), der gestattet, dass ein Fluß einmal klassifiziert
wird und danach nachfolgende Pakete mit einem einzigen Nachschauen
im gemeinsamen Cache verarbeitet werden können.
-
In der hierin verwendeten Form bedeutet „Cache-Synchronisationsprotokoll" allgemein eine zentralisierte
Einrichtung über
die auf verschiedene Prozessoren verteilte Paketverarbeitungsanwendungen
eineinander hinsichtlich des aktuellen Status von Einträgen in einem
gemeinsamen Cache auf dem laufenden halten können. Zum Beispiel kann eine Cache-Synchronisationsmanagementanwendung die
Anzahl von Pointers überprüfen, die
für einen
besonderen Cache-Eintrag erzeugt worden sind, und ob Cache-Einträge gültig sind
oder nicht.
-
In der hierin verwendeten Form bezieht
sich ein „Paketdeskriptor" allgemein auf eine
von den Paketverarbeitungsanwendungen verwendete interne Datenstruktur,
die mit einem Paket verbunden ist und paketspezifische Informationen
enthält.
Gemäß einer Ausführungsform
der vorliegenden Erfindung enthält der
Paketdeskriptor ein oder mehrere vom folgenden: (1) Die Speicheradresse
des Pakets (z. B. einen Pointer auf die Paketdaten), (2) die Länge des
Pakets, (3) eine Anzeige der Netzwerkschnittstelle, bei der das
Paket empfangen wurde, und (4) einen Nachschlageschlüssel für einen
gemeinsamen Cache.
-
Mit der Implementierung eines gemeinsamen
Cache (unified cache), der NAT unterstützt, verbundene Schwierigkeiten
-
2 stellt
ein Problem bei der Implementierung eines NAT unterstützenden
gemeinsamen Cache dar. Das Hauptproblem in Verbindung mit dem Implementieren
eines NAT überstützenden
gemeinsamen Cache besteht darin, dass es den Paket-Header ändern kann,
wodurch dem NAT folgende Paketverarbeitungsanwendungen dazu gebracht
werden können,
dass sie nicht Einträge
eines gemeinsamen Cache lokalisieren können. Zum Beispiel kann NAT einen
unified Cache-Eintrag auf der Grundlage des ursprünglichen
Inhalts des Paket-Headers erzeugen, bevor es den Paket-Header ändert. Demzufolge
erzeugen nachfolgende Module einen anderen Cache-Nachschlageschlüssel auf
der Grundlage des modifizierten Paket-Headers und suchen sie im
falschen Bin nach dem Eintrag des gemeinsamen Cache. Dieses Szenario
wird nun mit einem konkreten Beispiel unter Bezugnahme auf 2 dargestellt.
-
Das Netzwerkgerät empfängt ein Paket 205, das
zum Beispiel für
IP-Adresse 89.20.171.1 bestimmt ist. Angenommen, das Paket 205 wird
von langsamen NAT-Empfangspfad 210 (d. h., dass kein Cache-Eintrag
in einem gemeinsamen Cache 220 für die Ziel-IP-Adresse vorhanden
ist) empfangen, so übersetzt
der langsame NAT-Empfangspfad 210 die Ziel-IP-Adresse im Header
des Pakets in 10.1.1.1, zum Beispiel, unter Verwendung einer aus
der vollständigen
NAT-Regeltabelle 215 abgerufenen Übersetzungsregel. Danach fügt der langsame
NAT-Empfangspfad 210 einen Cache-Eintrag in den gemeinsamen
Cache 220 auf der Grundlage eines Nachschlageschlüssels ein,
der aus den ursprünglichen Inhalten
des Paket-Headers,
der die Ziel-IP-Adresse 89.20.171.1 enthielt, erzeugt ist. Auf diese
Weise werden nachfolgend empfangene Pakete, die für IP-Adresse
89.20.171.1 bestimmt sind, den schnellen NAT-Empfangspfad (nicht
gezeigt) einschlagen, wodurch der Aufwand vermieden wird, eine Suche
in der vollständigen
NAT-Regeltabelle 215 durchzuführen, und wird die Adressenübersetzung
auf der Grundlage des vom langsamen NAT-Empfangspfad 210 eingefügten Cache-Eintrags durchgeführt werden.
-
In Weiterführung des vorliegenden Beispiels leitet
in jedem Fall der langsame NAT-Empfangspfad 210,
nachdem er den Paket-Header übersetzt
und einen Eintrag in den gemeinsamen Cache 220 eingefügt hat,
das Paket zum nächsten
Modul. In diesem Beispiel besteht das sich dem NAT anschließende Modul
aus Filtern. Wenn das Filtermodul das NATverarbeitete Paket empfängt, liest
der Filtercode den Paket-Header und führt er eine Cache-Suche im gemeinsamen
Cache 220 auf der Grundlage des gegenwärtigen Inhalts des Paket-Headers durch, der die
Ziel-IP-Adresse 10.1.1.1 enthält.
Es wird kein Eintrag ermittelt, da NAT den Eintrag mit einem Nachschlageschlüssel eingefügt hat,
der auf der ursprünglichen
Ziel-IP-Adresse 89.20.171.1 basierte. Demzufolge wird das Paket
zum langsamen Filterempfangspfad 225 geleitet, der nun
eine Filterregel aus der vollständigen
Filterregeltabelle 230 abrufen muß. Nach Durchführung des
Filterns fügt
der langsame Filterempfangspfad 225 ei nen neuen Cache-Eintrag mit
einem Nachschlageschlüssel
ein, der auf den Inhalten des gegenwärtigen Paket-Headers basiert, der
die Ziel-IP-Adresse 10.1.1.1 enthält. Demzufolge haben der langsame
NAT-Empfangspfad 210 und der langsame Filterempfangspfad
doppelte unified Cache-Einträge,
die zu unterschiedlichen Cache-Nachschlageschlüsseln gehören, erzeugt.
-
Eine effiziente Unified Cache-Implementierung
sollte nicht unnötigerweise
doppelte Unified Cache-Einträge
erzeugen. Stattdessen sollten alle Informationen für den Cache-Eintrag
typischerweise in einem einzigen Unified Cache-Eintrag unter Verwendung
eines konsistenten und vorhersagbaren Cache-Nachschlageschlüssels gespeichert
werden. Eine Vereinbarung würde
sein, den Cache-Nachschlageschlüssel
auf der Grundlage der ursprünglichen
Inhalte des Paket-Headers, der, in diesem Beispiel, die IP-Zieladresse
89.20.171.10 enthielt, zu erzeugen.
-
Ein weiteres Problem in Verbindung
mit der Verwendung eines gemeinsamen Cache besteht in der Synchronisation
der verschiedenen Module, die den gemeinsamen Cache verwenden. Die 3A–3C stellen
ein Beispiel eines Synchronisationsproblems dar, das angetroffen
werden kann, wenn versucht wird, Distributed Packet Processing in einer
Umgebung mit einem gemeinsamen Cache durchzuführen. In diesem Beispiel wird
angenommen, dass die Module zum nächsten Modul einen Pointer
auf einen Unified Cache-Eintrag leiten. In 3A empfängt ein NAT-Modul 310 ein
Netzwerkpaket 305 zu einem Zeitpunkt t1.
Nachfolgend, zu einem Zeitpunkt t2, fügt das NAT-Modul
einen Cache-Eintrag 323 in einen gemeinsamen Cache 320 ein,
der von, neben anderen Modulen, einem Filtermodul 330 gemeinsam
benutzt wird. Nachdem das NAT-Modul 310 seine Übersetzung
abgeschlossen hat, kennzeichnet es das übersetzte Netzwerkpaket 305 mit
einem Pointer auf den Cache-Eintrag 323. Wie in 3B dargestellt,
leitet das NAT-Modul 310 zu einem Zeitpunkt t3 das übersetzte
Netzwerkpaket 305 gemeinsam mit einem Pointer auf den Cache-Eintrag 323 als
gekennzeichnetes Netzwerkpaket 306 zum Filtermodul 330 mittels
zum Beispiel einer Interprozeß-Warteschlange, da
das Filtermodul 330 ein separater Prozeß sein kann. Bevor das Filtermodul
330 ablaufen
kann, entscheidet jedoch, wie in 3C dargestellt,
das NAT-Modul 310 zu einem Zeitpunkt t4,
den Cache-Eintrag 323 aufgrund zum Beispiel eines Rekonfigurationsereignisses
zu löschen,
wodurch der Eintrag 323 ungültig gemacht wird. Demzufolge
ist nun der mit dem gekennzeichneten Netzwerkpaket 306 weitergeleitete
Cache-Eintrag-Pointer ungültig.
Bei Fehlen einer Cache-Synchronisationseinrichtung wird das Filtern,
wenn das Filtermodul 330 den Pointer zum Zugreifen auf
den gemeinsamen Cache 320 zu einem Zeitpunkt t5 verwendet,
um den Cache-Eintrag 323 abzurufen, der dem gekennzeichneten
Netzwerkpaket 306 entspricht, unsichere Ergebnisse erzeugen,
da es auf der Grundlage von ungültigen
Daten durchgeführt
wird. Somit sollte eine zuverlässige
Einrichtung zur gemeinsamen Benutzung eines gemeinsamen Cache für Detektieren
von gelöschten
oder für
ungültig
erklärten
Cache-Einträgen
und zum Verhindern von Erzeugen von doppelten Einträgen sorgen,
ohne den Zusatz und die Komplexität des Implementierens eines
Cache-Synchronisationsprotokolls
zu erfordern.
-
Die hierin beschriebene Architektur
des gemeinsamen Cache und das hierin beschriebene Verfahren versuchen
beiden der obengenannten Probleme Rechnung zu tragen. Gemäß einer
Ausführungsform
kennzeichnet die erste Anwendung zum Untersuchen des Pakets das
Paket mit Nachschlageinformation auf der Grundlage des ursprünglichen
Paket-Headers. Danach verwenden die nachfolgenden Paketverarbeitungsanwendungen
die ursprüngliche Paketnachschlageinformation
(das Tag) als den Nachschlageschlüssel, wenn sie den gemeinsamen Cache
aktualisieren oder auf andere Weise darauf zugreifen. Wenn der Eintrag
gelöscht
worden ist (wie im obigen Beispiel), wird die Suche fehlschlagen
und wird Konsistenz sichergestellt.
-
Beispielhaftes
Netzwerkgerät
-
4 zeigt
ein vereinfachtes Blockdiagramm auf höchster Ebene eines Netzwerkgeräts 400 gemäß einer
Ausführungsform
der vorliegenden Erfindung. Das Netzwerkgerät 400 repräsentiert
ein beispielhaftes Netzwerkrechen- oder Netzwerkkommunikationsgerät, wie zum
Beispiel einen Gateway, einen Router, eine Brücke, einen Schalter, eine Firewall
oder ein Inter net-Zugangsprodukt, in dem Eigenschaften der vorliegenden
Erfindung implementiert werden können.
In diesem Beispiel umfasst das Netzwerkgerät 400 ein Kommunikationsmittel,
wie zum Beispiel einen Bus 410, zur Übertragung von Informationen,
und ein Verarbeitungsmittel, wie zum einen oder mehrere Prozessoren 415,
die mit dem Bus 410 zur Verarbeitung von Informationen
und Ausführung
von Befehlen gekoppelt sind.
-
Das Netzwerkgerät 400 enthält auch
Netzwerkschnittstellen 420, die mit dem Bus 410 gekoppelt
sind, um Übertragung
und Austausch von Informationen zu/von dem Netzwerkgerät 400 mittels
zum Beispiel eines lokalen Netzwerkes (Local Area Netzwork (LAN)),
Wide Area Network (WAN), Metropolitan Area Network (MAN), des Internets
oder des öffentlichen
Fernsprechwählnetzes
(public switched telephone network (PSTN)) zu gestatten. Die Netzwerkschnittstellen 420 können zahlreiche
Kombinationen von allgemein bekannten Schnittstellen, wie zum Beispiel
ein oder mehrere 10/100-Ethernet-Ports, ein oder mehrere Gigabit-Ethernet-Ports (Faser
und/oder Kupfer) oder andere allgemein bekannte Schnittstellen,
wie zum Beispiel Digital Subscriber Line (DSL)-Schnittstellen, Asynchronous Transfer
Mode (ATM)-Ports und andere Schnittstellen, die üblicherweise in vorhandenen öffentlichen und
privaten Netzwerkumgebungen verwendet werden, einschließen. In
jedem Fall kann auf diese Weise das Netzwerkgerät 400 mit einer Anzahl
von weiteren Netzwerkgeräten,
Clients und/oder Servers über
eine herkömmliche
Netzwerkinfrastruktur, wie zum Beispiel ein Firmenintranet und/oder
zum Beispiel das Internet, kommunizieren.
-
Das Netzwerkgerät 400 umfaßt ferner
mehrere Module zur Durchführung
von zahlreichen Paketverarbeitungsaufgaben, wie zum Beispiel ein
oder mehrere NAT-Module 460 zum Anwenden von Netzwerkadressenübersetzung
auf empfangene und/oder gesendete Pakete, ein oder mehrere Filtermodule 470 zur
Durchführung
von Empfangs- und/oder Sendepaketfiltern und ein oder mehrere Weiterleitmodule 480 zur
Vornahme von Weiterleitungsentscheidungen.
-
Das Netzwerkgerät 400 enthält auch
einen Hauptspeicher 430, der mit dem Bus 410 zum
Speichern von Information und Befehlen gekoppelt ist, die vom Prozessor 415,
NAT-Modul 460, Filtermodul 470 und/oder Weiterleitmodul 480 zu
verwenden und/oder auszuführen
sind. Der Hauptspeicher kann einen oder mehrere Typen von Speicher
mit wahlfreiem Zugriff (Random Access Memory (RAM)), wie zum Beispiel
static RAM (SRAM) zum Cachen und dynamic RAM (DRAM), synchronous
DRAM (SDRAM) oder andere dynamische Speichergeräte für größere Laufzeitspeicherbedürfnisse
umfassen. Somit kann der Hauptspeicher 430 zum Speichern von
temporären
Variablen oder anderer Zwischeninformation, wie zum Beispiel Nachschlagetabellen oder
ein oder mehrere gemeinsame Caches, während der Ausführung von
Befehlen des Prozessors 215 verwendet werden.
-
Das Netzwerkgerät 400 umfaßt auch
einen Nur-Lesen-Speicher (Read Only Memory (ROM)) 440 und/oder
anderen statischen Speicherbausteinen, der mit dem Bus 410 zum
Speichern von statischer Information und Befehlen für den Prozessor 415 gekoppelt
ist. Ein Datenspeichergerät 450,
die zum Beispiel eine flash disk, Magnetplatte oder optische Platte
und ein entsprechendes Laufwerk, können auch mit dem Bus 410 zum
Speichern von Informationen und Befehlen gekoppelt werden.
-
In der obigen Beschreibung werden
zur leichteren Erläuterung
die zahlreichen Funktionseinheiten, wie zum Beispiel Prozessor 415,
NAT-Modul 460, Filtermodul 470 und Weiterleitmodul 480 allgemein
beschrieben, als ob sie jeweils ein einzelnes Gerät bzw. ein
einzelner Prozeß wären. Jede
Funktionseinheit kann jedoch tatsächlich mehrere physikalische
und/oder logische Geräte
umfassen, die in einer verteilten Architektur verbunden sind. Zusätzlich können zahlreiche
Kombinationen von Funktionseinheiten tatsächlich als mehrere Ausführeinheiten
auf demselben Siliziumchip vereinigt werden. Zusätzlich können in alternativen Ausführungsformen
die von den zahlreichen Funktionseinheiten durchgeführten Funktionen,
anders als oben beschrieben, verteilt werden. Zum Beispiel können besondere
Funktionen auf mehrere Prozessoren verteilt werden.
-
Beispielhafter
Netzwerkprozessor
-
5 zeigt
ein Blockdiagramm eines beispielhaften Netzwerkprozessors 500.
Der Netzwerkprozessor 500 repräsentiert einen beispielhaften
Prozessor, wie zum Beispiel Prozessor 415, der in einem Netzwerkgerät, wie zum
Beispiel Netzwerkgerät 400, die
hierin beschriebene Implementierung des gemeinsamen Cache verwendet
werden kann. Gemäß einer
Ausführungsform
umfasst der Netzwerkprozessor den Intel® IXP 1200 Netzwerkprozessor
(INTEL ist eine eingetragene Marke der Intel Corporation, Santa
Clara, CA).
-
In diesem Beispiel ist der Netzwerkprozessor 500 ein
lose gekoppelter Hybridparallelprozessorsatz, der eine Anordnung
von unabhängigen
Mikromaschinen (microengines) 540 mit einem Prozessorkern 515 kombiniert.
Die Mikromaschinen 5401, wie zum Beispiel eine 32-bit-Reduced Instruction
Set Computing (RISC)-Datenmaschine mit Hardware-multithread-Unterstützung, können ausreichend
Verarbeitungsleistung zur Durchführung
von Paketverarbeitungsaufgaben aufweisen, die typischerweise Hochgeschwindigkeits-ASICs
vorbehalten sind, wie zum Beispiel NAT, Paketweiterleitung und Paketfilterung,
enthalten. Der Prozessorkern 515, wie zum Beispiel ein
Intel StrongARM-Kern, kann dann für mehrere komplexe Aufgaben,
wie zum Beispiel Adressenlernen, -bilden und Führen von Weiterleittabellen
und in Beziehung stehenden gemeinsamen Caches und Netzwerkverwaltung
verwendet werden.
-
In der dargestellten Ausführungsform
ist der Prozessorkern 515 mit einem Systembus 510 gekoppelt,
der den Prozessorkern 515 in Kommunikation mit einer SRAM-Einheit 520,
einer SDRAM-Einheit 515, einer Peripheral Component Interconnect (PCI)-Einheit 530 und
einer Fast Bus Interface (FBI)-Einheit 535 koppelt. Die
Mikromaschinen 540 sind mit einem separaten Datenbus 520 gekoppelt, mit
dem die SRAM-Einheit 520, die SDRAM-Einheit 525,
die PCI-Einheit 530 und die FBI-Einheit 535 auch
gekoppelt sind, und können
somit Datenverschiebung und -verarbeitung ohne Hilfe des Prozessorkerns 515 durchführen.
-
Gemäß einer Ausführungsform
ist der Netzwerkprozessor 500 vollständig programmierbar, wodurch
Paketverarbeitungsaufgaben in Abhängigkeit von den Bedürfnissen
der speziellen Implementierung durch Zuteilen von Mikromaschinen 540, Threads
und Verarbeitungskernaufgaben partioniert oder aggregiert werden
können.
Zum Beispiel kann NAT, Weiterleiten und Filtern jeweils einer oder
mehreren separaten Mikromaschinen 540 zugeteilt werden.
Al-ternativ können alle
drei von diesen Paketverarbeitungsaufgaben auf mehrere Mikromaschinen 540 aufgeteilt
werden.
-
Aktualisierung des gemeinsamen
Cache
-
6 zeigt
ein Ablaufdiagramm, das Aktualisieren eines gemeinsamen Cache durch
den langsamen Pfad gemäß einer
Ausführungsform
der vorliegenden Erfindung darstellt. In einer Ausführungsform
können
die unten beschriebenen Tätigkeiten unter
der Kontrolle von einem oder mehreren progammierten Prozessoren,
wie zum Beispiel Prozessorkern 515 und/oder Mikromaschinen 540,
durchgeführt
werden. In alternativen Ausführungsformen können jedoch
die Tätigkeiten
vollständig
oder teilweise durch irgendeine programmierbare oder vordefinierte
Logik, wie zum Beispiel Field-Programmable Gate Arrays (FPGAs),
Transistor-Transistor-Logik
(transistor-transistor logic (TTL)) oder zum Beispiel anwendungsspezifische
integrierte Schaltungen (Application Specific Integrated Circuits
(ASICs)) implementiert werden.
-
Der Prozeß der Aktualisierung des gemeinsamen
Cache gliedert sich im allgemeinen in eine Stufe der Detektion von
neuem Fluß,
eine Stufe zur Erzeugung eines neuen Cache-Eintrags, eine Paketkennzeichnungsstufe
für vorhandene
Flüsse
und eine Cache-Eintrag-Aktualisierungsstufe.
Die Stufe der Detektion von neuem Fluß wird durch Blöcke 610 – 630 repräsentiert,
die Stufe der Erzeugung eines neuen Cache-Eintrags enthält Blöcke 680 und 690, die
Paketkennzeichnungsstufe für
vorhandene Flüsse
wird von Block 640 repräsentiert
und die Cache-Eintrag-Aktualisierungsstufe wird von Block 670 repräsentiert.
Kurz gesagt kennzeichnet die erste Paketverarbeitungsaufgabe (z.
B., NAT, Filtern oder Weiterleitung), während grundlegenden Paketflusses im
langsamen Pfad, das Paket mit dem mit dem vorhandenen Fluß verbundenen
Nachschlageschlüssel,-um
festzulegen, dass das Paket, das verarbeitet wird, Teil eines vorhandenen
Flusses ist. Wenn eine Paketverarbeitungsaufgabe bestimmt, dass
das Paket, das verarbeitet wird, Teil eines neuen Flusses ist, erzeugt
die Paketverarbeitungsaufgabe einen neuen Cache-Eintrag für den Fluß in dem
gemeinsamen Cache und kennzeichnet sie das Paket mit dem korrespondierenden
Nachschlageschlüssel
für den
neuen Cache-Eintrag.
-
Wichtig ist, dass in der gezeigten
Ausführungsform
die einzige Kommunikation zwischen den zahlreichen Paketverarbeitungsmodulen
der in dem internen Paketdeskriptor eingebettete Nachschlageschlüssel ist.
Diese Einrichtung ermöglicht
verteilte Verarbeitung auf eine sehr elegante und einfache Weise,
da eine Suche im gemeinsamen Cache fehlschlagen wird, wenn der Eintrag,
der gesucht wird, von einem anderen Modul gelöscht worden ist. Demzufolge
ist kein Cachesynchronisationsprotokoll notwendig.
-
Aktualisieren des gemeinsamen Cache durch
den langsamen Pfad beginnt mit der Stufe der Detektion von neuem
Fluß bei
Entscheidungsblock 610. Bei Entscheidungsblock 610 wird
eine Feststellung getroffen, ob Nachschlageschlüsselinformation im mit dem
Paket, das verarbeitet wird, verbundenen Paketdeskriptor vorhanden
ist. Wenn die Nachschlageschlüsselinformation
vorhanden ist, dann ist das Paket bereits klassifiziert und gekennzeichnet
worden und setzt die Verarbeitung mit Block 650 fort. Andernfalls
ist das Paket noch nicht gekennzeichnet worden und setzt die Verarbeitung
mit Block 620 fort. Gemäß einer
Ausführungsform
kann die Nachschlageschlüsselinformation
mit einem Wert, der die Nachschlageschlüsselinformation als ungültig identifiziert,
initialisiert werden, wenn ein Paketdeskriptor als erstes einem
Paket zugeordnet wird.
-
Angenommen in diesem Beispiel, dass
die Nachschlageinformation noch nicht auf den Wert eines gültigen Nachschlageschlüssels gesetzt
worden ist, setzt die Verarbeitung mit Block 620 fort,
wo ein Nachschlagen an einem gemeinsamen Cache unter Verwendung
eines Nach schlageschlüssels
durchgeführt
wird, der auf der Grundlage des gegenwärtigen Inhalts des Paket-Headers
erzeugt ist. Bei Entscheidungsblock 630 wird auf der Grundlage
dessen, ob ein Eintrag während
der von Block 620 initiierten Suche gefunden ist, eine
Feststellung getroffen, ob das Paket Teil eines vorhandenen Flusses
ist. Wenn ein Eintrag tatsächlich
gefunden wird, dann wird das Paket klassifiziert als Teil des mit
dem aufgefundenen Eintrag verbundenen vorhandenen Flusses klassifiziert
und setzt die Verarbeitung mit der Kennzeichnungsstufe für vorhandene
Flüsse
bei Block 640 fort. Andernfalls wird das Paket als Teil
eines neuen Flusses klassifiziert und setzt die Verarbeitung mit
Block 680 fort, um mit der Stufe der Erzeugung eines neuen Cache-Eintrags
zu beginnen.
-
Bei Block 640 wird das Paket
als Teil des vorhandenen Flusses durch Initialisieren des Wertes des
Nachschlageschlüssels
im Paketdeskriptor mit dem Wert des Nachschlageschlüssels für den vorhandenen
Fluß gekennzeichnet.
Im Anschluß an Block 640 setzt
die Verarbeitung mit Block 670 fort, um die Cache-Eintragaktualisierungsstufe
durchzuführen.
-
Nunmehr zum Entscheidungsblock 610 zurückkehrend
und unter der Annahme, dass die Nachschlageinformation im Paketdeskriptor
vorhanden ist, wird dann, bei Block 650, ein Nachschlagen
des gemeinsamen Cache unter Verwendung der Information durchgeführt. Es
ist wiederum bemerkenswert, dass dieses Nachschlagen das Synchronisationsproblem
zwischen mehreren verteilten Modulen, die den gemeinsamen Cache
gemeinsam benutzen, löst,
da das Nachschlagen fehlschlagen wird, wenn der Eintrag gelöscht worden
ist, wie dies der Fall ist im Beispiel von 3.
-
Bei Entscheidungsblock 660 wird
eine Feststellung getroffen, ob ein Eintrag als Reaktion auf das Nachschlagen
von Block 650 gefunden wurde. Falls nicht, dann wird die
Stufe der Erzeugung eines neuen Cache-Eintrags durch Weitergehen
zu Block 680 durchgeführt.
Wenn andernfalls ein Eintrag gefunden wurde, dann wird die Cache-Eintragaktualisierungsstufe
durch Fortsetzen mit Block 670 durchgeführt.
-
Bei Block 680 wird ein neuer
Cache-Eintrag erzeugt und in den gemeinsamen Cache als Ergebnis
davon, dass entweder ein neuer Fluß detektiert worden ist oder
ein Eintrag des gemeinsamen Cache gelöscht worden ist, eingefügt. Bei
Block 690 wird der mit dem Paket, das verarbeitet wird,
verbundene Paketdeskriptor aktualisiert, um den neuen Nachschlageschlüssel zu
enthalten. In Abhängigkeit
von der Anwendung kann der Nachschlageschlüssel auf mehr oder weniger
Information in dem Paket-Header oder sogar anderen Feldern basieren.
Zum Beispiel ist gemäß einer
Ausführungsform
der Nachschlageschlüssel,
der für
vollständiges
Firewalling und Filtern verwendet wird, basierend auf dem 5-Tuple
umfassend die IP-Quellenadresse, die IP-Zieladresse, das IP-Protokoll,
den IP-Quellenport und den IP-Zielport erzeugt. Jedoch ist nur eine
Untergruppe von diesen Feldern, wie zum Beispiel die IP-Quellenadresse
und die IP-Zieladresse,
notwendig, um den Nachschlageschlüssel zu erzeugen, wenn das
Netzwerkgerät
nur Routing durchführt.
Zusätzlich
wird, für IPsec,
die SPI anstelle des Quellenports und des Zielports verwendet. Somit
kann der gemeinsame Cache gemäß einer
Ausführungsform
für die
besonderen registrierten Benutzer (z.B. NAT, Filtern, Weiterleiten
etc.) des gemeinsamen Cache optimiert werden.
-
Bei Block 670 wird die Cache-Eintragaktualisierungsstufe
für neue
oder vorhandene Cache-Einträge durchgeführt. Der
in Block 640 oder 650 aufgefundene Eintrag oder
der in Block 680 erzeugte Eintrag wird nun in einer modulabhängigen Weise
modifiziert. Das heißt,
modulspezifische Information kann hinzugefügt, gelöscht oder auf andere Weise
manipuliert werden in Abhängigkeit
von den Bedürfnissen des
besonderen Moduls, das den Prozeß der Aktualisierung des gemeinsamen
Cache durchgeführt. Zum
Beispiel während
der Verarbeitung auf dem langsamen Pfad besetzt NAT die Felder des
Cache-Eintrags, dass es verwendet, auf der Grundlage von Information,
die aus einer NAT-Regeltabelle abgerufen ist. Eine andere Gruppe
von Feldern im Cache-Eintrag kann von dem Filtermodul mit Information
aus einer Filterregeltabelle besetzt werden. Eine weitere unabhängige Gruppe
von Feldern kann vom Weiterleitmodul auf der Grundlage eines Nachschlagens
durchgeführt
werden, das in der vollständigen Routing-Tabelle
durchgeführt
wurde. Zusätzlich
können
Module am Sammeln von zahlreichen Metriken interessiert sein. Zum
Beispiel kann das Filtermodul die Anzahl von Paketen verfolgen,
die aus einer besonderen Quellen-IP-Adresse gefiltert sind; während das
Weiterleitmodul die Dauer von IP-Flüssen, die eine besondere IP-Zieladresse
mit sich bringen, verfolgen kann.
-
7 zeigt
ein Blockdiagramm, das grundlegenden Paketfluß gemäß einer Ausführungsform
der vorliegenden Erfindung darstellt, wenn ein neuer Fluß detektiert
und vom langsamen NAT-Empfangspfad detektiert wird. In diesem Beispiel
ist ein mit einem Netzwerkpaket 710 verbundener Paketdeskriptor 705 in
einem Zustand gezeigt, bevor Empfangs-NAT-Verarbeitung abgeschlossen worden ist.
-
Zu Zeitpunkt t1 wird
der Paketdeskriptor 705 vom langsamen NAT-Empfangspfad 720 empfangen. Gemäß der dargestellten
Ausführungsform
enthält der
Paketdeskriptor ein Feld, das die Eingangsschnittstelle, die Paketlänge, den
Nachschlageschlüssel
und einen Pointer auf die Paketdaten identifiziert. Die Eingangsschnittstelle
identifiziert direkt oder indirekt die logische Schnittstelle, an
der das Netzwerkpaket 710 empfangen wurde. Die Paketlänge zeigt
die Länge
des Pakets in Bytes an. In Abhängigkeit
von der Implementierung kann der Nachschlageschlüssel einen Wert, wie zum Beispiel
einen Hash-Wert, zur Verwendung beim direkten Durchführen des
Nachschlagens im gemeinsamen Cache repräsentieren oder kann der Nachschlageschlüssel die
Rohdaten aus dem ursprünglichen
Paket-Header, auf dem der Hash-Wert basiert repräsentieren. Der Pointer auf
die Paketdaten ist die Adresse des Beginns des Netzwerkpakets 710.
In diesem Beispiel ist das Netzwerkpaket 710 als ein IP-Paket
mit einem IP-Header 711-715 und
einer IP-Nutzinformation 716 dargestellt. Der IP-Header
enthält
eine IP-Quellenadresse 711,
eine IP-Zieladresse 712 und IP-Protokollindikator 713,
einen IP-Quellenport 714 und
einen IP-Zielport 715.
-
In Abhängigkeit von der Implementierung können mehr
oder weniger Felder im Paketdeskriptor 705 enthalten sein.
Zum Beispiel gemäß einer
Ausführungsform
ist ein separater gemeinsamer Cache jeder logischen Schnittstelle
zugeordnet und wird der Cache nur für eintreffende Pakete an einer
speziellen Schnittstelle verwendet. Das heißt, alle Suchen/Einfügungen basieren
auf der Empfangsschnittstelle. In einer Ausführungsform, in der ein einziger
gemeinsamer Cache verwendet wird, muss jedoch das Eingangsschnittstellenfeld
nicht als Teil des Paketdeskriptors 705 enthalten sein.
-
Da der Nachschlageschlüssel im
Paketdeskriptor 705 leer ist, wird zu Zeitpunkt t2 ein Nachschlageschlüssel auf der Grundlage der
Inhalte des IP-Header 711-715 des Netzwerkpakets gebildet
und wird ein Nachschlagen in der NAT-Regeltabelle 730 durchgeführt. Zur
Beschleunigung der Verarbeitung von nachfolgenden Paketen, die mit
demselben Paketfluß verbunden
sind, wird zu Zeitpunkt t3 der Fluß klassifiziert
und ein neuer Cache-Eintrag, der initialisiert worden ist, um geeignete Übersetzungsregeln für diesen
Fluß zu
enthalten, in den gemeinsamen Cache 740 auf der Grundlage
des Nachschlageschlüssels
eingefügt.
Zu Zeitpunkt t4 kann der langsame NAT-Empfangspfad 720 eine
oder mehrere der IP-Quellenadresse 711, der IP-Zieladresse 712,
des IP-Quellenports 714 und des IP-Zielports 715 übersetzen.
Zu Zeitpunkt t5 wird der zum Einfügen des Cache-Eintrags
verwendete Nachschlageschlüssel zur
Lösung
des oben in Bezug auf 2 beschriebenen
Problems im Paketdeskriptors 705 gespeichert, um dadurch
Konsistenz unter den Modulen hinsichtlich des Zugriffs auf den gemeinsamen
Cache sicherzustellen. Schließlich
wird zu Zeitpunkt t6 das Paket zur nächsten Paketverarbeitungsaufgabe
weitergeleitet, die in diesem Beispiel die Empfangsfilter ist.
-
8 zeigt
ein Blockdiagramm, das grundlegenden Paketfluß konzeptionell gemäß einer
Ausführungsform
der vorliegenden Erfindung darstellt, wenn ein neuer Fluß detektiert
und vom langsamen Filterempfangspfad empfangen wird. Unter Fortsetzung des
Beispiels, das mit 7 begonnen
hat, ist der Paketdeskriptor 705 nun in einem Zustand gezeigt, nachdem
die Empfangs-NAT-Verarbeitung abgeschlossen worden ist. Demzufolge
ist das Nachschlageschlüsselfeld
im Paketdeskriptor 705 mit dem Nachschlageschlüssel besetzt,
der verwendet wurde, um den Eintrag im gemeinsamen Cache einzufügen, und
können
zahlreiche Felder des IP-Headers 711-715 gegenüber deren
Anfangswerten abgewandelt sein. In diesem Beispiel ist die IP-Quellenadresse 711 von
89.20.171.1 in 10.20.171.1 übersetzt
worden und ist die IP-Zieladresse 712 von
90.1.1.1 in 11.1.1.1 übersetzt
worden.
-
Zu Zeitpunkt t6 wird
der Paketdeskriptor 705 durch den langsamen Filterempfangspfad
820 vom langsamen NAT-Empfangspfad 720 empfangen. Gemäß einer
Ausführungsform
wird der Paketdeskriptor 750 als ein Parameter unter Modulaufrufen
geführt. In
alternativen Ausführungsformen
kann der Paketdeskriptor 750 in einem global zugänglichen
Speicher gespeichert werden. In jedem Fall ruft zu Zeitpunkt t7 der langsame Filterempfangspfad die geeigneten
Filterbefehle für
diesen Fluß aus
der Filterregeltabelle 830 ab. Zu Zeitpunkt t8 wird
der vom langsamen NAT-Empfangspfad 720 zu Zeitpunkt t3 eingefügte
Cache-Eintrag unter Verwendung des Nachschlageschlüssels im
Paketdeskriptor 705 abgerufen und aktualisiert, um die
Filterbefehle zu enthalten. Vor allem würde ein anderer Nachschlageschlüssel, wenn
der langsame Filterempfangspfad 820 den gegenwärtigen IP-Header
711-715 verwendet hätte,
erzeugt worden sein, der vom langsamen NAT-Empfangspfad 720 eingefügte Cache-Eintrag
nicht aufgefunden worden sein und wäre ein doppelter Eintrag wie
im Beispiel von 2 erzeugt
worden. Da jedoch dieses Modul Zugriff auf den Nachschlageschlüssel hat,
der zum Einfügen
des Cache-Eintrags verwendet wurde, wird Zugangskonsistenz sichergestellt und
die unnötige
Erzeugung von doppelten Cache-Einträgen vermieden. An diesem Punkt
wird das Netzwerkpaket 710 entweder gefiltert (verworfen) oder
zum nächsten
Modul geleitet auf der Grundlage der Filterregeln, die auf dieses
Netzwerkpaket 710 anwendbar sind. Angenommen, dass das
Paket nicht gefiltert ist, wird es zu Zeitpunkt t9 zum
Weiterleitmodul weitergeleitet.
-
9 zeigt
ein Blockdiagramm, das grundlegenden Paketfluß, wenn ein neuer Fluß detektiert und
vom langsamen Weiterleitpfad empfangen wird, gemäß einer Ausführungsform
der vorliegenden Erfindung konzeptionell darstellt. Unter Fortsetzung des
Beispiels, mit dem wir in 8 aufgehört haben, wird
zu Zeitpunkt t9. der Paketdeskriptor 705
vom langsamen Weiterleitpfad 920 empfangen. Zu Zeitpunkt
t10 führt
der langsame Weiterleitpfad 920 eine Suche in der Routing-Tabelle 930 durch,
um die geeigneten Routing-Befehle bezüglich des Netzwerkpakets 710 und
anderer mit diesem Fluß verbundenen
Pakete aufzurufen. Der langsame Weiterleitpfad 920 aktualisiert
danach zu Zeitpunkt t11 den Cache-Eintrag
im gemeinsamen Cache 740, der vom langsamen NAT-Empfangspfad 720 erzeugt
und vom langsamen Filterempfangspfad 820 modifiziert wurde.
Während
es nicht dargestellt ist, wird der Rest des langsamen Pfades, zum
Beispiel langsamer Filtersendepfad und langsamer NAT-Sendepfad,
in derselben Weise gehandhabt.
-
Alternative
Ausführungsformen
-
In den oben beschriebenen Beispielen
wird der Nachschlageschlüssel
des gemeinsamen Cache übertragen
oder für
diejenigen der Module des langsamen Pfades, die den gemeinsamen
Cache gemeinsam benutzen, zugänglich
gemacht. Während diese
Einrichtung den Vorteil aufweist, dass eine verteilte Verarbeitung
auf eine sehr elegante und einfache Weise möglich gemacht wird, ohne ein
Cache-Synchronisationsprotokoll zu benötigen, kann es in alternativen
Ausführungsformen
nützlich
sein, stattdessen einen Pointer auf den Eintrag des gemeinsamen
Cache gemeinsam mit einem Inkarnationszähler zum langsamen Pfad zu
leiten. Gemäß dieser
Ausführungsform
verfolgt ein Cache-Manager die Gültigkeit
der Einträge
des gemeinsamen Cache durch Aktualisieren von Inkarnationszählern. Bevor ein
Modul des langsamen Pfades versucht, den Pointer auf den Eintrag
des gemeinsamen Cache zu verwenden, fragt das Modul den Cache-Manager,
ob der Eintrag weiterhin gültig
ist, und vergleicht der Cache-Manager
einen internen Inkarnationszähler
mit dem Inkarnationszähler,
der mit der Zeigerreferenz verbunden ist.
-
In den oben beschriebenen Beispielen
wurde der Einfachheit halber auf einen einzigen gemeinsamen Cache
Bezug genommen. Man wird jedoch verstehen, dass die Verwendung von
mehreren gemeinsamen Caches gemäß zahlreichen
Ausführungsformen
ins Auge gefasst ist. Anstelle eines zentralen gemeinsamen Cache
kann zum Beispiel gemäß einer
Ausführungsform
ein separater gemeinsamer Cache mit einer Gruppe von einer oder
mehreren logischen oder physikalischen Netzwerkschnittstellen verbunden
sein. Zusätzlich
kann für
Zwecke der Handhabung von Paketen, die vom Netzwerkgerät selbst
erzeugt sind, ein separater Cache zur Handhabung derartiger intern
erzeugter Pakete betrieben werden.
-
Während
in oben beschriebenen zahlreichen Ausführungsformen angenommen wurde,
dass entweder die erste Paketverarbeitungsanwendung zum Empfangen
des Pakets oder der langsame NAT-Empfangspfad das Modul zum Kennzeichnen des
Pakets mit dem Cache-Nachschlageschlüssel ist,
kann in alternativen Ausführungsformen
das Kennzeichnen bei Empfang an der physikalischen oder logischen
Schnittstelle durchgeführt
werden. Eine weitere Option besteht darin, das Paket zu kennzeichnen,
falls und wenn der Paket-Header das erste Mal modifiziert wird.
-
Während
NAT als ein Beispiel einer Paketverarbeitungsanwendung verwendet
wird, die Modifikation eines Abschnitts eines Pakets, der zur Erzeugung
eines Cache-Nachschlageschlüssels verwendet
wird, mit sich bringt, sollte man schließlich erkennen, dass die hierin
beschriebene Paketkennzeichnungslösung auf zahlreiche andere
gegenwärtige oder
zukünftige
Paketverarbeitungsanwendungen anwendbar ist, die die Modifikation
des gesamten oder eines Teils eines Abschnitts eines Netzwerkpakets
mit sich bringen, der zur Erzeugung eines Cache-Nachschlageschlüssels verwendet
wird.
-
In der vorangehenden Beschreibung
ist die Erfindung unter Bezugnahme auf spezielle Ausführungsformen
derselben beschrieben worden. Es wird jedoch ersichtlich sein, dass
zahlreiche Modifikationen und Änderungen
daran vorgenommen werden können,
ohne aus dem breiteren Geist und Schutzbereich der Erfindung zu
gelangen. Die Beschreibung und Zeichnungen sind daher in einem illustrativen statt
in einem beschränkenden
Sinne anzusehen.
-
ZUSAMMENFASSUNG
-
Es werden Vorrichtungen und Verfahren
für einen
Netzwerkadressübersetzungs
(Network Address Translation (NAT))-kompatiblen gemeinsamen Cache
bereitgestellt. Gemäß einer
Ausführungsform
benutzen mehrere Paketverarbeitungsanwendungen, die auf einen oder
mehrere Prozessoren des Netzwerkgeräts verteilt sind, einen oder
mehrere gemeinsame Caches, ohne ein Cache-Synchronisationsprotokoll
zu erfordern. Wenn ein Paket am Netzwerkgerät empfangen wird, kennzeichnet
eine erste Paketverarbeitungsanwendung, wie zum Beispiel NAT oder
andere Anwendungen, die einen Teil des Paket-Headers modifiziert,
auf dem ein Cache-Nachschlageschlüssel basiert, das Paket mit
einem Cache-Nachschlageschlüssel auf
der Grundlage der ursprünglichen
Inhalte des Paket-Headers. Danach verwenden weitere Paketverarbeitungsanwendungen,
die versuchen, auf den Cache-Eintrag
vom gemeinsamem Cache im Anschluß an das Kennzeichnen durch
die erste Paketverarbeitungsanwendung zuzugreifen, den Tag (den
von der ersten Paketverarbeitungsanwendung erzeugten Cache-Nachschlageschlüssel), statt
dass sie den Cache-Nachschlageschlüssel auf der Grundlage der
gegenwärtigen
Inhalte des Paket-Headers festlegen.