-
Die
Erfindung bezieht sich auf das Gebiet der Computersysteme und Computernetze.
Auf dem Gebiet der TCP/IP-Netze ist es zum Beispiel aus der
EP 0865180 bekannt, die
Belastung auf Server zu verteilen. Die vorliegende Erfindung unterscheidet
sich darin, dass sie sich insbesondere auf eine Netzschnittstellenschaltung
(NIC) zur Verarbeitung von Datenpaketen bezieht, die zwischen einem
Computernetz und einem Hauptrechnersystem ausgetauscht werden.
-
Die
Schnittstelle zwischen einem Computer und einem Netz ist häufig ein
Flaschenhals für
Datenübertragung,
die sich zwischen dem Computer und dem Netz abspielt. Während die
Computerleistung (z.B. Prozessorgeschwindigkeit) mit den Jahren
exponentiell zugenommen hat und Computernetz-Übertragungsgeschwindigkeiten ähnliche
Zuwächse
erfahren haben, wurden Ineffizienzen in der Art und Weise, in der
Netzschnittstellenschaltungen Datenübertragung abwickeln, immer
deutlicher. Mit jeder Zunahme der Computer- oder Netzgeschwindigkeit
wird es noch offensichtlicher, dass die Schnittstelle zwischen dem
Computer und dem Netz nicht Schritt halten kann. Diese Ineffizienzen
sind mit mehreren Grundproblemen in der Art und Weise verknüpft, in
der Datenübertragung
zwischen einem Netz und einem Computer abgewickelt wird.
-
Die
heute am meisten verbreitete Form von Netzen ist tendenziell paketbasiert.
Diese Typen von Netzen, einschließlich des Internets und vieler
lokaler Netze, senden Informationen in Form von Paketen. Jedes Paket
wird von einer Ursprungs-Datenstation separat erzeugt und gesendet
und wird von einer Ziel-Datenstation separat empfangen und verarbeitet.
Zusätzlich
kann jedes Paket, zum Beispiel in einem Netz mit Bus-Topologie, von zahlreichen
Stationen empfangen und verarbeitet werden, die zwischen den Ursprungs-
und Ziel-Datenstationen liegen.
-
Ein
Grundproblem bei Paketnetzen ist, dass jedes Paket sowohl an den
Ursprungs- als auch Ziel-Datenstationen durch mehrere Protokolle
oder Protokollebenen (im Ganzen als "Protokollstapel" bekannt) verarbeitet werden muss. Wenn
die zwischen Stationen übertragenen
Daten länger
als eine bestimmte Minimallänge
sind, werden die Daten in mehrere Abschnitte unterteilt, und jeder
Abschnitt wird von einem separaten Paket befördert. Die Datenmenge, die
ein Paket befördern
kann, ist im Allgemeinen durch das Netz beschränkt, das das Paket transportiert,
und wird häufig
als maximale Übertra gungseinheit
(MTU) bezeichnet. Die ursprüngliche
Ansammlung von Daten ist manchmal als "Datagramm" bekannt, und jedes Paket, das einen
Teil eines einzelnen Datagramms befördert, wird sehr ähnlich wie
die anderen Pakete des Datagramms verarbeitet.
-
Datenpakete
werden im Allgemeinen wie folgt verarbeitet. In der Ursprungs-Datenstation
wird jeder separate Datenabschnitt eines Datagramms durch einen
Protokollstapel verarbeitet. Während
dieser Verarbeitung werden dem Datenabschnitt mehrere Protokoll-Anfangsblöcke (z.B.
TCP, IP, Ethernet) hinzugefügt,
um ein Paket zu bilden, das über
das Netz übertragen
werden kann. Das Paket wird von einer Netzschnittstellenschaltung
empfangen, die das Paket an die Ziel-Datenstation oder einen die
Ziel-Datenstation
bedienenden Hauptrechner überträgt. In der
Ziel-Datenstation wird das Paket in der entgegengesetzten Richtung
wie in der Ursprungs-Datenstation durch den Protokollstapel verarbeitet.
Während
dieser Verarbeitung werden die Protokoll-Anfangsblöcke in der entgegengesetzten
Reihenfolge, in der sie angebracht wurden, entfernt. Der Datenabschnitt
wird somit wiederhergestellt und kann einem Benutzer wie z.B. einem
Anwendungsprogramm usw. zur Verfügung
gestellt werden.
-
Mehrere
verknüpfte
Pakete (z.B. Pakete, die Daten aus einem Datagramm befördern),
machen somit auf eine serielle Weise (d.h. ein Paket auf einmal)
im Wesentlichen den gleichen Prozess durch. Je mehr Daten übertragen
werden müssen,
desto mehr Pakete müssen
gesendet werden, wobei jedes separat abgewickelt und in jeder Richtung
durch den Protokollstapel verarbeitet werden muss. Je mehr Pakete
verarbeitet werden müssen,
desto größer sind
natürlich
die an den Prozessor einer Datenstation gestellten Anforderungen.
Die Zahl der Pakete, die verarbeitet werden müssen, wird durch mehr Faktoren
als nur die in einem Datagramm gesendete Datenmenge beeinflusst.
Zum Beispiel, wenn die in einem Paket eingebundene Datenmenge zunimmt,
müssen
weniger Pakete gesendet werden. Wie oben dargelegt, kann ein Paket
jedoch eine maximale zulässige
Größe haben,
je nach dem benutzten Netztyp (z.B. ist die maximale Übertragungseinheit
für Standard-Ethernet-Verkehr
ungefähr
1.500 Byte). Die Geschwindigkeit des Netzes beeinflusst auch die
Zahl der Pakete, die eine NIC in einer gegebenen Zeitspanne verarbeiten
kann. Zum Beispiel benötigt
ein Gigabit-Ethernet-Netz, das mit Spitzenleistung arbeitet, möglicherweise
eine NIC für
Empfang von ungefähr
1,48 Millionen Paketen pro Sekunde. Die Zahl der durch einen Protokollstapel
zu verarbeitenden Pakete kann den Prozessor eines Computers somit
erheblich belasten. Die Situation wird durch die Notwendigkeit verschlimmert,
jedes Paket separat zu verarbeiten, obwohl jedes Paket auf eine
im Wesentlichen ähnliche
Weise verarbeitet wird.
-
Ein
mit der getrennten Verarbeitung von Paketen verknüpftes Problem
ist die Art und Weise, in der während
Datenübertragung
und -empfang Daten zwischen "Benutzerplatz" (z.B. Datenspeicher
eines Anwendungsprogramms) und "Systemplatz" (z.B. Systemspeicher)
bewegt werden. Gegenwärtig
werden Daten einfach von dem einem, einem Benutzer oder Anwendungsprogramm
zugewiesenen Speicherbereich in einen anderen, dem Prozessor zur
Verfügung
gestellten Speicherbereich kopiert. Da jeder Abschnitt eines Datagramms,
der in einem Paket übertragen
wird, möglicherweise
separat kopiert wird (d.h. ein Byte auf einmal), wird eine nichttriviale
Menge Prozessorzeit benötigt,
und häufige Übertragungen
können
sehr viel Bandbreite des Speicherbusses verbrauchen. Erläuternd wird
möglicherweise
jedes Byte Daten in einem aus dem Netz empfangenen Paket aus dem
Systemplatz gelesen und in einer separaten Kopieroperation in den
Benutzerplatz geschrieben und umgekehrt für über das Netz übertragene
Daten. Der Systemplatz stellt zwar im Allgemeinen einen geschützten Speicherbereich
(z.B. vor Manipulation durch Benutzerprogramme geschützt) bereit,
die Kopieroperation leistet aber nichts von Wert, wenn vom Standpunkt
einer Netzschnittstellenschaltung aus betrachtet. Statt dessen riskiert
sie Überlastung
des Hauptprozessors und Bremsung seiner Fähigkeit, schnell zusätzlichen
Netzverkehr von der NIC aufzunehmen. Separates Kopieren jedes Pakets
kann daher sehr ineffizient sein, besonders in einer Hochgeschwindigkeitsnetz-Umgebung.
-
Außer der
ineffizienten Datenübertragung
(d.h. ein Paket Daten auf einmal) ist auch die Verarbeitung von
Anfangsblöcken
der aus einem Netz empfangenen Pakete ineffizient. Jedes Paket,
das einen Teil eines einzelnen Datagramms befördert, hat zwar im Allgemeinen
die gleichen Protokoll-Anfangsblöcke
(z.B. TCP, IP, Ethernet), es kann aber eine Veränderung in den Werten innerhalb
der Paket-Anfangsblöcke
für ein
bestimmtes Protokoll geben. Jedes Paket wird jedoch durch den gleichen
Protokollstapel individuell verarbeitet, was mehrere Wiederholungen
von identischen Operationen für
verknüpfte
Pakete erfordert. Aufeinander folgendes Verarbeiten von unverknüpften Paketen
durch unterschiedliche Protokollstapel ist wahrscheinlich viel weniger effizient
als fortschreitendes Verarbeiten einer Anzahl von verknüpften Paketen
durch einen Protokollstapel auf einmal.
-
Ein
anderes Grundproblem in Bezug auf die Wechselwirkung zwischen gegenwärtigen Netzschnittstellenschaltungen
und Hauptrechnersystemen ist, dass die Kombination häufig keinen
Nutzen aus den vergrößerten Prozessorressourcen
ziehen kann, die in Mehrprozessor-Computersystemen zur Verfügung stehen. Mit
anderen Worten, gegenwärtige
Versuche, die Verarbeitung von Netzpaketen (z.B. durch einen Protokollstapel)
in einer effizienten Weise auf eine Anzahl von Protokollen zu verteilen,
sind allgemein ineffektiv. Insbesondere kommt die Leistung von gegenwärtigen NICs
nicht nahe an die erwarteten oder gewünschten linearen Leistungsgewinne
heran, die bei Verfügbarkeit
von mehreren Prozessoren erwartungsgemäß zu realisieren wären. In
manchen Mehrprozessorsystemen wird bei Verwendung von zum Beispiel
mehr als 4 bis 6 Prozessoren wenig Verbesserung bei der Verarbeitung
von Netzverkehr realisiert.
-
Außerdem kann
es sein, dass die Geschwindigkeit, mit der Pakete von einer Netzschnittstellenschaltung
an einen Hauptrechner oder ein anderes Datenübertragungsgerät übertragen
werden, nicht mit der Paketankunftsgeschwindigkeit an der Netzschnittstelle
Schritt hält.
Das eine oder andere Element des Hauptrechners (z.B. ein Speicherbus,
ein Prozessor) kann überlastet
oder auf andere Weise unfähig
werden, mit genügender
Bereitwilligkeit Pakete anzunehmen. In diesem Fall werden möglicherweise
ein oder mehr Pakete fallengelassen oder abgeworfen. Fallenlassen
von Paketen kann ein Netzobjekt veranlassen, einigen Verkehr neu
zu übertragen,
und wenn zu viele Pakete fallengelassen werden, erfordert eine Netzverbindung
möglicherweise
Neuinitialisierung. Weiterhin kann das Fallenlassen eines Pakets
oder Pakettyps statt eines anderen einen wesentlichen Unterschied
im Gesamtnetzverkehr ausmachen. Wird zum Beispiel ein Steuerpaket
fallengelassen, wird die entsprechende Netzverbindung möglicherweise
massiv beeinflusst und kann wegen der typischen geringen Größe eines
Steuerpakets möglicherweise
wenig tun, um die Paketsättigung
der Netzschnittstellenschaltung zu mildern. Wird daher das Fallenlassen
von Paketen nicht auf eine Weise durchgeführt, die die Wirkung auf viele
Netzverbindungen verteilt oder die auf bestimmte Typen von Paketen
Rücksicht
nimmt, wird der Netzverkehr möglicherweise
mehr als notwendig verschlechtert.
-
Daher
können
gegenwärtige
NICs keine angemessene Leistung zur Verbindung von heutigen Hochleistungs-Computersystemen
und Hochgeschwindigkeitsnetzen bereitstellen. Außerdem kann eine Netzschnittstellenschaltung,
die auf einen überlasteten
Hauptrechner keine Rücksicht
nehmen kann, die Computerleistung verschlechtern.
-
"IP Switching and
Gigabit Routers" von
Peter Newman et al., IEEE Communications Magazine, Band 35, Nr.
1, 1977, Seiten 64–69,
bespricht Gigabit-Router und IP-Vermittlungsstellen zum Weiterleiten
von IP-Verkehr. IP-Vermittlungsstellen leiten Verkehr auf der Basis
von Flüssen,
deren Abwicklung durch das erste Paket in dem Fluss bestimmt wird.
-
"IETF Multiprotocol
Label Switching (MPLS) Architecture" von Francois Le Faucheur, IEEE International
Conference on ATM, 22. Juni 1998, Seiten 6–15, diskutiert die Verwendung
der MPLS-Technologie zum Transport eines Ebene-3-Protokolls über irgendeine
Ebene-2-Technologie. Bei MPLS werden Pakete markiert, um den Datenübertragungsstrom
zu kennzeichnen, zu dem sie gehören.
Die Markierung eines Pakets wird an Vermittlungsstellen benutzt,
um die nächste
Etappe des Pakets zu bestimmen.
-
Die
WO 97 28505 A offenbart ein Verfahren und eine Vorrichtung zum dynamischen
Umschalten zwischen Leiten und Vermitteln von Paketen. Werden Pakete
an einem stromabwärtigen
Knoten empfangen, werden sie klassifiziert, um zu bestimmen, ob
sie zu einem Fluss gehören,
der umzuleiten ist. Wenn ja, wird dem stromaufwärtigen Knoten eine freie Markierung
zur Anbringung an Paketen in diesem Fluss geliefert.
-
"RFC 1932: IP over
ATM: A Framework Document" von
R. Cole et al., IETF Network Working Group, http://hlapic.srce.hr/cgi-bin/rfc/rfc1932.txt,
April 1996, Seiten 1–31,
diskutiert Methoden zum Leiten von IP-Paketen über ATM-Teilnetze. Bei einer
verbindungsorientierten Methode werden virtuelle Kanäle eingerichtet,
die auf Basis eines Zeitzählers
abgebrochen werden können.
-
Die
US-A-5 684 954 offenbart ein Verfahren und eine Vorrichtung zum
Verarbeiten von Feldern eines einem Datenstrom vorhergehenden Protokoll-Anfangsblocks,
um eine Verbindungskennung zum Verarbeiten des Datenstroms zu erzeugen.
Es werden Protokolltyp-Informationen eines ersten Protokolls extrahiert,
und danach werden Informationen hinsichtlich der auf dem ersten
Protokoll aufgebauten Protokolle gelesen. Das Protokoll und die
Protokolltyp-Informationen werden benutzt, um die Verbindungskennung
zu erzeugen.
-
Die
WO 99 00949 A offenbart ein Mehrschicht-Netzelement zum Versenden
von Paketen von einem Eingangs-Port zu einem Ausgangs-Port mit Dienstgüte. Pakete
werden zufällig
abgeworfen, wenn Ausgangswarteschlangen einen spezifizierten Schwellenwert
unterhalb ihrer Kapazitäten
erreichen. Die Priorität
eines Flusses, der eine Warteschlange überlaufen lässt, wird erniedrigt.
-
Die
WO 99 00737 A offenbart ein System und ein Verfahren zum Aktualisieren
von Paket-Anfangsblöcken.
Ein Eingangs-Port-Prozess (IPP) puffert ein Paket und liefert Anfangsblock-Informationen
an eine Suchmaschine. Die Suchmaschine versorgt den IPP mit Pakettyp-Informationen,
die dann selektiv Felder der Paket-Anfangsblöcke ersetzen.
-
ZUSAMMENFASSUNG
-
In
einer Ausführungsform
der Erfindung werden ein System und ein Verfahren zum Verteilen
der Verarbeitung von Netzpaketen auf mehrere Prozessoren in einem
Mehrprozessor-Computer bereitgestellt. Während so einer verteilten Verarbeitung
können
ein oder mehrere Anfangsblöcke,
die Datenübertragungsprotokollen
zugeordnet sind, die benutzt werden, um die Pakete aufzubauen und
zu übertragen,
entfernt werden.
-
Ein
Datenübertragungsgerät wie z.B.
eine Hochleistungs-Netzschnittstelle empfängt ein Paket aus einem Netz.
Es werden Kennungen der Quellen- und Zielobjekte des Pakets erzeugt
oder zusammengesetzt, um einen Flussschlüssel zu bilden. Der Flussschlüssel kennzeichnet
den Datenfluss, die Verbindung oder die Schaltung, der bzw. die
das Paket enthält.
-
In
dieser Ausführungsform
wird eine Hash-Funktion am Flussschlüssel durchgeführt, um
eine Zahl zu erzeugen, die größenmäßig kleiner
als der Flussschlüssel
ist und die relativ gleichmäßig auf
einen Bereich von möglichen
Werten verteilt ist. Mit dem Resultat der Hash-Funktion wird dann
eine Modulus-Funktion über
die Zahl der Prozessoren im Hauptrechnersystem durchgeführt. Das
Resultat der Modulus-Funktion ist eine Zahl, die den Prozessor kennzeichnet,
der dieses Paket verarbeiten soll. Andere Pakete im selben Datenfluss,
die denselben Flussschlüssel
erzeugen, werden demselben Prozessor vorgelegt. Erläuternd erzeugt
jedoch ein von einem anderen Quellenobjekt oder für ein anderes
Zielobjekt empfangenes Paket einen anderen Flussschlüssel und
wird einem anderen Prozessor vorgelegt.
-
Die
Zahl der Prozessoren im Hauptrechner kann von Software gespeichert
werden, die auf dem Hauptrechner arbeitet, wie z.B. einem Gerätetreiber
für das
Datenübertragungsgerät. Wenn
die Software das Paket von dem Gerät empfängt, legt sie das Paket dem
bezeichneten Prozessor zur Verarbeitung durch ein oder mehr Protokolle
vor, in Übereinstimmung
mit denen das Paket formatiert wurde.
-
In
einer anderen Ausführungsform
der Erfindung wird eine Modulus-Funktion direkt am Flussschlüssel durchgeführt.
-
In
noch einer anderen Ausführungsform
der Erfindung kann eine Lastverteilung für ein Paket inaktiviert werden,
das nicht in Übereinstimmung
mit einem oder mehreren eines Satzes von vorgewählten Protokollen formatiert
ist. Ist zum Beispiel das Netz, das das Paket transportiert, das
Internet, können
die vorgewählten Protokolle
das Internet-Protokoll
und das Transportsteuerprotokollumfassen. Ein Datenübertragungsgerät in dieser
Ausführungsform
kann ein Anfangsblock-Analysatormodul enthalten, das konfiguriert
ist, in Übereinstimmung
mit diesen Protokollen formatierte Pakete zu analysieren, damit
andere Operationen ermöglicht
werden, wie z.B. das Wiederzusammensetzen von Daten oder die kollektive
Verarbeitung von mehreren Paketen in einem Datenfluss. Das Datenübertragungsgerät kann außerdem eine
Flussdatenbank oder einen Flussdatenbankmanager zum Verwalten der
am Gerät
empfangenen Datenübertragungsflüsse enthalten.
-
KURZE BESCHREIBUNG
DER FIGUREN
-
1A ist
ein Blockdiagramm, dass eine Netzschnittstellenschaltung (NIC) für Empfang
eines Pakets aus einem Netz in Übereinstimmung
mit einer Ausführungsform
der vorliegenden Erfindung zeigt.
-
1B ist
ein Flussdiagramm, das ein Verfahren zum Betrieb der NIC von 1A zur Übertragung eines
aus einem Netz empfangenen Pakets an einen Hauptrechner in Übereinstimmung
mit einer Ausführungsform
der Erfindung zeigt.
-
2 ist
ein Diagramm eines über
ein Netz übertragenes
und an einer Netzschnittstellenschaltung empfangenen Pakets in einer
Ausführungsform
der Erfindung.
-
3 ist
ein Blockdiagramm, dass einen Anfangsblock-Analysator einer Netzschnittstellenschaltung zum
Analysieren eines Pakets in Übereinstimmung
mit einer Ausführungsform
der Erfindung zeigt.
-
4A bis 4B enthalten
ein Flussdiagramm, das ein Verfahren zum Analysieren eines aus einem Netz
an einer Netzschnittstellenschaltung empfangenen Pakets in Übereinstimmung
mit einer Ausführungsform
der vorliegenden Erfindung zeigt.
-
5 ist
ein Blockdiagramm, dass eine Netzschnittstellenschaltungs-Flussdatenbank
in Übereinstimmung
mit einer Ausführungsform
der Erfindung zeigt.
-
6A bis 6E enthalten
ein Flussdiagramm, das ein Verfahren zum Verwalten einer Netzschnittstellenschaltungs-Flussdatenbank
in Übereinstimmung
mit einer Ausführungsform
der Erfindung darstellt.
-
7 ist
ein Flussdiagramm, das ein Verfahren zum Verteilen der Verarbeitung
von Netzpaketen auf mehrere Prozessoren in einem Hauptrechner in Übereinstimmung
mit einer Ausführungsform
der Erfindung zeigt.
-
8 zeigt
einen Satz von dynamischen Befehlen zum Analysieren eines Pakets
in Übereinstimmung mit
einer Ausführungsform
der Erfindung.
-
DETAILLIERTE
BESCHREIBUNG
-
Die
folgende Beschreibung wird gegeben, um einen Fachmann in die Lage
zu versetzen, die Erfindung zu realisieren und zu verwenden, und
wird im Kontext bestimmter Anwendungen der Erfindung und ihrer Erfordernisse
gegeben. Für
den Fachmann ergeben sich leicht zahlreiche Modifikationen der offenbarten
Ausführungsformen,
und die hierin definierten allgemeinen Prinzipien können auf
andere Ausführungsformen
und Anwendungen angewendet werden, ohne den Schutzbereich der vorliegenden
Erfindung zu verlassen. Daher soll die vorliegende Erfindung nicht
auf die gezeigten Ausführungsformen
beschränkt
sein, sondern ist mit dem breitesten Schutzumfang in Einklang zu
bringen, der mit den hierin offenbarten Prinzipien und Merkmalen
verträglich
ist.
-
Insbesondere
werden nachfolgend Ausführungsformen
der Erfindung in Form einer Netzschnittstellenschaltung (NIC) beschrieben,
die Datenpakete empfängt,
die in Übereinstimmung
mit bestimmten Datenübertragungsprotokollen
formatiert sind, die mit dem Internet kompatibel sind. Der Fachmann
erkennt jedoch, dass die vorliegende Erfindung nicht auf mit dem
Internet kompatible Datenübertragungsprotokolle
beschränkt ist
und leicht für
Verwendung mit anderen Protokollen und in anderen Kommunikationsgeräten als
einer NIC angepasst werden kann.
-
Die
Programmumgebung, in der eine vorliegende Ausführungsform der Erfindung ausgeführt wird, enthält erläuternd einen
Universalrechner oder ein Spezialgerät wie z.B. einen tragbaren
Rechner. Die Einzelheiten solcher Geräte (z.B. Prozessor, Speicher,
Datenspeicher, Ein-/Ausgabe-Ports und Anzeige) sind bekannt und
sind der Übersichtlichkeit
halber weggelassen.
-
Außerdem versteht
sich, dass die Techniken der vorliegenden Erfindung unter Verwendung
mannigfacher Technologien realisiert werden können. Zum Beispiel können die
hierin beschriebenen Verfahren in Software realisiert werden, die
auf einem programmierbaren Mikroprozessor läuft, oder unter Verwendung
einer Kombination von Mikroprozessoren oder anderen speziell gestalteten
anwendungsspezifischen integrierten Schaltungen, programmierbaren
Logikvorrichtungen oder verschiedenen Kombinationen davon in Hardware realisiert
werden. Insbesondere können
die hierin beschriebenen Verfahren durch eine Folge von computerausführbaren
Befehlen realisiert werden, die sich auf einem Speichermedium wie
z.B. einer Trägerwelle,
einem Plattenlaufwerk oder einem anderen computerlesbaren Medium
befinden.
-
Einleitung
-
In
einer Ausführungsform
der vorliegenden Erfindung ist eine Netzschnittstellenschaltung
(NIC) konfiguriert, Datenpakete zu empfangen und zu verarbeiten,
die zwischen einem Hauptrechnersystem und einem Netz wie z.B. dem
Internet ausgetauscht werden. Insbesondere ist die NIC konfiguriert,
Pakete zu empfangen und zu verarbeiten, die in Übereinstimmung mit einem Protokollstapel
(z.B. einer Kombination von Datenübertragungsprotokollen) formatiert
sind, die von einem mit der NIC verbundenen Netz unterstützt werden.
-
Ein
Protokollstapel kann unter Bezugnahme auf die siebenschichtige Grundmodellstruktur
ISO-OSI (International Standards Organization – Open Systems Interconnection)
beschrieben werden. Somit enthält
ein Beispiels-Protokollstapel das Transportsteuerprotokoll (TCP)
in Schicht vier, Internet-Protokoll in Schicht drei und Ethernet
in Schicht zwei. Zu Zwecken der Erörterung kann der Ausdruck "Ethernet" hierin verwendet
werden, um die standardisierte Spezifikation 802.3 des IEEE (Institute
of Electrical and Electronics Engineers) und auch die Version zwei
der nicht standardisierten Form des Protokolls gemeinsam zu bezeichnen.
Wo verschiedene Formen des Protokolls unterschieden werden müssen, kann
die Standardform durch Einschluss der Bezeichnung "802.3" gekennzeichnet werden.
-
Andere
Ausführungsformen
der Erfindung sind konfiguriert, mit Datenübertragungen zu arbeiten, die sich
an andere Protokolle klammern, die gegenwärtig bekannt (z.B. Apple-Talk, IPX (Internetwork
Packet Exchange, Vernetzungspaketaustausch) usw.) oder unbekannt
sind. Der Fachmann erkennt, dass die durch diese Erfindung bereitgestellten
Verfahren leicht an neue Datenübertragungsprotokolle
anpassbar sind.
-
Außerdem kann
die nachfolgend beschriebene Verarbeitung von Paketen in anderen
Datenübertragungsgeräten als
einer NIC durchgeführt
werden. Zum Beispiel kann ein Modem, Switch (Vermittlungsgerät), Router
(Leitgerät)
oder ein anderer Datenübertragungs-Port
oder ein anderes Gerät
(z.B. seriell, parallel, USB, SCSI) ähnlich konfiguriert und betrieben
werden.
-
In
den nachfolgend beschriebenen Ausführungsformen der Erfindung
empfängt
eine NIC ein Paket im Namen eines Hauptrechnersystems oder anderen
Datenübertragungsgeräts aus einem
Netz. Die NIC analysiert das Paket (z.B. durch Wiedergewinnen von
bestimmten Feldern aus einem oder mehreren seiner Protokoll-Anfangsblöcke) und
geht so vor, dass die Effizienz vergrößert wird, mit der das Paket
an sein Zielobjekt übertragen
oder geliefert wird. Die nachfolgend erörterten Geräte und Verfahren zum Vergrößern der
Effizienz der Verarbeitung oder Übertragung
von Paketen, die aus einem Netz empfangen werden, können auch
für Pakete
verwendet werden, die sich in der umgekehrten Richtung bewegen (d.h.
von der NIC zum Netz).
-
Eine
Technik, die auf ankommenden Netzverkehr angewandt werden kann,
umfasst, einen oder mehrere Anfangsblöcke eines ankommenden Pakets
(z.B. Anfangsblöcke
für die
Protokolle der Schichten zwei, drei und vier) zu prüfen oder
zu analysieren, um die Quellen- und Zielobjekte des Pakets zu kennzeichnen
und möglicherweise
bestimmte andere Informationen wiederzugewinnen. Unter Verwendung
von Kennungen der Datenübertragungsobjekte
als Schlüssel
können
Daten aus mehreren Paketen angesammelt oder wiederzusammengesetzt
werden. Typischerweise wird ein von einem Quellenobjekt zu einem
Zielobjekt gesendetes Datagramm mittels mehrerer Pakete übertragen.
Ansammeln von Daten aus mehreren verknüpften Paketen (z.B. Paketen,
die Daten aus demselben Datagramm befördern) erlauben es somit, ein
Datagramm wieder zusammenzusetzen und kollektiv an einen Hauptrechner
zu übertragen.
Das Datagramm kann dem Zielobjekt dann auf eine höchst effiziente
Weise geliefert werden. Zum Beispiel, statt Daten aus einem Paket
jeweils (und ein Byte auf einmal) in separaten "Kopieroperationen" zu liefern, kann eine "Seitenklapp"-Operation durchgeführt werden.
Bei einem Seitenklapp kann dem Zielobjekt eine ganze Speicherseite
Daten geliefert werden, möglicherweise
im Austausch gegen eine leere oder unbenutzte Seite.
-
Bei
einer anderen Technik werden aus einem Netz empfangene Pakete in
eine Warteschlange gestellt, um auf Übertragung an einen Computer
zu warten. Während
sie auf Übertragung
warten, können
dem Hauptrechner mehrere verknüpfte
Pakete gekennzeichnet werden. Nach ihrer Übertragung können sie
von einem Hauptprozessor als Gruppe verarbeitet werden, statt seriell
(d.h. eines auf einmal) verarbeitet zu werden.
-
Noch
eine andere Technik umfasst, eine Anzahl von verknüpften Paketen
einem einzelnen Prozessor eines Mehrprozessor-Hauptrechnersystems
vorzulegen. Durch Verteilen von zwischen verschiedenen Paaren von
Quellen- und Zielobjekten transportierten Paketen auf verschiedene
Prozessoren kann die Verarbeitung von Paketen durch ihre jeweiligen
Protokollstapel verteilt werden, während Pakete noch in ihrer
richtigen Reihenfolge warten.
-
Die
oben erörterten
Techniken zum Vergrößern der
Effizienz, mit der Pakete verarbeitet werden, können eine Kombination aus Hardware-
und Software-Modulen umfassen, die sich in einer Netzschnittstelle und/oder
einem Hauptrechnersystem befinden. In einer besonderen Ausführungsform
analysiert ein Analysemodul in der NIC eines Hauptrechners Anfangsblock-Abschnitte
von Paketen. Erläuternd
enthält
das Analysemodul eine Mikro-Ablaufsteuerung, die in Übereinstimmung
mit einem Satz von austauschbaren Befehlen arbeitet, die als Mikrocode
gespeichert sind. Unter Verwendung der aus den Paketen extrahierten
Informationen können
mehrere Pakete von einem Quellenobjekt zu einem Zielobjekt gekennzeichnet
werden. Ein Hardware-Wiederzusammensetzmodul in der NIC kann dann
die Daten aus den mehreren Paketen zusammenbringen. Ein weiteres
Hardware-Modul in der NIC ist konfiguriert, verknüpfte Pakete
zu erkennen, die auf Übertragung
an den Hauptrechner warten, so dass sie durch einen geeigneten Protokollstapel
kollektiv statt seriell verarbeitet werden können. Die wiederzusammengesetzten
Daten und die Paket-Anfangsblöcke
können
dann dem Hauptrechner geliefert werden, so dass geeignete Software
(d.h. ein Gerätetreiber
für die
NIC) die Anfangsblöcke
verarbeiten und die Daten an das Zielobjekt abgeben kann.
-
Wenn
der Hauptrechner mehrere Prozessoren enthält, kann ein Lastverteiler
(der auch in Hardware in der NIC realisiert sein kann) einen Prozessor
wählen,
um die Anfangsblöcke
der mehreren Pakete durch einen Protokollstapel zu verarbeiten.
-
In
einer anderen Ausführungsform
der Erfindung wird ein System für
zufälliges
Abwerfen eines Pakets von einer NIC, wenn die NIC mit Paketen, die
auf Übertragung
an einen Hauptrechner warten, gesättigt oder nahezu gesättigt ist,
bereitgestellt.
-
Eine Ausführungsform
einer Hochleistungs-Netzschnittstellenschaltung
-
1A zeigt
eine NIC 100, die in Übereinstimmung
mit einem Ausführungsbeispiel
der Erfindung konfiguriert ist. Es folgt eine kurze Beschreibung
von Betrieb und Wechselwirkung der verschiedenen Module der NIC 100 in
dieser Ausführungsform.
-
Durch
ein Mediumzugriffssteuerungs(MAC)-Modul (in 1A nicht
gezeigt) kann ein Datenpaket aus einem Netz 102 an der
NIC 100 empfangen werden. Das MAC-Modul führt eine
Verarbeitung des Pakets auf niedriger Ebene durch, wie z.B. Lesen
des Pakets aus dem Netz, Durchführen
einer Fehlerprüfung,
Erfassen von Paketfragmenten, Erfassen von übergroßen Paketen, Entfernen der
Präambel
der Schicht 1 usw.
-
Ein
Eingangs-Port-Verarbeitungs(IPP)-Modul 104 empfängt dann
das Paket. Das IPP-Modul
speichert das ganze Paket in einer Paketwarteschlange 116,
wie vom MAC-Modul
oder Netz empfangen, und ein Abschnitt des Pakets wird in einen
Anfangsblock- Analysator 106 kopiert.
In einer Ausführungsform
der Erfindung kann das IPP-Modul 104 als Sortenkoordinator
zum Vorbereiten des Pakets für Übertragung
an ein Hauptrechnersystem arbeiten. In so einer Rolle kann das IPP-Modul 104 Informationen
hinsichtlich eines Pakets von verschiedenen Modulen der NIC 100 empfangen
und solche Informationen an andere Module versenden.
-
Der
Anfangsblock-Analysator 106 analysiert einen Anfangsblock-Abschnitt
des Pakets, um verschiedene Informationsbruchstücke wiederzugewinnen, die zur
Kennzeichnung von verknüpften
Paketen (z.B. mehreren Paketen von demselben Quellenobjekt für ein Zielobjekt)
verwendet werden und die die nachfolgende Verarbeitung der Pakete
beeinflussen. In dem Ausführungsbeispiel
kommuniziert der Anfangsblock-Analysator 106 mit einem
Flussdatenbankmanager (FDBM) 108, der eine Flussdatenbank
(FDB) 110 verwaltet. Insbesondere legt der Anfangsblock-Analysator 106 dem
FDBM 108 eine Frage vor, um zu bestimmen, ob es einen gültigen Datenfluss
(nachfolgend beschrieben) zwischen dem Quellenobjekt, das ein Paket
sendet, und dem Zielobjekt gibt. Das Zielobjekt kann ein Anwendungsprogramm,
ein Datenübertragungsmodul
oder ein anderes Element eines Hauptrechnersystems umfassen, das
das Paket empfangen soll.
-
In
dem Ausführungsbeispiel
der Erfindung umfasst ein Datenfluss ein oder mehrere Datagramm-Pakete
von einem Quellenobjekt an ein Zielobjekt. Ein Fluss kann durch
einen Flussschlüssel
gekennzeichnet werden, der aus Quellen- und Zielkennungen zusammengesetzt
ist, die durch den Anfangsblock-Analysator 106 aus dem
Paket wiedergewonnen werden. In einer Ausführungsform der Erfindung umfasst
ein Flussschlüssel
Adress- und/oder Port-Informationen für die Quellen- und Zielobjekte
aus den Protokoll-Anfangsblöcken
der Schicht drei (z.B. IP) und/oder Schicht vier (z.B. TCP) des
Pakets.
-
Für die Zwecke
des Ausführungsbeispiels
der Erfindung ist ein Datenfluss einer durchgehenden TCP-Verbindung ähnlich,
hat aber im Allgemeinen eine kürzere
Dauer. Insbesondere kann in dieser Ausführungsform die Dauer eines
Flusses auf die Zeit begrenzt sein, die nötig ist, um alle Pakete zu
empfangen, die zu einem einzelnen Datagramm gehören, das vom Quellenobjekt
zum Zielobjekt geleitet wird.
-
Zu
Zwecken des Flussmanagements gibt daher der Anfangsblock-Analysator 106 den
Flussschlüssel des
Pakets an den Flussdatenbankmanager 108 weiter. Der Anfangs block-Analysator
kann den Flussdatenbankmanager 108 auch mit anderen Informationen
hinsichtlich des aus dem Paket wiedergewonnenen Pakets versorgen
(z.B. Länge
des Pakets).
-
Als
Antwort auf eine vom Anfangsblock-Analysator 106 empfangene
Frage durchsucht der Flussdatenbankmanager 108 die FDB 110.
Erläuternd
speichert die Flussdatenbank 110 Informationen hinsichtlich
jedes gültigen
Datenflusses, der ein Zielobjekt umfasst, das von der NIC 110 bedient
wird. Daher aktualisiert der FDBM 108 nötigenfalls die FDB 110,
je nach den vom Anfangsblock-Analysator 106 empfangenen
Informationen. Außerdem
ordnet in dieser Ausführungsform
der Erfindung der FDBM 108 dem empfangenen Paket einen
Operations- oder Aktionscode zu. Ein Operationscode kann benutzt
werden, um zu bestimmen, ob ein Paket Teil eines neuen oder vorhandenen
Flusses ist, ob das Paket Daten oder nur Steuerinformationen enthält, die
Datenmenge im Paket, ob die Paketdaten mit verknüpften Daten (z.B. anderen Daten
in einem vom Quellenobjekt zum Zielobjekt gesendeten Datagramm)
wiederzusammengesetzt werden können
usw. Der FDBM 108 kann Informationen benutzen, die aus
dem Paket wiedergewonnen und vom Anfangsblock-Analysator 106 geliefert
werden, um einen geeigneten Operationscode auszuwählen. Der
Operationscode des Pakets wird dann zusammen mit einem Index des
Paketflusses innerhalb der FDB 110 an den Anfangsblock-Analysator 106 weitergegeben.
-
In
einer Ausführungsform
der Erfindung kann die Kombination aus Anfangsblock-Analysator 106, FDBM 108 und
FDB 110 oder eine Teilmenge dieser Module als Verkehrsklassifizierer
bekannt sein, wegen deren Rolle beim Klassifizieren oder Kennzeichnen
von an der NIC 100 empfangenem Netzverkehr.
-
In
dem Ausführungsbeispiel
gibt der Anfangsblock-Analysator 106 den Paketfluss außerdem an
einen Lastverteiler 112 weiter. In einem Hauptrechnersystem
mit mehreren Prozessoren kann der Lastverteiler 112 ermitteln,
an welchen Prozessor ein ankommendes Paket zur Verarbeitung durch
den geeigneten Protokollstapel zu leiten ist. Der Lastverteiler 112 kann
zum Beispiel sicherstellen, dass verknüpfte Pakete an einen einzelnen
Prozessor geleitet werden. Indem alle Pakete in einem Datenfluss
oder einer durchgehenden Verbindung an einen einzelnen Prozessor
geleitet werden, kann das richtige Anordnen von Paketen erzwungen
werden. In einer alternativen Ausführungsform der Erfindung kann
der Lastverteiler 112 weggelassen werden. In einer alternati ven
Ausführungsform
kann der Anfangsblock-Analysator 106 auch direkt mit anderen
Modulen der NIC 110 außer
dem Lastverteiler und dem Flussdatenbankmanager kommunizieren.
-
Nachdem
der Anfangsblock-Analysator 106 ein Paket analysiert hat, ändert oder
aktualisiert der FDBM 108 die FDB 110, und der
Lastverteiler 112 bestimmt einen Prozessor im Hauptrechnersystem,
um das Paket zu verarbeiten. Nach diesen Aktionen gibt der Anfangsblock-Analysator
verschiedene Informationen an das IPP-Modul 104 zurück. Erläuternd können diese
Informationen den Flussschlüssel
des Pakets, einen Index des Paketflusses innerhalb der Flussdatenbank 110,
eine Kennung eines Prozessors im Hauptrechnersystem und verschiedene
andere Daten hinsichtlich des Pakets (z.B. seine Länge, Länge eines
Paket-Anfangsblocks) umfassen.
-
Das
Paket kann nun in einer Paketwarteschlange 116 gespeichert
werden, welche Pakete zur Verarbeitung durch eine DMA(Direktspeicherzugriff)-Maschine 120 und Übertragung
an einen Hauptrechner festhält.
Außer
dass das Paket in einer Warteschlange gespeichert wird, wird ein
entsprechender Eintrag für
das Paket in einer Steuerwarteschlange 118 vorgenommen
und können
auch Informationen hinsichtlich des Paketflusses an ein dynamisches
Paketschubmodul 122 weitergegeben werden. Die Steuerwarteschlange 118 enthält verknüpfte Informationen
für jedes
Paket in der Paketwarteschlange 116.
-
Das
Paketschubmodul 122 greift auf Informationen hinsichtlich
Paketen in der Paketwarteschlange 116 zurück, um die
schubweise (d.h. kollektive) Verarbeitung von Anfangsblöcken von
mehreren verknüpften Paketen
zu ermöglichen.
In einer Ausführungsform
der Erfindung signalisiert das Paketschubmodul 122 dem Hauptrechner
die Verfügbarkeit
von Anfangsblöcken
von verknüpften
Paketen, so dass sie zusammen verarbeitet werden können.
-
In
einer Ausführungsform
der Erfindung wird die Verarbeitung der Protokoll-Anfangsblöcke eines
Pakets zwar durch einen Prozessor in einem Hauptrechnersystem durchgeführt, in
einer anderen Ausführungsform
können
die Protokoll-Anfangsblöcke
aber durch einen in der NIC 110 angesiedelten Prozessor
verarbeitet werden. In der ersteren Ausführungsform kann Software auf
dem Hauptrechner (z.B. ein Gerätetreiber
für die NIC 100)
die Vorteile von zusätzlichem
Speicher und einem austauschbaren oder aufrüstbaren Prozessor ernten (z.B.
kann der Speicher ergänzt
werden und kann der Prozessor durch ein schnelleres Modell ersetzt
werden).
-
Während des
Speicherns eines Pakets in der Paketwarteschlange 116 kann
ein Prüfsummengenerator 114 eine
Prüfsummenoperation
durchführen.
Die Prüfsumme
kann der Paketwarteschlange als Anhang zum Paket hinzugefügt werden.
Erläuternd
erzeugt der Prüfsummengenerator 114 eine
Prüfsumme
aus einem Abschnitt des aus dem Netz 102 empfangenen Pakets.
In einer Ausführungsform
der Erfindung wird eine Prüfsumme
aus dem TCP-Abschnitt eines Pakets (z.B. dem TCP-Anfangsblock und
Daten) erzeugt. Ist ein Paket nicht in Übereinstimmung mit dem TCP-Protokoll
formatiert, kann eine Prüfsumme
aus einem anderen Abschnitt des Pakets erzeugt werden, und das Resultat
kann nötigenfalls
bei späterer
Verarbeitung berichtigt werden. Zum Beispiel, wenn die vom Prüfsummengenerator 114 berechnete
Prüfsumme
nicht am richtigen Abschnitt des Pakets berechnet wurde, kann die
Prüfsumme
berichtigt werden, um den richtigen Abschnitt zu erfassen. Diese
Berichtigung kann mittels Software durchgeführt werden, die auf einem Hauptrechnersystem
arbeitet (z.B. einem Gerätetreiber).
In einer alternativen Ausführungsform
der Erfindung kann der Prüfsummengenerator 114 weggelassen
oder in ein anderes Modul der NIC 100 gelegt werden.
-
Mit
den vom Anfangsblock-Analysator 106 erhaltenen Informationen
und den vom Flussdatenbankmanager 108 verwalteten Flussinformationen
ist das von der NIC 100 bediente Hauptrechnersystem in
dem Ausführungsbeispiel
in der Lage, Netzverkehr sehr effizient zu verarbeiten. Zum Beispiel
können
Datenabschnitte von verknüpften
Paketen von der DMA-Maschine 120 wiederzusammengesetzt
werden, um Ansammlungen zu bilden, die effizienter verarbeitet werden
können.
Und indem die Daten in Puffern von der Größe einer Speicherseite zusammengesetzt
werden, können
die Daten durch "Seitenklappen", bei dem eine ganze
von der DMA-Maschine 120 gefüllte Speicherseite auf einmal
bereitgestellt wird, effizienter an ein Zielobjekt übertragen
werden. Ein Seitenklapp kann somit die Stelle von mehreren Kopieroperationen
einnehmen. Indessen können
die Anfangsblock-Abschnitte der wiederzusammengesetzten Pakete durch
ihren geeigneten Protokollstapel ähnlich als eine Gruppe verarbeitet
werden.
-
Wie
schon beschrieben, kann in einer anderen Ausführungsform der Erfindung die
Verarbeitung von Netzverkehr durch geeignete Protokollstapel effizient
in einem Mehrprozessor-Hauptrechnersystem verteilt werden. In dieser
Ausführungsform
ordnet oder teilt der Lastverteiler 112 verknüpfte Pakete
(z.B. Pakete im selben Datenfluss) demselben Prozessor zu. Insbesondere
können
Pakete mit denselben Quellen- und Zieladressen in ihren Anfangsblöcken der
Protokollschicht drei (z.B. IP) und/oder denselben Quellen- und Ziel-Ports
in ihren Anfangsblöcken
der Protokollschicht vier (z.B. TCP) an einen einzelnen Prozessor
gesendet werden.
-
Bei
der in 1A gezeigten NIC sind die oben
erörterten
Verarbeitungsverbesserungen (z.B. Wiederzusammenbau von Daten, Schubverarbeitung
von Paket-Anfangsblöcken,
Verteilen der Protokollstapelverarbeitung) für aus dem Netz 102 empfangene
Pakete möglich,
die in Übereinstimmung
mit einem oder mehreren vorgewählten
Protokollstapeln formatiert sind. In dieser Ausführungsform der Erfindung ist
das Netz 102 das Internet, und die NIC 100 ist
daher konfiguriert, Pakete unter Verwendung von einem oder mehreren
Protokollstapeln zu verarbeiten, die mit dem Internet kompatibel
sind. Pakete; die nicht in Übereinstimmung
mit den vorgewählten
Protokollen konfiguriert sind, werden ebenfalls verarbeitet, können aber
nicht die Vorzüge
des ganzen Gefolges von Verarbeitungseffizienzen erleben, die Paketen
gegeben werden, die den vorgewählten
Protokollen genügen.
-
Zum
Beispiel können
Pakete, die nicht zu einem der vorgewählten Protokollstapel passen,
auf Basis der Quellen- und Zieladressen der Paketschicht zwei (d.h.
Mediumzugriffssteuerung) statt ihrer Adressen der Schicht drei oder
vier zur Verarbeitung in einem Mehrprozessorsystem verteilt werden.
Kennungen der Schicht zwei zu verwenden, gibt der Lastverteilungsprozedur
weniger Körnigkeit,
was die Verarbeitung von Paketen möglicherweise weniger gleichmäßig verteilt
als wenn Kennungen der Schicht drei/vier benutzt werden.
-
1B zeigt
ein Verfahren zur Verwendung der NIC 100 von 1A für Empfang
eines Pakets aus dem Netz 102 und dessen Übertragung
an einen Hauptrechner. Der Zustand 130 ist ein Startzustand,
möglicherweise
durch die Initialisierung oder das Zurücksetzen der NIC 100 charakterisiert.
-
Im
Zustand 132 wird ein Paket von der NIC 100 aus
dem Netz 102 empfangen. Wie schon beschrieben, kann das
Paket in Übereinstimmung
mit mannigfachen Datenübertragungsprotokollen
formatiert sein. Das Paket kann von einem MAC-Modul empfangen und
anfänglich
verarbeitet werden, bevor es an ein IPP-Modul weitergegeben wird.
-
Im
Zustand 134 wird ein Abschnitt des Pakets kopiert und an
den Anfangsblock-Analysator 106 weitergegeben. Der Anfangsblock-Analysator 106 analysiert
dann das Paket, um aus einem oder mehreren seiner Anfangsblöcke und/oder
seiner Daten Werte zu extrahieren. Aus einigen der wiedergewonnenen
Informationen wird ein Flussschlüssel
erzeugt; um den Datenfluss zu kennzeichnen, der das Paket enthält. Der
Grad oder das Maß,
in dem das Paket analysiert wird, kann insofern von seinen Protokollen
abhängen,
als der Anfangsblock-Analysator konfiguriert sein kann, Anfangsblöcke von
verschiedenen Protokollen in verschiedenen Tiefen zu analysieren.
Insbesondere kann der Anfangsblock-Analysator 106 für einen
spezifischen Satz von Protokollen oder Protokollstapeln optimiert
(z.B. seine Operationsbefehle konfiguriert) sein. Wenn das Paket einem
oder mehreren der spezifizierten Protokolle entspricht, kann es
vollständiger
analysiert werden als ein Paket, das sich an keines der Protokolle
klammert.
-
Im
Zustand 136 werden die aus den Paket-Anfangsblöcken extrahierten
Informationen zum Flussdatenbankmanager 108 und/oder Lastverteiler 112 weitergeleitet.
Der FDBM benutzt die Informationen zum Einrichten eines Flusses
in der Flussdatenbank 110, wenn für diesen Datenfluss nicht schon
einer existiert. Wenn schon ein Eintrag für den Paketfluss existiert,
kann er aktualisiert werden, um den Empfang eines neuen Flusspakets
widerzuspiegeln. Weiterhin erzeugt der FDBM 108 einen Operationscode
zum Zusammenfassen von einem oder mehreren Merkmalen oder Bedingungen
des Pakets. Der Operationscode kann von anderen Modulen der NIC 100 benutzt
werden, um das Paket auf eine geeignete Weise abzuwickeln, wie in
nachfolgenden Abschnitten beschrieben. Der Operationscode wird zusammen
mit einem Index (z.B. Flussnummer) des Paketflusses in der Flussdatenbank
an den Anfangsblock-Analysator zurückgesendet.
-
Im
Zustand 138 ordnet der Lastverteiler 112 dem Paket
eine Prozessornummer zu, wenn der Hauptrechner mehrere Prozessoren
enthält,
und sendet die Prozessornummer an den Anfangsblock-Prozessor zurück. Erläuternd kennzeichnet
die Prozessornummer, welcher Prozessor das Paket durch seinen Protokollstapel
auf dem Hauptrechner leiten soll. Der Zustand 138 kann
in einer alternativen Ausführungsform
der Erfindung weggelassen werden, insbesondere wenn der Hauptrechner
nur aus einem einzigen Prozessor besteht.
-
Im
Zustand 140 wird das Paket in der Paketwarteschlange 116 gespeichert.
Wenn der Inhalt des Pakets in die Paketwarteschlange gesetzt wird,
kann der Prüfsummengenerator 114 eine
Prüfsumme
berechnen. Dem Prüfsummengenerator
kann vom IPP-Modul 104 mitgeteilt
werden, für
welchen Abschnitt des Pakets die Prüfsumme zu berechnen ist. Die
berechnete Prüfsumme
wird der Paketwarteschlange als Anhang zum Paket hinzugefügt. In einer
Ausführungsform
der Erfindung wird das Paket im Wesentlichen im gleichen Zeitpunkt
in der Paketwarteschlange gespeichert, in dem eine Kopie des Anfangsblock-Abschnitts
des Pakets dem Anfangsblock-Analysator 106 zur Verfügung gestellt
wird.
-
Außerdem werden
im Zustand 140 Steuerinformationen für das Paket in der Steuerwarteschlange 118 gespeichert,
und Informationen hinsichtlich des Paketflusses (z.B. Flussnummer,
Flussschlüssel)
können
dem dynamischen Paketschubmodul 122 zur Verfügung gestellt
werden.
-
Im
Zustand 142 ermittelt die NIC 100, ob das Paket
bereit ist, an den Hauptrechnerspeicher übertragen zu werden. Bis es
zur Übertragung
bereit ist, wartet die dargestellte Prozedur.
-
Wenn
das Paket zur Übertragung
bereit ist (z.B. liegt das Paket am Kopf der Paketwarteschlange,
oder der Hauptrechner empfängt
das Paket vor diesem Paket in der Paketwarteschlange), ermittelt
im Zustand 114 das dynamische Paketschubmodul 122,
ob bald ein verknüpftes
Paket übertragen
wird. Wenn ja, wird, wenn das gegenwärtige Paket zum Hauptrechner übertragen
wird, dem Hauptrechner signalisiert, dass bald ein verknüpftes Paket
folgen wird. Der Hauptrechner kann dann die Pakete (z.B. durch ihren
Protokollstapel) als eine Gruppe verarbeiten.
-
Im
Zustand 146 wird das Paket (z.B. über eine Direktspeicherzugriffs-Operation)
an einen Hauptrechnerspeicher übertragen.
Und im Zustand 148 wird dem Hauptrechner gemeldet, dass
das Paket übertragen wurde.
Die dargestellte Prozedur endet im Zustand 150.
-
Der
Fachmann auf dem Gebiet der Computersysteme und Vernetzung erkennt,
dass die oben beschriebene Prozedur nur ein Verfahren ist, die Module
der NIC 100 zu be nutzen, um ein einzelnes Paket aus einem
Netz zu empfangen und es an ein Hauptrechnersystem zu übertragen.
Innerhalb des Schutzbereichs der Erfindung werden auch andere geeignete
Methoden erwogen.
-
Ein Beispielpaket
-
2 ist
ein Diagramm eines von der NIC 100 aus dem Netz 102 empfangenen
Beispielpakets. Das Paket 200 enthält einen Datenabschnitt 202 und
einen Anfangsblock-Abschnitt 204 und
kann außerdem
einen Anhangabschnitt 206 enthalten. Je nach der vom Paket 200 durchlaufenen
Netzumgebung kann seine maximale Größe (z.B. seine maximale Übertragungseinheit
oder MTU) begrenzt sein.
-
Im
Ausführungsbeispiel
enthält
der Datenabschnitt 202 Daten, die an ein Ziel- oder Empfangsobjekt innerhalb
eines Computersystems (z.B. Benutzer, Anwendungsprogramm; Betriebssystem) oder eines Datenübertragungs-Teilsystems
des Computers zu liefern sind. Der Anfangsblock-Abschnitt 204 enthält einen
oder mehrere Anfangsblöcke,
die dem Datenabschnitt durch das Quellen- oder Ursprungsobjekt eines
Computersystems, das das Quellenobjekt enthält, vorangestellt werden. Jeder
Anfangsblock entspricht normalerweise einem anderen Datenübertragungsprotokoll.
-
In
einer typischen Netzumgebung wie z.B. dem Internet werden individuelle
Anfangsblöcke
innerhalb des Anfangsblock-Abschnitts 204 angebracht (z.B.
vorn angefügt),
wenn das Paket durch verschiedene Schichten eines Protokollstapels
(z.B. einem Satz von Protokollen für Datenübertragung zwischen Objekten) auf
dem sendenden Computersystem verarbeitet wird. Zum Beispiel zeigt 2 Protokoll-Anfangsblöcke 210, 212, 214 und 216 entsprechend
den Schichten eins bis vier eines geeigneten Protokollstapels. Jeder
Protokoll-Anfangsblock enthält
Informationen zur Verwendung durch das empfangende Computersystem,
wenn das Paket durch den Protokollstapel empfangen und verarbeitet
wird. Zum Schluss wird jeder Protokoll-Anfangsblock entfernt, und
der Datenabschnitt 202 wird wiedergewonnen.
-
Wie
in anderen Abschnitten beschrieben, werden in einer Ausführungsform
der Erfindung ein System und Verfahren bereitgestellt, ein Paket 200 zu
analysieren, um verschiedene Informationsbits wiederzugewinnen.
In dieser Ausführungsform
wird das Paket 200 analysiert, um den Beginn des Datenabschnitts 202 zu bestimmen
und einen oder mehrere Werte für
Felder innerhalb des Anfangsblock-Abschnitts 204 wiederzugewinnen.
Erläuternd
entspricht jedoch der Protokoll-Anfangsblock oder die Präambel 210 der
Schicht eins einer Spezifikation auf Hardware-Ebene, die mit der
Codierung von individuellen Bits verknüpft ist. Protokolle der Schicht
eins werden im Allgemeinen nur für
den physischen Prozess benötigt,
das Paket über
einen Leiter zu senden oder zu empfangen. In dieser Ausführungsform
der Erfindung wird daher eine Präambel 210 der Schicht
eins vom Paket 200 abgestreift, kurz nachdem es von der
NIC 100 empfangen worden ist, und wird daher nicht analysiert.
-
Der
Grad, bis zu dem der Anfangsblock-Abschnitt 204 analysiert
wird, kann davon abhängen,
wie viele, wenn es welche gibt, der im Anfangsblock-Abschnitt dargestellten
Protokolle zu einem Satz von vorgewählten Protokollen passen. Zum
Beispiel kann die Analysierprozedur abgekürzt oder abgebrochen werden,
wenn festgestellt wird, dass einer der Anfangsblöcke des Pakets einem nicht
unterstützten
Protokoll entspricht.
-
Insbesondere
ist in einer Ausführungsform
der Erfindung die NIC 100 in erster Linie für Internet-Verkehr
konfiguriert. Daher wird in dieser Ausführungsform das Paket 200 nur
dann umfassend analysiert, wenn das Protokoll der Schicht zwei Ethernet
ist (entweder traditionelles Ethernet oder 802.3-Ethernet, mit oder ohne
Kennzeichnung für
virtuelle lokalen Netze), das Protokoll der Schicht drei IP (Internet-Protokoll)
ist und das Protokoll der Schicht vier TCP (Transportsteuerprotokoll)
ist. Pakete, die sich an andere Protokolle klammern, können bis
zu einem gewissen (z.B. kleineren) Grad analysiert werden. Die NIC 100 kann
jedoch konfiguriert werden, praktisch jeden Datenübertragungsprotokoll-Anfangsblock
zu unterstützen
und zu analysieren. Erläuternd
werden die Protokoll-Anfangsblöcke,
die analysiert werden, und der Grad, bis zu dem sie analysiert werden,
durch die Konfiguration eines Satzes von Befehlen zum Betrieb des
Anfangsblock-Analysators 106 festgelegt.
-
Wie
oben beschrieben, hängen
die Protokolle entsprechend den Anfangsblöcken 212, 214 und 216 von
der Netzumgebung ab, in die das Paket gesendet wird. Die Protokolle
hängen
außerdem
von den kommunizierenden Objekten ab. Zum Beispiel kann ein Paket,
das von einer Netzschnittstelle empfangen wird, ein Steuerpaket
sein, das zwischen den Mediumzugriffssteuergeräten für die Quellen- und Zielcomputersysteme ausgetauscht
wird. In diesem Fall würde
das Paket wahrscheinlich minimale oder keine Daten enthalten und möglicherweise
keinen Anfangsblock 214 der Protokollschicht drei oder
Anfangsblock 216 der Protokollschicht vier enthalten. Steuerpakete
werden typischerweise für
verschiedene Zwecke benutzt, die mit der Verwaltung von individuellen
Verbindungen verknüpft
sind.
-
Ein
anderer Datenfluss oder eine andere Datenverbindung könnte zwei
Anwendungsprogramme umfassen. In diesem Fall kann ein Paket Anfangsblöcke 212, 214 und 216 enthalten,
wie in 2 gezeigt, und kann außerdem zusätzliche Anfangsblöcke enthalten,
die mit höheren
Schichten eines Protokollstapels verknüpft sind (z.B. Sitzungs-, Darstellungs-
und Anwendungsschichten im ISO-OSI-Modell). Außerdem können manche Anwendungen Anfangsblöcke oder
Anfangsblock-ähnliche
Informationen innerhalb des Datenabschnitts 202 enthalten.
Zum Beispiel für
eine Netzdateisystem(Network File System, NFS)-Anwendung kann der
Datenabschnitt 202 NFS-Anfangsblöcke enthalten, die mit individuellen
NFS-Datagrammen verknüpft
sind. Ein Datagramm kann als eine Sammlung von Daten definiert sein,
die von einem Objekt zu einem anderen gesendet werden, und kann
Daten aufweisen, die in mehreren Paketen übertragen werden. Mit anderen
Worten, die Datenmenge, die ein Datagramm bildet, kann größer sein
als die Datenmenge, die in einem Paket enthalten sein kann.
-
Eine Ausführungsform
eines Anfangsblock-Analysators
-
3A zeigt den Anfangsblock-Analysator 106 von 1A in Übereinstimmung
mit einer vorliegenden Ausführungsform
der Erfindung. Erläuternd
enthält
der Anfangsblock-Analysator 106 einen Anfangsblockspeicher 302 und
einen Analysator 304, und der Analysator 304 enthält einen
Befehlsspeicher 306. Obwohl in 3 als getrennte
Module gezeigt, sind in einer alternativen Ausführungsform der Erfindung der
Anfangsblockspeicher 302 und der Befehlsspeicher 306 zusammenhängend.
-
Im
Ausführungsbeispiel
analysiert der Analysator 304 einen im Anfangsblockspeicher 302 gespeicherten
Anfangsblock in Übereinstimmung
mit Befehlen, die im Befehlsspeicher 306 gespeichert sind.
Die Befehle sind für
das Analysieren von bestimmten Protokollen oder eines bestimmten
Protokollstapels ausgelegt, wie oben erörtert. In einer Ausführungsform
der Erfindung ist der Befehlsspeicher 306 modifizierbar
(z.B. ist der Speicher als RAM, EPROM, EEPROM oder dergleichen ausgeführt), so
dass neue oder modifizierte Analysierbefehle heruntergeladen oder
auf andere Weise installiert werden können. Befehle zum Analysieren
eines Pakets werden im folgenden Abschnitt näher erörtert.
-
In 3 wird
ein Anfangsblock-Abschnitt eines im IPP-Modul 104 (in 1A gezeigt)
gespeicherten Pakets in den Anfangsblockspeicher 302 kopiert.
Erläuternd
werden eine spezifische Zahl von Bytes (z.B. 114) am Beginn
des Pakets kopiert. In einer alternativen Ausführungsform der Erfindung kann
der Abschnitt eines Pakets, der kopiert wird, eine andere Größe haben.
Die in den Anfangsblockspeicher 302 kopierte bestimmte Menge
eines Pakets sollte so groß sein,
dass ein oder mehrere Protokoll-Anfangsblöcke oder mindestens so viel
Informationen (z.B. ob in einem Anfangsblock- oder Datenabschnitt
des Pakets enthalten) erfasst werden, um die weiter unten beschriebenen
Informationen wiederzugewinnen. Der im Anfangsblockspeicher 302 gespeicherte
Anfangsblock-Abschnitt enthält
möglicherweise
nicht den Anfangsblock der Schicht eins, der vor oder in Verbindung
mit der Verarbeitung des Pakets durch das IPP-Modul 104 entfernt
werden kann.
-
Nachdem
ein Anfangsblock-Abschnitt im Anfangsblockspeicher 302 gespeichert
worden ist, analysiert der Analysator 304 den Anfangsblock-Abschnitt
in Übereinstimmung
mit den im Befehlsspeicher 306 gespeicherten Befehlen.
Befehle zum Betrieb des Analysators 304 in der vorliegend
beschriebenen Ausführungsform wenden
die Formate von ausgewählten
Protokollen an, um die Inhalte des Anfangsblockspeichers 302 durchzugehen
und spezifische Informationen wiederzugewinnen. Insbesondere sind
Spezifikationen von Datenübertragungsprotokollen
bekannt und allgemein verfügbar.
Somit kann ein Protokoll-Anfangsblock Byte für Byte oder auf eine andere
Weise durchquert werden, indem auf die Protokollspezifikationen
Bezug genommen wird. Somit ist in einer vorliegendenden Ausführungsform
der Erfindung der Analysieralgorithmus dynamisch, wobei aus einem
Feld eines Anfangsblocks wiedergewonnene Informationen häufig die
Art und Weise ändern,
in der ein anderer Teil analysiert wird.
-
Zum
Beispiel ist es bekannt, dass das Typ-Feld eines Pakets, das sich
an die traditionelle Form von Ethernet (z.B. Version zwei) klammert,
am dreizehnten Byte des Anfangsblocks (Schicht zwei) beginnt. Zum Vergleich
beginnt das Typ-Feld eines Pakets, das der Version IEEE 802.3 von
Ethernet folgt, am einundzwanzigsten Byte des Anfangsblocks. Das
Typ-Feld liegt an noch anderen Stellen, wenn das Paket einen Teil
einer Datenübertragung
in einem virtuellen lokalen Netz (VLAN) bildet (die erläuternd Markieren
oder Einkapseln eines Ethernet-Anfangsblocks umfasst). Somit werden
in einer vorliegenden Ausführungsform
der Erfindung die Werte in bestimmten Feldern der Reihe nach wiedergewonnen
und geprüft,
um sicherzustellen, dass die aus einem Anfangsblock benötigten Informationen
aus dem richtigen Abschnitt des Anfangsblocks herausgeholt worden.
Details hinsichtlich der Form eines VLAN-Pakets findet man in den
Spezifikationen für
die IEEE 802.3p- und IEEE 802.3q-Formen des Ethernet-Protokolls.
-
Der
Betrieb des Anfangsblock-Analysators 106 hängt auch
von anderen Unterschieden zwischen Protokollen ab, zum Beispiel
ob das Paket die Version vier oder die Version sechs des Internet-Protokolls
usw. benutzt. Spezifikationen für
die Versionen vier und sechs des IP findet man in IETF (Internet
Engineering Task Force) RFCs (Kommentaranforderungen) 791 bzw. 2460.
-
Je
mehr Protokolle der Analysator 304 "kennt", auf desto mehr Protokolle kann ein
Paket geprüft
werden, und desto komplizierter kann das Analysieren eines Anfangsblock-Abschnitts eines
Pakets werden. Der Fachmann erkennt, dass die Protokolle, die durch
den Analysator 304 analysiert werden können, nur durch die Befehle
beschränkt
sind, nach denen er arbeitet. Durch Vermehren oder Austauschen der
im Befehlsspeicher 306 gespeicherten Analysierbefehle können daher
praktisch alle bekannten Protokolle vom Anfangsblock-Analysator 106 verarbeitet
werden und können
praktisch beliebige Informationen aus den Anfangsblöcken eines
Pakets wiedergewonnen werden.
-
Wenn
natürlich
ein Paket-Anfangsblock keinem erwarteten oder vermuteten Protokoll
entspricht, wird die Analysieroperation möglicherweise beendet. In diesem
Fall ist das Paket möglicherweise
ungeeignet für eine
oder mehrer der von der NIC 100 gebotenen Effizienzverbesserungen
(z.B. Datenwiederzusammensetzung, Paketschub, Lastverteilung).
-
Erläuternd werden
die aus den Anfangsblöcken
eines Pakets wiedergewonnenen Informationen von anderen Abschnitten
der NIC 100 benutzt, wenn sie dieses Paket verarbeitet.
Zum Beispiel wird als Folge der vom Analysator 304 durchgeführten Paketanalyse
ein Flussschlüssel
erzeugt, um den Datenfluss oder die Datenverbindung zu kennzeichnen,
der bzw. die das Paket enthält.
Erläuternd
wird der Flussschlüssel
zusammengesetzt, indem eine oder mehrere Adressen entsprechend einem
oder mehreren der kommunizierenden Objekte verkettet werden. In
einer vorliegenden Ausfüh rungsform
wird ein Flussschlüssel
aus einer Kombination der aus dem IP-Anfangsblock herausgeholten
Quellen- und Zieladressen und der dem TCP-Anfangsblock entnommenen
Quellen- und Ziel-Ports gebildet. Man kann auch andere Indizes der
kommunizierenden Objekte verwenden, wie z.B. die Ethernet-Quellen-
und Zieladressen (aus dem Anfangsblock der Schicht zwei herausgeholt),
NFS-Dateihandhaben oder Quellen- und
Zielkennungen für
andere aus dem Datenabschnitt des Pakets herausgeholte Anwendungs-Datagramme.
-
Der
Fachmann erkennt, dass die kommunizierenden Objekte mit höherer Auflösung gekennzeichnet werden
können,
indem Indexdaten benutzt werden, die aus den höheren Schichten des einem Paket
zugeordneten Protokollstapels herausgeholt werden. Daher kann eine
Kombination von IP- und TCP-Indizes die Objekte mit höherer Genauigkeit
als Informationen der Schicht zwei kennzeichnen.
-
Außer einem
Flussschlüssel
erzeugt der Analysator 304 auch einen Steuer- oder Statusindikator,
um zusätzliche
Informationen hinsichtlich des Pakets zusammenzufassen. In einer
Ausführungsform
der Erfindung enthält
ein Steuerindikator eine Sequenznummer (z.B. aus einem TCP-Anfangsblock
herausgeholte TCP-Sequenznummer), um das richtige Ordnen von Paketen
beim Wiederzusammensetzen ihrer Daten sicherzustellen. Der Steuerindikator
kann außerdem
verraten, ob bestimmte Anzeiger in den Paket-Anfangsblöcken gesetzt oder gelöscht sind,
ob das Paket irgendwelche Daten enthält, und, wenn das Paket Daten
enthält, ob
die Daten eine bestimmte Größe übersteigen.
Andere Daten sind ebenfalls für
Einschluss in den Steuerindikator geeignet, begrenzt nur durch die
Informationen, die in dem vom Analysator 304 analysierten
Abschnitt des Pakets zur Verfügung
stehen.
-
In
einer Ausführungsform
der Erfindung liefert der Anfangsblock-Analysator 106 den
Flussschlüssel und
den ganzen oder einen Abschnitt des Steuerindikators an den Flussdatenbankmanager 108.
Wie in einem folgenden Abschnitt erörtert, verwaltet der FDBM 108 eine
Datenbank oder andere Datenstruktur, die Informationen enthält, die
für den
durch die NIC 100 laufenden Datenfluss relevant sind.
-
In
anderen Ausführungsformen
der Erfindung erzeugt der Analysator 304 zusätzliche
Informationen, die zur Verwendung durch andere Module der NIC 100 aus
dem Anfangsblock eines Pakets gewonnen werden. Zum Beispiel kann
der Anfangsblock- Analysator 106 den
Versatz der Daten oder eines Nutzlast-Abschnitts eines aus einem
Netz empfangenen Pakets vom Beginn des Pakets oder von irgendeinem
anderen Punkt aus berichten. Wie oben beschrieben, folgt der Datenabschnitt
eines Pakets typischerweise dem Anfangsblock-Abschnitt und, und
ihm kann ein Anhangabschnitt folgen. Andere Daten, die der Anfangsblock-Analysator 106 berichten
kann, können
den Ort im Paket, an dem eine Prüfsummenoperation
beginnen sollte, den Ort im Paket, an dem die Anfangsblöcke der
Schicht drei und/oder Schicht vier beginnen, Diagnosedaten, Nutzlastinformationen
usw. enthalten. Der Ausdruck "Nutzlast" wird häufig benutzt,
um den Datenabschnitt eines Pakets zu bezeichnen. Insbesondere liefert
in einer Ausführungsform
der Erfindung der Anfangsblock-Analysator 106 einen Nutzlastversatz
und eine Nutzlastgröße an die
Steuerwarteschlange 118.
-
Unter
geeigneten Umständen
kann der Anfangsblock-Analysator 106 außerdem berichten (z.B. dem IPP-Modul 104 und/oder
der Steuerwarteschlange 118), dass das Paket nicht in Übereinstimmung
mit den Protokollen formatiert ist, für deren Verarbeitung der Analysator 304 konfiguriert
ist. Dieser Bericht kann die Form eines Signals (z.B. das weiter
unten beschriebene Signal No Assist), einer Warnung, eines Anzeigers
oder anderen Indikators annehmen. Das Signal kann immer dann verursacht
oder ausgeben werden, wenn festgestellt wird, dass das Paket ein
anderes Protokoll als die vorgewählten
Protokolle widerspiegelt, die mit den oben beschriebenen Verarbeitungsverbesserungen
kompatibel sind (z.B. Wiederzusammenbau von Daten, Schubverarbeitung
von Paket-Anfangsblöcken,
Lastverteilung). Zum Beispiel kann in einer Ausführungsform der Erfindung der
Analysator 304 konfiguriert sein, Pakete unter Verwendung
von TCP in Schicht vier, IP in Schicht drei und Ethernet in Schicht
zwei zu analysieren und effizient zu verarbeiten. In dieser Ausführungsform
würde ein IPX(Internetwork
Packet Exchange, Vernetzungspaketaustausch)-Paket nicht als kompatibel
betrachtet, und IPX-Pakete würden
daher nicht für
Datenwiederzusammenbau und Schubverarbeitung gesammelt werden.
-
Am
Ende des Analysierens in einer Ausführungsform der Erfindung werden
die verschiedenen oben beschriebenen Informationsbruchstücke an geeignete
Module der NIC 100 verbreitet. Danach (und wie in einem
folgenden Abschnitt beschrieben) bestimmt der Flussdatenbankmanager 108,
ob ein aktiver Fluss mit dem aus dem Paket gewonnenen Flussschlüssel verknüpft ist,
und setzt einen Operationscode zur Verwendung bei der nachfolgenden
Verarbeitung. Außerdem überträgt das IPP-Modul 104 das
Paket an die Paketwarteschlange 116. Das IPP-Modul kann
auch einige der vom Anfangsblock-Analysator 106 extrahierten
Informationen empfangen und sie an ein anderes Modul der NIC 100 weitergeben.
-
In
der in 3 gezeigten Ausführungsform der Erfindung wird
ein ganzer Anfangsblock-Abschnitt
eines zu analysierenden Pakets kopiert und dann in einer Evolution
analysiert, wonach der Anfangsblock-Analysator seine Aufmerksamkeit
einem anderen Paket zuwendet. In einer alternativen Ausführungsform
können jedoch
mehrere Kopier- und/oder
Analysieroperationen an einem einzelnen Paket durchgeführt werden.
Insbesondere kann in einer ersten Evolution ein anfänglicher
Anfangsblock-Abschnitt in den Anfangsblock-Analysator 106 kopiert
und darin analysiert werden, wonach in einer zweiten Evolution ein
anderer Anfangsblock-Abschnitt in den Anfangsblock-Analysator 106 kopiert
und darin analysiert werden kann. Ein Anfangsblock-Abschnitt in
einer Evolution kann den Anfangsblock-Abschnitt einer anderen Evolution
teilweise oder vollständig überlappen.
Auf diese Weise können
ausgedehnte Anfangsblöcke
analysiert werden, selbst wenn der Anfangsblockspeicher 302 eine
begrenzte Größe hat. Ähnlich kann
es mehr als eine Operation brauchen, um einen vollen Satz von Befehlen
zum Analysieren eines Pakets in den Befehlsspeicher 306 zu
laden. Erläuternd
kann ein erster Abschnitt der Befehle geladen und ausgeführt werden,
wonach weitere Befehle geladen werden.
-
In 4A bis 4B,
auf die nun Bezug genommen wird, ist ein Flussdiagramm dargestellt,
um ein Verfahren zu veranschaulichen, durch das ein Anfangsblock-Analysator
einen Anfangsblock-Abschnitt eines an einer Netzschnittstellenschaltung
aus einem Netz empfangenen Pakets analysieren kann. In dieser Ausführung ist
der Anfangsblock-Analysator konfiguriert oder optimiert, Pakete
zu analysieren, die einem Satz von vorgewählten Protokollen (oder Protokollstapeln)
entsprechen. Für
Pakete, die diesen Kriterien genügen,
werden verschiedene Informationen aus dem Anfangsblock-Abschnitt
wiedergewonnen, um beim Wiederzusammenbau der Datenabschnitte von
verknüpften
Paketen (z.B. Paketen, die Daten aus einem einzelnen Datagramm enthalten)
zu helfen. Andere verbesserte Merkmale der Netzschnittstellenschaltung
können
ebenfalls ermöglicht
werden.
-
Die
vom Anfangsblock-Analysator erzeugten Informationen enthalten insbesondere
einen Flussschlüssel,
mit dem der Datenfluss oder die Datenverbindung zu bestimmen ist,
der bzw. die das empfangene Paket enthält. In einer Ausführungsform
der Erfindung können
Daten aus Paketen mit demselben Flussschlüssel bestimmt und wiederzusammengesetzt
werden, um ein Datagramm zu bilden. Außerdem können Anfangsblöcke von
Paketen mit demselben Flussschlüssel
durch ihren Protokollstapel kollektiv verarbeitet werden (z.B. statt
seriell).
-
In
einer anderen Ausführungsform
der Erfindung werden die durch den Anfangsblock-Analysator wiedergewonnenen Informationen
außerdem
benutzt, um die Verarbeitung von aus einem Netz empfangenem Netzverkehr
zu verteilen. Zum Beispiel können
mehrere Pakete mit demselben Flussschlüssel einem einzelnen Prozessor
eines Mehrprozessor-Hauptrechnersystems vorgelegt werden.
-
Bei
dem in 4A bis 4B gezeigten
Verfahren entspricht der Satz von vorgewählten Protokollen Datenübertragungsprotokollen,
die häufig über das
Internet übertragen
werden. Insbesondere umfasst der Satz von Protokollen, die bei diesem
Verfahren umfassend analysiert werden können, die Folgenden. In Schicht
zwei: Ethernet (traditionelle Version), 802.3-Ethernet, Ethernet-VLAN
(virtuelles lokales Netz) und 802.3-Ethernet-VLAN. In Schicht drei: IPv4
(ohne Optionen) und IPv6 (ohne Optionen). Schließlich werden bei dem gezeigten
Verfahren in Schicht vier nur TCP-Protokoll-Anfangsblöcke (mit oder ohne Optionen)
analysiert. Anfangsblock-Analysatoren in alternativen Ausführungsformen
der Erfindung analysieren durch andere Protokollstapel formatierte
Pakete. Insbesondere kann eine NIC in Übereinstimmung mit den in einem
gegebenen Netz gebräuchlichsten
Protokollstapeln konfiguriert sein, welche die Protokolle, die mit
dem in 4A bis 4B gezeigten
Verfahren kompatibel sind, enthalten oder nicht enthalten können.
-
Wie
weiter unten beschrieben, kann ein empfangenes Paket, das den durch
ein gegebenes Verfahren analysierten Protokollen nicht entspricht,
markiert werden, und der Analysieralgorithmus für dieses Paket beendet werden.
Da die Protokolle, unter denen ein Paket formatiert worden ist,
bei dem vorliegenden Verfahren nur bestimmt werden können, indem
bestimmte Anfangsblock-Feldwerte geprüft werden, kann die Feststellung,
dass ein Paket dem ausgewählten
Satz von Protokollen nicht entspricht, praktisch in jedem Zeitpunkt während der
Prozedur getroffen werden. Daher hat das gezeigte Analysierverfahren
als ein Ziel die Kennzeichnung von Paketen, die den Formatierungskriterien
für Wiederzusammenbau
von Daten nicht genügen.
-
Nachfolgend
werden verschiedene Protokoll-Anfangsblock-Felder beschrieben, die
in Anfangsblöcken
für die
ausgewählten
Protokolle erscheinen. Datenübertragungsprotokolle,
die mit einer Ausführungsform der
vorliegenden Erfindung kompatibel sind (z.B. Protokolle, die von
einem Anfangsblock-Analysator analysiert werden können) sind
dem Fachmann bekannt und sind in einer Anzahl von Quellen in großer Ausführlichkeit beschrieben.
Sie müssen
daher hierin nicht im kleinsten Detail aufgesucht werden. Außerdem ist
das gezeigte Verfahren zum Analysieren eines Anfangsblock-Abschnitts
eines Pakets für
die ausgewählten
Protokolle nur eine Methode, die weiter unten beschriebenen Informationen
zu sammeln. Andere Analysierprozeduren, die dies tun können, sind
gleichermaßen
geeignet.
-
In
der vorliegenden Ausführungsform
der Erfindung ist die gezeigte Prozedur als eine Kombination aus Hardware
und Software ausgeführt.
Zum Beispiel können
aktualisierbare Mikrocode-Befehle zur Durchführung der Prozedur von einem
Mikroprozessor ausgeführt
werden. Alternativ können
solche Befehle fest sein (z.B. in Nur-Lese-Speicher gespeichert)
oder können
von einem Prozessor oder Mikroprozessor ausgeführt werden.
-
In 4A bis 4B ist
der Zustand 400 ein Startzustand, während dessen ein Paket von
der NIC 100 (in 1A gezeigt)
empfangen wird und eine Anfangsverarbeitung durchgeführt wird.
Die NIC 100 ist zu Zwecken dieser Prozedur mit dem Internet
verbunden. Die Anfangsverarbeitung kann eine Basis-Fehlerprüfung und
das Entfernen der Präambel
der Schicht eins umfassen. Nach der Anfangsverarbeitung wird das
Paket vom IPP-Modul 104 (auch in 1A gezeigt)
festgehalten. In einer Ausführungsform
der Erfindung umfasst der Zustand 400 eine Logikschleife,
in der der Anfangsblock-Analysator in einem Leerlauf- oder Wartezustand
bleibt, bis ein Paket empfangen wird.
-
Im
Zustand 402 wird ein Anfangsblock-Abschnitt des Pakets
in einen Speicher kopiert (z.B. den Anfangsblockspeicher 302 von 3).
In einer vorliegenden Ausführungsform
der Erfindung werden eine vorbestimmte Anzahl von Bytes am Beginn
(z.B. 114 Bytes) des Pakets kopiert. In alternativen Ausführungsformen der
Erfindung werden Paketabschnitte mit anderen Größen kopiert, deren Größen von
dem Ziel geleitet werden, genug von dem Paket zu kopieren, um die
notwendigen Anfangsblock-Informationen zu erfassen und/oder zu bestimmen.
Erläuternd
wird das ganze Paket vom IPP-Modul 104 festgehalten, während die
folgenden Analysieroperationen durchgeführt werden, obwohl das Paket
alternativ vor Beendigung der Analyse in der Paketwarteschlange 116 gespeichert
werden kann.
-
Außerdem kann
im Zustand 402 ein Zeiger zur Verwendung beim Analysieren
des Pakets initialisiert werden. Da die Präambel der Schicht eins entfernt
wurde, sollte der in den Speicher kopierte Anfangsblock-Abschnitt
mit dem Protokoll-Anfangsblock der Schicht zwei beginnen. Erläuternd wird
daher der Zeiger anfänglich so
gesetzt, dass er auf das zwölfte
Byte des Protokoll-Anfangsblocks der Schicht zwei zeigt, und der Zwei-Byte-Wert an der
Zeigerposition wird gelesen. Wie der Fachmann erkennt, können diese
zwei Bytes Teil einer Anzahl von verschiedenen Feldern sein, je
nachdem, welches Protokoll die Schicht zwei des Protokollstapels
des Pakets bildet. Zum Beispiel können diese zwei Bytes das Typ-Feld
eines traditionellen Ethernet-Anfangsblocks, das Länge-Feld
eines 802.3-Ethernet-Anfangsblocks oder das TPID(Tag Protocol IDentifier,
Markierungsprotokollkennung)-Feld eines VLAN-markierten Anfangsblocks
aufweisen.
-
Im
Zustand 404 wird eine erste Prüfung des Anfangsblocks der
Schicht zwei vorgenommen, um zu bestimmen, ob er einen VLAN-markierten
Protokoll-Anfangsblock der Schicht zwei aufweist. Erläuternd hängt diese
Bestimmung davon ab, ob die zwei Bytes an der Zeigerposition den
Hexadezimalwert 8100 speichern. Wenn ja, liegt der Zeiger voraussichtlich
im TPID-Feld eines VLAN-markierten Anfangsblocks. Wenn es keinen VLAN-Anfangsblock
gibt, geht die Prozedur zum Zustand 408 weiter.
-
Wenn
jedoch der Anfangsblock der Schicht zwei ein VLAN-markierter Anfangsblock
ist, wird im Zustand 406 das CFI(Canonical Format Indicator,
kanonischer Formatindikator)-Bit geprüft. Wenn das CFI-Bit gesetzt
(z.B. gleich eins) ist, springt die gezeigte Prozedur zum Zustand 430,
nach dem sie endet. In dieser Ausführungsform der Erfindung zeigt
das CFI-Bit, wenn gesetzt, an, dass das Format des Pakets nicht
mit den vorgewählten
Protokollen kompatibel ist (d.h. ihnen nicht entspricht) (z.B. ist
das Protokoll der Schicht zwei nicht Ethernet oder 802.3-Ethernet).
Wenn das CFI-Bit frei (z.B. gleich null) ist, wird der Zeiger hochgezählt (z.B.
um vier Bytes), um ihn am nächsten
Feld zu positionieren, das geprüft
werden muss.
-
Im
Zustand 408 wird der Anfangsblock der Schicht zwei näher geprüft. Es ist
zwar jetzt bekannt, ob dies ein VLAN-markierter Anfangsblock ist
oder nicht, je nachdem, ob der Zustand 408 über den
Zustand 406 oder direkt vom Zustand 404 erreicht
wurde, kann der Anfangsblock aber entweder das traditionelle Ethernet-Format
oder das 802.3-Ethernet-Format
widerspiegeln. Zu Beginn des Zustands 408 ist der Zeiger
entweder am zwölften
oder sechzehnten Byte des Anfangsblocks, die beide einem Länge-Feld
oder einem Typ-Feld entsprechen können. Insbesondere, wenn der
Zwei-Byte-Wert an der durch den Zeiger gekennzeichneten Stelle kleiner
als 0600 (hexadezimal) ist, entspricht das Paket 802.3-Ethernet,
und der Zeiger wird als ein Länge-Feld
kennzeichnend verstanden. Andernfalls ist das Paket ein traditionelles
(z.B. Version zwei) Ethernet-Paket, und der Zeiger kennzeichnet
ein Typ-Feld.
-
Wenn
das Protokoll der Schicht zwei 802.3-Ethernet ist, geht die Prozedur
im Zustand 410 weiter. Wenn das Protokoll der Schicht zwei
traditionelles Ethernet ist, wird das Typ-Feld auf die Hexadezimalwerte 0800
und 08DD geprüft.
Wenn das geprüfte
Feld einen dieser Werte hat, ist auch ermittelt worden, dass das Protokoll
der Schicht drei des Pakets das Internet-Protokoll ist. In diesem
Fall geht die gezeigte Prozedur im Zustand 412 weiter.
Zuletzt, wenn das Feld ein Typ-Feld mit einem anderen Wert als 0800
oder 08DD (hexadezimal) ist, passt das Protokoll der Schicht drei
des Pakets nicht zu den vorgewählten
Protokollen, in Übereinstimmung
mit denen der Anfangsblock-Analysator konfiguriert wurde. Daher
geht die Prozedur im Zustand 430 weiter und endet dann.
-
In
einer Ausführungsform
der Erfindung wird das Paket im Zustand 408 geprüft, um zu
bestimmen, ob es ein Jumbo-Ethernet-Datenblock ist. Diese Bestimmung
würde wahrscheinlich
erfolgen, bevor entschieden wird, ob der Anfangsblock der Schicht
zwei Ethernet oder 802.3-Ethernet entspricht. Erläuternd kann
die Jumbo-Datenblock-Bestimmung
auf Basis der Größe des Pakets
erfolgen, die vom IPP-Modul 104 oder einem MAC-Modul berichtet
werden kann. Wenn das Paket ein Jumbo-Datenblock ist, kann die Prozedur
im Zustand 410 weitergehen; andernfalls kann sie im Zustand 412 fortfahren.
-
Im
Zustand 410 verifiziert die Prozedur, dass das Protokoll
der Schicht zwei 802.3-Ethernet
mit LLC-SNAP-Kapselung ist. Insbesondere wird der Zeiger vorgerückt (z.B.
um zwei Bytes), und der Acht-Byte-Wert im Anschluss an das Länge-Feld
im Anfangsblock der Schicht zwei wird wiedergewonnen und geprüft. Wenn
der Anfangsblock ein 802.3-Ethernet-Anfangsblock ist, ist das Feld
das LLC SNAP-Feld und sollte einen Wert AAAA03000000 (hexadezimal)
haben. Die Ursprungsspezifikation für einen LLC-SNAP-Anfangsblock findet man in der
Spezifikation für
IEEE 802.2. Wenn der Wert im LLC SNAP-Feld des Pakets zu dem erwarteten
Wert passt, wird der Zeiger weitere sechs Byte hochgezählt, wird
das Zwei-Byte-802.3-Ethernet-Typ-Feld gelesen und geht die Prozedur
im Zustand 412 weiter. Wenn die Werte nicht passen, entspricht das
Paket nicht den spezifizierten Protokollen, und die Prozedur betritt
den Zustand 430 und endet dann.
-
Im
Zustand 412 wird der Zeiger vorgerückt (z.B. weitere zwei Bytes),
um den Beginn des Anfangsblocks der Protokollschicht drei zu lokalisieren.
Diese Zeigerposition kann für
späteren
Gebrauch bei schneller Bestimmung des Beginns dieses Anfangsblocks
gespeichert werden. Das Paket entspricht nun bekanntermaßen einem
akzeptierten Protokoll der Schicht zwei (z.B. traditionellem Ethernet,
Ethernet mit VLAN-Markierung oder 802.3-Ethernet mit LLC-SNAP) und
wird nun geprüft,
um sicherzustellen, dass die Protokollschicht drei des Pakets IP
ist. Wie oben erörtert,
werden im Ausführungsbeispiel
nur Pakete, die dem IP-Protokoll entsprechen, vom Anfangsblock-Analysator
umfassend analysiert.
-
Erläuternd,
wenn der Wert des Typ-Feldes im Anfangsblock der Schicht zwei (im
Zustand 402 oder Zustand 410 wiedergewonnen) 0800
(hexadezimal) ist, ist das Protokoll der Schicht drei erwartungsgemäß IP, Version
vier. Wenn der Wert 86DD (hexadezimal) ist, ist das Protokoll der
Schicht drei erwartungsgemäß IP, Version
sechs. Daher wird das Typ-Feld im Zustand 412 geprüft, und
die Prozedur geht im Zustand 414 oder 418 weiter,
je nachdem, ob der Hexadezimalwert 0800 bzw. 86DD ist.
-
Im
Zustand 414 wird die Konformität des Anfangsblocks der Schicht
drei mit Version vier von IP verifiziert. In einer Ausführungsform
der Erfindung wird das Version-Feld des Anfangsblocks der Schicht
drei geprüft,
um sicherzustellen, dass es den Hexadezimalwert 4 enthält, entsprechend
Version vier von IP. Wenn im Zustand 414 der Anfangsblock
der Schicht drei als IP Version vier bestätigt wird, geht die Prozedur
im Zustand 416 weiter; andernfalls geht sie zum Zustand 430 weiter
und endet im Zustand 432.
-
Im
Zustand 416 werden verschiedenen Informationsbruchstücke aus
dem IP-Anfangs block gespeichert. Diese Informationen können die
IHL(IP-Anfangsblock-Länge)-,
Gesamtlänge-,
Protokoll- und/oder Fragmentversatz-Felder umfassen. Die IP-Quellen-Adresse und die IP-Zieladressen
können
ebenfalls gespeichert werden. Die Quellen- und Zieladresswerte sind in Version
vier von IP jeweils vier Bytes lang. Diese Adressen werden benutzt,
wie oben beschrieben, um einen Flussschlüssel zu erzeugen, der den Datenfluss
kennzeichnet, in dem dieses Paket gesendet wurde. Das Gesamtlänge-Feld
speichert die Größe des IP-Segments
dieses Pakets, das erläuternd
den IP-Anfangsblock, den TCP-Anfangsblock und den Datenabschnitt
des Pakets umfasst. Die TCP-Segmentgröße des Pakets
(z.B. die Größe des TCP-Anfangsblocks
plus die Größe des Datenabschnitt
des Pakets) kann berechnet werden, indem zwanzig Bytes (die Größe des Anfangsblocks
in IP Version vier) vom Gesamtlänge-Wert
subtrahiert wird. Nach dem Zustand 416 rückt die
gezeigte Prozedur zum Zustand 422 weiter.
-
Im
Zustand 418 wird die Konformität des Anfangsblocks der Schicht
drei mit Version sechs von IP verifiziert, indem das Version-Feld
auf den Hexadezimalwert 6 geprüft wird. Wenn das Version-Feld
diesen Wert nicht enthält,
geht die gezeigte Prozedur zum Zustand 430 weiter.
-
Im
Zustand 420 werden die Werte der Felder Nutzlast-Länge (z.B.
die Größe des TCP-Segments) und Nächster Anfangsblock
gespeichert, zuzüglich
der IP-Quellen- und Zieladressen. Die Quellen- und Zieladressen
sind in Version sechs von IP jeweils sechzehn Bytes lang.
-
Im
Zustand 422 der gezeigten Prozedur wird bestimmt, ob der
IP-Anfangsblock (entweder Version vier oder Version sechs) anzeigt,
dass der Anfangsblock der Schicht vier TCP ist. Erläuternd wird
das Protokoll-Feld eines IP-Anfangsblocks der Version vier geprüft, während das
Feld Nächster
Anfangsblock eines Anfangsblocks der Version sechs geprüft wird.
In beiden Fällen
sollte der Wert 6 (hexadezimal) sein. Der Zeiger wird dann nötigenfalls
hochgezählt
(z.B. zwanzig Bytes für
IP Version vier, vierzig Bytes für
IP Version sechs), um den Beginn des TCP-Anfangsblocks zu erreichen.
Wird im Zustand 422 festgestellt, dass der Anfangsblock der
Schicht vier nicht TCP ist, rückt
die Prozedur zum Zustand 430 weiter und endet im Endzustand 432.
-
In
einer Ausführungsform
der Erfindung können
im Zustand 422 weitere Felder eines IP-Anfangsblocks der
Version vier geprüft
werden, um sicherzustellen, dass das Paket den Kriterien für verbesserte
Verarbeitung durch die NIC 100 genügt. Zum Beispiel zeigt ein
anderer IHL-Feld-Wert als 5 (hexadezimal) an, dass IP-Optionen für dieses
Paket gesetzt sind, in welchem Fall die Analysieroperation abgebrochen
wird. Ein anderer Wert des Fragmentierung-Feldes als null zeigt
an, dass das IP-Segment des Pakets ein Fragment ist, in welchem
Fall das Analysieren ebenfalls abgebrochen wird. In beiden Fällen springt
die Prozedur zum Zustand 430 und endet dann im Endzustand 432.
-
Im
Zustand 424 wird der TCP-Anfangsblock des Pakets analysiert
und werden verschiedene Daten daraus gesammelt. Insbesondere werden
die TCP-Quellen-Port- und -Ziel-Port-Werte gespeichert. Die TCP-Sequenznummer,
die benutzt wird, um den korrekten Wiederzusammenbau von Daten aus
mehreren Paketen sicherzustellen, wird ebenfalls gespeichert. Weiterhin
werden die Werte mehrerer Komponenten des Anzeiger-Feldes – erläuternd die
Bits URG (Dringend), PSH (Drücken),
RST (Zurücksetzen),
SYN (Synchronisieren) und FIN (Beenden) – gespeichert. In einer Ausführungsform
der Erfindung signalisieren diese Anzeiger, dass beim Abwickeln
des Pakets verschiedene Aktionen durchzuführen oder Status zu berücksichtigen
sind.
-
Im
Zustand 424 können
weitere Signale oder Status erzeugt werden, um Informationen widerzuspiegeln,
die aus dem TCP-Anfangsblock wiedergewonnen werden. Zum Beispiel
kann der Punkt gespeichert werden, von dem aus eine Prüfsummenoperation
beginnen soll (erläuternd
der Beginn des TCP-Anfangsblocks); der Endpunkt einer Prüfsurnmenoperation
kann ebenfalls gespeichert werden (erläuternd das Ende des Datenabschnitts
des Pakets). Ein Versatz des Datenabschnitts des Pakets kann bestimmt
werden, indem der Wert des Feldes Anfangsblock-Länge des TCP-Anfangsblocks mit
vier multipliziert wird. Die Größe des Datenabschnitts
kann dann berechnet werden, indem der Versatz des Datenabschnitts
von der Größe des gesamten TCP-Segments subtrahiert
wird.
-
Im
Zustand 426 wird ein Flussschlüssel zusammengesetzt, indem
die IP-Quellen- und Zieladressen und die TCP-Quellen- und Ziel-Ports
verkettet werden. Wie schon beschrieben, kann der Flussschlüssel benutzt
werden, um einen Datenfluss oder eine Datenverbindung zu kennzeichnen,
und kann von anderen Modulen der NIC 100 benutzt werden,
um Netzverkehr effizienter zu verarbeiten. Die Größen der
Quellen- und Zieladressen sind in den IP-Versionen vier und sechs
zwar verschieden (z.B. jeweils vier Byte gegenüber jeweils sechzehn Byte),
in der vorliegendend beschriebenen Ausführungsform der Erfindung haben
alle Flussschlüssel
aber einheitliche Größe. Insbesondere
sind sie in dieser Ausführungsform
sechsunddreißig
Bytes lang, einschließlich
des Zwei-Byte-TCP-Quellen-Port und des Zwei-Byte-TCP-Ziel-Port.
Flussschlüssel,
die aus Paket-Anfangsblöcken
in IP, Version vier, erzeugt werden, werden nötigenfalls aufgefüllt (z.B.
mit vierundzwanzig Freibytes), um den den Flussschlüsseln zugewiesenen
Platz zu füllen.
-
Im
Zustand 428 wird ein Steuer- oder Statusindikator zusammengesetzt,
um einem oder mehreren Modulen der NIC 100 verschiedene
Informationen zu liefern. In einer Ausführungsform der Erfindung enthält ein Steuerindikator
die TCP-Sequenznummer des Pakets, einen Anzeiger oder eine Kennung
(z.B. ein oder mehr Bits), der bzw. die anzeigt, ob das Paket Daten
enthält
(z.B. ob die TCP-Nutzlastgröße größer als
null ist), einen Anzeiger, der anzeigt, ob der Datenabschnitt des
Pakets eine vorbestimmte Größe übersteigt,
und einen Anzeiger, der anzeigt, ob bestimmte Einträge im TCP-Anzeiger-Feld zu
vorbestimmten Werten äquivalent
sind. Der letztere Anzeiger kann zum Beispiel benutzt werden, um
einem anderen Modul der NIC 100 mitzuteilen, dass Komponenten
des Anzeiger-Feldes eine bestimmte Konfiguration haben oder nicht.
Nach dem Zustand 428 endet die gezeigte Prozedur mit dem
Zustand 432.
-
Der
Zustand 430 kann an mehreren verschiedenen Stellen der
gezeigten Prozedur betreten werden. Dieser Zustand wird zum Beispiel
betreten, wenn festgestellt wird, dass ein Anfangsblock-Abschnitt,
der gerade von einem Anfangsblock-Analysator analysiert wird, nicht
den oben gekennzeichneten vorgewählten
Protokollstapeln entspricht. Als Folge wird viel von den oben beschriebenen
Informationen nicht wiedergewonnen. Eine praktische Konsequenz der
Unfähigkeit,
diese Informationen wiederzugewinnen, ist, dass sie nicht an andere
Module der NIC 100 geliefert werden können und die hierin beschriebene
verbesserte Verarbeitung für dieses
Paket möglicherweise
nicht durchgeführt
werden kann. Insbesondere, und wie vorher beschrieben, können in
einer vorliegenden Ausführungsform
der Erfindung ein oder mehrere verbesserte Operationen an analysierten
Paketen durchgeführt
werden, um die Effizienz zu erhöhen,
mit der sie verarbeitet werden. Erläuternd umfassen Operationen,
die angewendet werden können,
den Wiederzusammenbau von Daten aus verknüpften Paketen (z.B. Paketen,
die Daten aus einem einzelnen Datagramm enthalten), Schubverarbeitung von
Paket-Anfangsblöcken durch
einen Protokollstapel, Lastverteilung oder Lastaufteilung von Protokollstapelverarbeitung,
effiziente Übertragung
von Paketdaten an ein Zielobjekt usw.
-
Bei
der gezeigten Prozedur wird im Zustand 430 ein Anzeiger
oder Signal (erläuternd
No Assist (keine Unterstützung)
gesetzt oder gelöscht,
um anzuzeigen, dass das gegenwärtig
vom IPP-Modul 104 festgehaltene Paket (z.B. das gerade
vom Anfangsblock-Analysator verarbeitet wurde) keinem der vorgewählten Protokollstapel
entspricht. Auf diesen Anzeiger oder dieses Signal kann ein anderes
Modul der NIC 100 bauen, wenn es entscheidet, ob eine der
verbesserten Operationen durchzuführen ist.
-
Im
Zustand 430 kann ein weiterer Anzeiger oder ein weiteres
Signal gesetzt oder gelöscht
werden, um einen Prüfsummenparameter
zu initialisieren, der anzeigt, dass eine Prüfsummenoperation, wenn durchgeführt, am
Beginn des Pakets anfangen sollte (z.B. ohne Versatz in das Paket).
Erläuternd
können
inkompatible Pakete nicht analysiert werden, um eine geeignetere
Stelle zu bestimmen, von der aus die Prüfsummenoperation beginnen soll.
Nach dem Zustand 430 endet die Prozedur mit dem Zustand 432.
-
Nach
dem Analysieren eines Pakets kann der Anfangsblock-Analysator aus
dem Paket erzeugte Informationen an ein oder mehrere Module der
NIC 100 verteilen. Zum Beispiel wird in einer Ausführungsform der
Erfindung der Flussschlüssel
an den Flussdatenbankmanager 108, den Lastverteiler 112 und
an die Steuerwarteschlange 118 oder die Paketwarteschlange 116 oder
beide geliefert. Erläuternd
wird der Steuerindikator an den Flussdatenbankmanager 108 geliefert.
Diese und andere Steuerinformationen, wie z.B. TCP-Nutzlastgröße, TCP-Nutzlastversatz
und das Signal No Assist, können
an das IPP-Modul 104 zurückgesandt und an die Steuerwarteschlange 118 geliefert
werden. Noch weitere Steuer- und/oder Diagnoseinformationen, wie z.B.
Versätze
zu den Anfangsblöcken
der Schicht drei und/oder Schicht vier, können an das IPP-Modul 104, die
Paketwarteschlange 116 und/oder die Steuerwarteschlange 118 geliefert
werden. Prüfsummeninformationen
(z.B. ein Anfangspunkt und entweder ein Endpunkt oder andere Mittel
zum Kennzeichnen eines Abschnitts des Pakets, aus dem eine Prüfsumme zu
berechnen ist) können
an den Prüfsummengenerator 114 geliefert werden.
-
Nachdem
ein empfangenes Paket in der NIC 100 analysiert worden
ist (z.B. durch den Anfangsblock-Analysator 106), werden
die Pakete im Ausführungsbeispiel
der Erfin dung noch auf dem Hauptrechnersystem verarbeitet (z.B.
durch ihre jeweiligen Protokollstapel). In einer alternativen Ausführungsform
der Erfindung führt
die NIC 100 nach dem Analysieren eines Pakets jedoch außerdem einen
oder mehrere nachfolgende Verarbeitungsschritte durch. Zum Beispiel
kann die NIC 100 einen oder mehrere Protokollprozessoren
zur Verarbeitung von einem oder mehreren der Protokoll-Anfangsblöcke des
Pakets enthalten.
-
Dynamische
Anfangsblock-Analysierbefehle in einer Ausführungsform der Erfindung
-
In
einer Ausführungsform
der vorliegenden Erfindung analysiert der Anfangsblock-Analysator 106 ein aus
einem Netz empfangenes Paket in Übereinstimmung
mit einer dynamischen Sequenz von Befehlen. Die Befehle können im
Befehlsspeicher (z.B. RAM, SRAM, DRAM, Flash) des Anfangsblock-Analysators
gespeichert sein, der neuprogrammierbar ist oder der auf andere
Weise mit neuen oder zusätzlichen
Befehlen aktualisiert werden kann. In einer Ausführungsform der Erfindung kann
Software, die auf einem Hauptrechner arbeitet (z.B. ein Gerätetreiber),
einen Satz von Analysierbefehlen zum Speichern im Speicher des Anfangsblock-Analysators
herunterladen.
-
Die
Zahl und das Format der im Befehlsspeicher eines Anfangsblock-Analysators
gespeicherten Befehle können
auf ein oder mehrere spezifische Protokolle oder Protokollstapel
zugeschnitten sein. Ein für
eine Sammlung von Protokollen konfigurierter Befehlssatz oder ein
aus diesem Befehlssatz aufgebautes Programm kann daher durch einen
anderen Befehlssatz oder ein anderes Programm aktualisiert oder
ersetzt werden. Für an
der Netzschnittstelle empfangene Pakete, die in Übereinstimmung mit den ausgewählten Protokollen
konfiguriert sind (z.B. "kompatible" Pakete"), wie durch Analysieren
der Pakete bestimmt, werden daher verschiedene Verbesserungen beim
Abwickeln von Netzverkehr möglich,
wie anderswo beschrieben. Insbesondere können Pakete aus einem Datagramm,
die in Übereinstimmung
mit einem ausgewählten
Protokoll konfiguriert sind, für
effiziente Übertragung
in einem Hauptrechner wiederzusammengesetzt werden. Außerdem können Anfangsblock-Abschnitte
solcher Pakete kollektiv statt seriell verarbeitet werden. Und die
Verarbeitung von Paketen aus verschiedenen Datagrammen durch einen
Mehrprozessor-Hauptrechner kann auf die Prozessoren verteilt oder
aufgeteilt werden. Daher ist es eine Aufgabe einer dynamischen Anfangsblock-Analysieroperation,
ein Protokoll zu bestimmen, in Übereinstimmung
mit dem ein empfangenes Paket formatiert worden ist, oder festzustellen,
ob ein Paket-Anfangsblock
einem bestimmten Protokoll entspricht.
-
8,
die alsbald im Detail erörtert
wird, zeigt eine Beispielsfolge von Befehlen zum Analysieren der Anfangsblöcke der
Schicht zwei, drei und vier eines Pakets, um zu bestimmen, ob sie
Ethernet, IP bzw. TCP sind. Die gezeigten Befehle umfassen ein mögliches
Programm oder einen möglichen
Mikrocode zur Durchführung
einer Analysieroperation. Wie der Fachmann erkennt, kann eine Anzahl
von verschiedenen Programmen zusammengesetzt werden, nachdem ein
bestimmter Satz von Analysierbefehlen in einen Analysierspeicher
geladen worden ist. 8 zeigt somit nur eines von
einer Anzahl von Programmen, die aus den gespeicherten Befehlen
erzeugt werden können.
Die in 8 gezeigten Befehle können durch
eine Mikro-Ablaufsteuerung, einen Prozessor, einen Mikroprozessor
oder ein anderes, ähnliches
Modul, dass sich in der Netzschnittstellenschaltung befindet, durchgeführt oder
ausgeführt
werden.
-
Insbesondere
können
andere Befehlssätze
und andere Programme für
verschiedene Datenübertragungsprotokolle
gewonnen werden und können
auf andere Schichten eines Protokollstapels erweitert werden. Zum
Beispiel könnte
ein Satz von Befehlen zum Analysieren von NFS(Netzdateisystem)-Paketen
erzeugt werden. Erläuternd
würden
diese Befehle konfiguriert, Anfangsblöcke der Schicht fünf und sechs
zu analysieren, um zu bestimmen, ob sie Remote Procedure Call (Fernprozeduraufruf,
RPC) bzw. External Data Representation (externe Datendarstellung,
XDR) sind. Andere Befehle könnten
konfiguriert sein, einen Abschnitt der Daten des Pakets (der als
Schicht sieben betrachtet werden kann) zu analysieren. Ein NFS-Anfangsblock
kann als Teil eines Anfangsblocks der Protokollschicht sechs eines
Pakets oder Teil der Daten des Pakets betrachtet werden.
-
Ein
Typ von Befehlen, die von einer Mikro-Ablaufsteuerung ausgeführt werden,
kann darauf ausgelegt sein, ein bestimmtes Feld eines Pakets (z.B.
einen spezifischen Versatz innerhalb des Pakets) zu lokalisieren und
den an diesem Versatz gespeicherten Wert mit jenem Feld in einem
bestimmten Datenübertragungsprotokoll
zu vergleichen. Zum Beispiel kann ein Befehl die Mikro-Ablaufsteuerung
auffordern, einen Wert in einem Paket-Anfangsblock an einem Versatz
zu prüfen,
der einem Typ-Feld eines Ethernet-Anfangsblocks entsprechen würde. Durch
Vergleichen des tatsächlich
im Paket gespeicherten Wertes mit dem für das Protokoll erwarteten
Wert kann die Mikro- Ablaufsteuerung
bestimmen, ob das Paket dem Ethernet-Protokoll zu entsprechen scheint.
Erläuternd
hängt der
nächste
im Analysierprogramm angewandte Wert davon ab, ob der vorhergehende
Vergleich erfolgreich war. Daher hängen die von der Mikro-Ablaufsteuerung angewandten
bestimmten Befehle und die Sequenz, in der sie angewandt werden,
davon ab, welche Protokolle durch die Anfangsblöcke des Pakets dargestellt
werden.
-
Die
Mikro-Ablaufsteuerung kann ein oder mehrere Felder innerhalb jedes
in einem Paket enthaltenen Anfangsblocks prüfen. Je mehr Felder geprüft werden
und als zu dem Format eines bekannten Protokolls passend befunden
werden, desto größer die
Gewissheit, dass das Paket diesem Protokoll entspricht. Wie der Fachmann
erkennt, kann das eine Datenübertragungsprotokoll
ganz anders als das andere Protokoll sein, was eine Prüfung von
unterschiedlichen Teilen von Paket-Anfangsblöcken für unterschiedliche Protokolle
erfordert. Erläuternd
kann das Analysieren eines Pakets im Falle eines Fehlers oder weil
bestimmt wurde, dass das gerade analysierte Paket dem oder den Protokoll(en),
auf die die Befehle ausgelegt sind, entspricht oder nicht entspricht,
beendet werden.
-
Jeder
Befehl in 8 kann durch eine Nummer und/oder
einen Namen gekennzeichnet sein. Ein bestimmter Befehl kann mannigfache
andere Aufgaben als Vergleichen eines Anfangsblock-Feldes mit einem
erwarteten Wert durchführen.
Ein Befehl kann zum Beispiel einen anderen Befehl aufrufen, um einen
anderen Abschnitt eines Paket-Anfangsblocks
zu prüfen,
ein Register oder eine andere Datenstruktur zu initialisieren, zu
laden oder zu konfigurieren, die Ankunft und das Analysieren eines
anderen Pakets vorzubereiten usw. Insbesondere kann ein Register
oder eine andere Speicherstruktur in Erwartung einer Operation konfiguriert
sein, die in der Netzschnittstelle durchgeführt wird, nachdem das Paket
analysiert worden ist. Zum Beispiel kann ein Programmbefehl in 8 eine
Ausgabeoperation kennzeichnen, die durchgeführt werden kann oder nicht,
je nach dem Erfolg oder Fehlschlag des Vergleichs eines aus einem
Paket mit einem erwarteten Wert extrahierten Wertes. Eine Ausgabeoperation
kann einen Wert in einem Register speichern, ein Register für eine Operation
nach Analyse konfigurieren (z.B. ein Argument oder einen Operator
laden), ein Register löschen,
um auf ein neues Paket zu warten, usw.
-
Ein
Zeiger kann verwendet werden, um einen Versatz in ein gerade analysiertes
Paket zu kennzeichnen. In einer Ausführungsform liegt so ein Zeiger
anfänglich
am Beginn des Anfangsblocks der Protokollschicht zwei. In einer
anderen Ausführungsform
befindet sich der Zeiger jedoch an einer spezifischen Stelle innerhalb
eines bestimmten Anfangsblocks (z.B. unmittelbar im Anschluss an
die Ziel- und/oder Quellenadressen der Schicht zwei), wenn das Analysieren
beginnt. Erläuternd
wird der Zeiger durch das Paket hindurch hochgezählt, wenn die Analysierprozedur
stattfindet. In einer alternativen Ausführungsform können jedoch Versätze von
interessierenden Bereichen im Paket aus einer oder mehreren bekannten
oder berechneten Stellen berechnet werden.
-
In
dem in 8 gezeigten Analysierprogramm
wird ein Anfangsblock in Schritten von zwei Bytes (z.B. Sechzehn-Bit-Worten)
manövriert
(z.B. der Zeiger vorgerückt).
Außerdem,
wenn ein bestimmtes Feld eines Anfangsblocks mit einem bekannten
oder erwarteten Wert verglichen wird, werden bis zu zwei Bytes auf
einmal aus dem Feld extrahiert. Und wenn ein Wert oder Anfangsblock-Feld
zum Speichern in einem Register oder einer anderen Datenstruktur
kopiert wird, kann die Datenmenge, die in einer Operation kopiert
werden kann, in Vielfachen von Zwei-Byte-Einheiten oder in ganz
anderen Einheiten (z.B. individuellen Bytes) ausgedrückt werden.
Diese Maßeinheit
(z.B. zwei Bytes) kann in einer alternativen Ausführungsform
der Erfindung vergrößert oder
verkleinert werden. Die Maßeinheit
zu ändern,
kann die Genauigkeit ändern,
mit der ein Anfangsblock analysiert oder ein Anfangsblock-Wert extrahiert
werden kann.
-
In
der in 8 dargestellten Ausführungsform
der Erfindung umfasst ein in den Befehlsspeicher des Anfangsblock-Analysators
geladener Satz von Befehlen eine Anzahl von möglichen Operationen zur Durchführung während des
Prüfens
eines Pakets auf Kompatibilität
mit ausgewählten
Protokollen. Aus dem Befehlssatz wird ein Programm 800 erzeugt.
Das Programm 800 ist somit nur ein mögliches Programm oder eine
mögliche
Mikro-Ablaufsteuerung oder Sequenz von Befehlen, das bzw. die aus
dem verfügbaren
Befehlssatz gebildet werden kann.
-
In
dieser Ausführungsform
erlaubt der geladene Befehlssatz die folgenden sechzehn Operationen,
die an einem Paket durchgeführt
werden können,
das gerade analysiert wird. Spezifische Realisierungen dieser Operationen
im Programm 800 werden weiter unten noch detaillierter
erörtert.
Diese Befehle sind selbstverständlich
nur beispielhaft und beschränken
die Zusammensetzung von Befehlssätzen
in anderen Ausführungsformen
der Erfindung nicht. Außerdem
kann jeder Teilsatz dieser Operationen in einem bestimmten Analysierprogramm
oder Mikrocode verwendet werden. Weiterhin können mehrere Befehle dieselbe
Operation verwenden und unterschiedliche Wirkungen haben.
-
Eine
Operation CLR_REG erlaubt die selektive Initialisierung von Registern
oder anderen im Programm 800 benutzten Datenstrukturen
und möglicherweise
Datenstrukturen, die in Funktionen benutzt werden, die nach Analyse
eines Pakets durchgeführt
werden. Initialisierung kann umfassen, den Wert null zu speichern.
Eine Anzahl von Beispielsregistern, die durch eine Operation CLR_REG
initialisiert werden können, sind
in den übrigen
Operationen gekennzeichnet.
-
Eine
Operation LD_FID kopiert eine variable Datenmenge von einem bestimmten
Versatz innerhalb des Pakets in ein Register, das konfiguriert ist,
den Flussschlüssel
oder eine andere Flusskennung eines Pakets zu speichern. Dieses
Register kann FLOWID-Register
genannt werden. Die Wirkung einer Operation LD_FID ist kumulativ.
Mit anderen Worten, jedes Mal, wenn sie für ein Paket aufgerufen wird,
werden die erzeugten Daten an die vorher gespeicherten Flussschlüsseldaten
angehängt.
-
Eine
Operation LD_SEQ kopiert eine variable Datenmenge von einem bestimmten
Versatz innerhalb des Pakets in ein Register, das konfiguriert ist,
die Sequenznummer (z.B. eine TCP-Sequenznummer) eines Pakets zu
speichern. Diesem Register kann die Bezeichnung SEQNO zugewiesen
werden. Diese Operation ist ebenfalls kumulativ – die zweiten und nachfolgenden
Aufrufe dieser Operation für
das Paket bewirken, dass die gekennzeichneten Daten an vorher gespeicherte
Daten angehängt
werden.
-
Eine
Operation LD_CTL lädt
einen Wert aus einem spezifizierten Versatz in dem Paket in ein
Register CONTROL (Steuer-Register). Das Register CONTROL kann einen
Steuerindikator enthalten, um zu bestimmen, ob ein Paket für Datenwiederzusammenbau,
Paketschub, Lastverteilung oder andere verbesserte Funktionen der
NIC 100 geeignet ist. Insbesondere kann ein Steueranzeiger
anzeigen, ob ein Anzeiger No Assist für das Paket aufzustellen ist,
ob das Paket irgendwelche Daten enthält, ob die Menge der Paketdaten
größer als
ein vorbestimmter Schwellenwert ist, usw. Daher kann der in einer
Operation LD_CTL in ein Register CONTROL geladener Wert die Nachanalyse-Verarbeitung des
Pakets beeinflussen.
-
Eine
Operation LD_SAP lädt
einen Wert aus einem variablen Versatz innerhalb des Pakets in das
Register CONTROL. Der geladene Wert kann den Ethertyp des Pakets
umfassen. In einer Option, die mit einer Operation LD_SAP verbunden
sein kann, kann der Versatz des Anfangsblocks der Schicht drei des
Pakets ebenfalls im Register CONTROL oder anderswo gespeichert werden.
Wie der Fachmann erkennt, kann ein Anfangsblock der Schicht drei
eines Pakets seinem Ethertyp-Feld der Schicht zwei unmittelbar folgen,
wenn das Paket den Ethernet- und IP-Protokollen entspricht.
-
Eine
Operation LD_R1 kann benutzt werden, um einen Wert aus einem variablen
Versatz innerhalb des Pakets in ein temporäres Register zu laden (z.B.
R1 genannt). Ein temporäres
Register kann für
mannigfache Aufgaben benutzt werden, wie z.B. Ansammeln von Werten,
um die Länge
eines Anfangsblocks oder anderen Abschnitts des Pakets zu bestimmen.
Eine Operation LD_R1 kann außerdem
bewirken, dass ein Wert aus einem anderen variablen Versatz in einem
zweiten temporären
Register gespeichert wird (z.B. R2 genannt). Die während des
Analysierens eines Pakets in den Registern R1 und/oder R2 gespeicherten
Werte können
kumulativ sein oder nicht.
-
Eine
Operation LD_L3 kann einen Wert aus dem Paket in ein Register laden,
das konfiguriert ist, den Ort des Anfangsblocks der Schicht drei
des Pakets zu speichern. Dieses Register kann L3OFFSET genannt werden.
In einem optionalen Verfahren, das diese Operation aufruft, kann
sie benutzt werden, um einen festen Wert in das Register L3OFFSET
zu laden. Als weitere Option kann die Operation LD_L3 einen in einem
temporären
Register (z.B. R1) gespeicherten Wert zu dem im Register L3OFFSET
gespeicherten Wert addieren.
-
Eine
Operation LD_SUM speichert den Startpunkt innerhalb des Pakets,
wo dem an eine Prüfsumme zu
berechnen ist. Das Register, in dem dieser Wert gespeichert wird,
kann CSUMSTART genannt werden. Bei einem alternativen Aufruf dieser
Operation wird ein fester oder vorbestimmter Wert in dem Register
gespeichert. Als weitere Option kann die Operation LD_SUM einen
in einem temporären
Register (z.B. R1) gespeicherten Wert zu dem im Register CSUMSTART
gespeicherten Wert addieren.
-
Eine
Operation LD_HDR lädt
einen Wert in ein Register, das konfiguriert ist, den Ort innerhalb
des Pakets, an dem der Anfangsblock-Abschnitt geteilt werden kann,
zu speichern. Der Wert, der gespeichert wird, kann während der Übertragung
des Pakets an den Hauptrechner benutzt werden, um einen Datenabschnitt des
Pakets an einem anderen Ort als dem Anfangsblock-Abschnitt zu speichern.
Der geladene Wert kann somit den Beginn der Paketdaten oder den
Beginn eines bestimmten Anfangsblocks kennzeichnen. Bei einem Aufruf
einer Operation LD_HDR kann der gespeicherte Wert aus einer gegenwärtigen Position
eines oben beschriebenen Analysierzeigers berechnet werden. Bei
einem anderen Aufruf kann ein fester oder vorbestimmter Wert gespeichert
werden. Als noch eine Alternative können ein in einem temporären Register
(z.B. R1) gespeicherter Wert und/oder eine Konstante zu dem geladenen
Wert addiert werden.
-
Eine
Operation LN_LEN speichert die Länge
der Nutzlast des Pakets in einem Register (z.B. einem Register PAYLOADLEN
(Nutzlastlänge)).
-
Eine
Operation IM_FID hängt
einen festen oder vorbestimmten Wert an den vorhandenen Inhalt des oben
beschriebenen Registers FLOWID an oder addiert ihn dazu.
-
Eine
Operation IM_SEQ hängt
einen festen oder vorbestimmten Wert an den Inhalt des oben beschriebenen
Registers SEQNO an oder addiert ihn dazu.
-
Eine
Operation IM_SAP lädt
oder speichert einen festen oder vorbestimmten Wert in dem oben
beschriebenen Register CSUMSTART.
-
Eine
Operation IM_R1 kann einen vorbestimmten Wert in ein oder mehrere
temporäre
Register (z.B. R1, R2) addieren oder laden.
-
Eine
Operation IM_CTL lädt
oder speichert einen festen oder vorbestimmten Wert in dem oben
beschriebenen Register CONTROL.
-
Eine
Operation ST_FLAG lädt
einen Wert aus einem spezifizierten Versatz in dem Paket in ein
Register FLAG (Anzeiger). Der geladene Wert kann ein oder mehrere
Felder oder Anzeiger aus einem Paket-Anfangsblock aufweisen.
-
Der
Fachmann erkennt, dass die den oben und anderswo in diesem Abschnitt
beschriebenen Operationen und Registern gegebenen Bezeichnungen
nur beispielhaft sind und die Operationen und Analysierbefehle,
die in anderen Ausführungsformen
der Erfindung verwendet werden können,
in keiner Weise beschränken.
-
Die
Befehle im Programm 800 umfassen ein Befehlsnummer-Feld 802,
das eine Nummer eines Befehls innerhalb des Programms enthält, und
ein Befehlsname-Feld 804, das einen Namen eines Befehls
enthält.
In einer alternativen Ausführungsform
der Erfindung können
die Befehlsnummer- und Befehlsname-Felder zusammengelegt sein, oder
eines von ihnen kann weggelassen sein.
-
Ein
Befehlsinhalt-Feld 806 enthält mehrere Abschnitte zum Ausführen eines
Befehls. Ein Abschnitt "Extraktionsmaske" eines Befehls ist
eine Zwei-Byte-Maske in Hexadezimaldarstellung. Eine Extraktionsmaske
bestimmt einen zu kopierenden oder zu extrahierenden Abschnitt eines
Paket-Anfangsblocks beginnend vom gegenwärtigen Paketversatz aus (z.B.
der aktuellen Position des Analysierzeigers). Erläuternd wird
jedes Bit im Anfangsblock des Pakets, das einer eins in dem Hexadezimalwert
entspricht, für
Vergleich mit einem Vergleichs- oder Prüfwert kopiert. Zum Beispiel
bedeutet ein Wert 0xFF00 im Abschnitt Extraktionsmaske eines Befehls,
dass das ganze erste Byte am aktuellen Paketversatz zu kopieren
ist und dass der Inhalt des zweiten Bytes irrelevant ist. Ähnlich bedeutet
eine Extraktionsmaske 0x3FFF, dass alle außer den zwei signifikantesten
Bits des ersten Byte zu kopieren sind. Aus dem extrahierten Inhalt
wird unter Verwendung dessen, was auch immer aus dem Paket kopiert
wurde, ein Zwei-Byte-Wert
aufgebaut. Erläuternd
wird der Rest des Pakets mit Nullen aufgefüllt. Der Fachmann erkennt,
dass das Format einer Extraktionsmaste (oder einer weiter unten
beschriebenen Ausgabemaske) nötigenfalls
so angepasst werden kann, dass es eine Little-Endian- oder Big-Endian-Darstellung
widerspiegelt.
-
Ein
oder mehrere Befehle in einem Analysierprogramm benötigen möglicherweise
keine an der Zeigerstelle aus dem Paket extrahierte Daten, um ihren
Ausgabebetrieb durchführen
zu können.
Diese Befehle können
einen Extraktionsmaske-Wert 0x0000 haben, um anzuzeigen, dass zwar
noch ein Zwei-Byte-Wert aus der Zeigerposition wiedergewonnen wird,
dass aber jedes Bit des Wertes maskiert ist. So eine Extraktionsmaske
ergibt somit einen definitiven Wert null. Diese Art von Befehl kann
zum Beispiel benutzt werden, wenn ein Ausgabebetrieb durchgeführt werden
muss, bevor ein anderer wesentlicher Abschnitt von Anfangsblock-Daten
mit einer anderen Extraktionsmaske als 0x0000 extrahiert wird.
-
Ein
Abschnitt "Vergleichswert" eines Befehls ist
ein Zwei-Byte-Hexadezimalwert, mit dem der extrahierte Paketinhalt
zu vergleichen ist. Der Vergleichswert kann ein bekanntermaßen in einem
bestimmten Feld eines spezifischen Protokoll-Anfangsblocks gespeicherter
Wert sein. Der Vergleichswert kann einen Wert aufweisen, zu dem
der extrahierte Abschnitt des Anfangsblocks passen oder eine spezifizierte
Beziehung haben sollte, damit das Paket als mit den vorgewählten Protokollen
kompatibel angesehen wird.
-
Ein
Abschnitt "Operator" eines Befehls kennzeichnet
einen Operator, der anzeigt, wie die extrahierten Werte und die
Vergleichswerte zu vergleichen sind. Erläuternd zeigt EQ an, dass sie
auf Gleichheit geprüft
werden, NE zeigt an, dass sie auf Ungleichheit geprüft werden,
LT zeigt an, dass der extrahierte Wert kleiner als der Vergleichswert
sein muss, damit der Vergleich Erfolg hat, GE zeigt an, dass der
extrahierte Wert größer als
der Vergleichswert sein muss, usw. Ein Befehl, der auf die Ankunft
eines neuen zu analysierenden Pakets wartet, kann eine Operation
NP verwenden. Andere Operatoren für andere Funktionen können hinzugefügt werden,
und den vorhandenen Operatoren können
andere Namen zugewiesen werden.
-
Ein
Abschnitt "Erfolgversatz" eines Befehls zeigt
die Zahl der Zwei-Byte-Einheiten an, die der Zeiger vorrücken soll,
wenn der Vergleich zwischen den extrahierten Werten und Prüfwerten
Erfolg hat. Ein Abschnitt "Erfolgsbefehl" eines Befehls kennzeichnet,
den nächsten
Befehl im Programm 800 auszuführen, wenn der Vergleich erfolgreich
ist.
-
Ähnlich zeigen
Abschnitte "Fehlschlagversatz" und "Fehlschlagbefehl" die Zahl der Zwei-Byte-Einheiten,
die der Zeiger vorrücken
soll, bzw. den nächsten
auszuführenden
Befehl an, wenn der Vergleich fehlschlägt. In dieser Ausführungsform
der Erfindung werden Versätze
zwar in Einheiten von zwei Bytes ausgedrückt (z.B. Sechzehn-Bit-Worten), in einer
alternativen Ausführungsform
der Erfindung können
sie aber kleinere oder größere Einheiten
sein. Weiterhin kann ein Befehl durch eine Nummer oder einen Namen
gekennzeichnet werden, wie oben erwähnt.
-
Nicht
alle Befehle in einem Programm werden notwendigerweise für jedes
Paket benutzt, das analysiert wird. Zum Beispiel kann ein Programm
Befehle enthalten, auf mehr als eine Art oder Version eines Protokolls
in einer bestimmten Schicht zu prüfen. Insbesondere prüft das Programm 800 auf
Version vier oder sechs des IP-Protokolls in Schicht drei. Die Befehle,
die für
ein gegebenes Paket tatsächlich
ausgegeben werden, hängen
somit von dem Format des Pakets ab. Sobald ein Paket mit einem gegebenen
Programm so weit wie möglich
analysiert worden ist oder festgestellt worden ist, dass das Paket
einem ausgewählten
Protokoll entspricht oder nicht, kann das Analysieren aufhören oder
kann ein Befehl zum Anhalten der Analysierprozedur ausgeführt werden.
Erläuternd
zeigt ein Abschnitt nächster
Befehl eines Befehls (z.B. "Erfolgbefehl" oder "Fehlschlagbefehl") mit dem Wert "DONE" (Fertig) die Beendigung
der Analyse eines Pakets an. Ein Befehl DONE oder ähnlich kann
ein Leerbefehl sein. Mit anderen Worten, "DONE" kann
einfach anzeigen, dass die Analyse für das gegenwärtige Paket
zu beenden ist. Oder es kann, wie Befehl achtzehn des Programms 800, ein
Befehl DONE irgendeine Aktion durchführen, um auf ein neues Paket
zu warten (z.B. durch Initialisieren eines Registers).
-
Die übrigen Abschnitte
des Befehlsinhalt-Feldes 806 werden benutzt, um eine Ausgabe-
oder andere Datenspeicheroperation zu spezifizieren und zu vollenden.
Insbesondere entspricht in dieser Ausführungsform ein Abschnitt "Ausgabeoperation" eines Befehls den
im geladenen Befehlssatz enthaltenen Operationen. Somit kennzeichnet
für das
Programm 800 der Abschnitt Ausgabeoperation eines Befehls
eine der sechzehn oben beschriebenen Operationen. Die im Programm 800 verwendeten
Ausgabeoperationen werden weiter unten in Verbindung mit individuellen
Befehlen näher
beschrieben.
-
Ein
Abschnitt "Operationsargument" eines Befehls enthält ein oder
mehrere Argumente oder Felder, die zu speichern, zu laden oder anderweitig
in Verbindung mit der Ausgabeoperation des Befehls zu benutzen sind.
Erläuternd
nimmt der Abschnitt Operationsargument die Form eines Mehrbit-Hexadezimalwertes
an. Für das
Programm 800 sind die Operationsargumente elf Bits groß. Ein Argument
oder Abschnitt eines Arguments kann je nach der Ausgabeoperation
verschiedene Bedeutungen haben. Zum Beispiel kann ein Operationsargument
einen oder mehrere numerische Werte aufweisen, die in einem Register
zu speichern oder zu benutzen sind, um einen Abschnitt eines Anfangsblocks
zu lokalisieren oder einzugrenzen. Oder ein Argument-Bit kann einen
Anzeiger aufweisen, um eine Aktion oder einen Status zu signalisieren.
Insbesondere kann ein Argument-Bit spezifizieren, dass ein bestimmtes
Register zurückzusetzen
ist; ein Satz von Argument-Bits kann einen Versatz in einen Paket-Anfangsblock
zu einem in einem Register zu speichernden Wert aufweisen, usw. Erläuternd wird
der durch ein Opera tionsargument spezifizierte Versatz auf den Ort
der Analysierzeigerposition, bevor der Zeiger vorgerückt wird,
angewandt, wie durch den anwendbaren Erfolgversatz oder Fehlschlagversatz
spezifiziert. Die im Programm 800 benutzten Operationsargumente
werden weiter unten detaillierter erläutert.
-
Ein
Abschnitt "Operationsfreigabe" eines Befehlsinhalts-Feldes
spezifiziert, ob oder wann eine Befehlsausgabeoperation durchzuführen ist.
Insbesondere kann im Ausführungsbeispiel
der Erfindung eine Befehlsausgabeoperation durchgeführt werden
oder nicht, je nach dem Ergebnis des Vergleichs zwischen einem aus einem
Anfangsblock extrahierten Wert und dem Vergleichswert. Zum Beispiel
kann eine Operationsfreigabe auf einen ersten Wert (z.B. null) gesetzt
werden, wenn die Ausgabeoperation nie durchzuführen ist. Sie kann andere Werte
annehmen, wenn sie nur dann durchzuführen ist, wenn der Vergleich
den Operator befriedigt oder nicht (z.B. eins bzw. zwei). Eine Operationsfreigabe
kann noch einen anderen Wert (z.B. drei) annehmen, wenn sie immer
durchzuführen
ist.
-
Ein
Abschnitt "Verschieben" eines Befehls enthält einen
Wert, der anzeigt, wie ein Ausgabewert zu verschieben ist. Eine
Verschiebung kann notwendig sein, weil unterschiedliche Protokolle
manchmal erfordern, dass Werte unterschiedlich formatiert werden.
Außerdem
erfordert ein Wert, der eine Länge
oder einen Ort eines Anfangsblocks oder Anfangsblock-Feldes anzeigt,
möglicherweise
Verschieben, um die passende durch den Wert dargestellte Größe widerzuspiegeln.
Zum Beispiel, da das Programm 800 darauf ausgelegt ist, Zwei-Byte-Einheiten
zu benutzen, muss ein Wert möglicherweise
verschoben werden, wenn er andere Einheiten (z.B. Bytes) widerspiegeln
soll. Ein Verschiebungswert in einer vorliegenden Ausführungsform
zeigt die Zahl der Stellen (z.B. Bits) an, um die ein Ausgabewert
nach rechts zu verschieben ist. In einer anderen Ausführungsform
der Erfindung kann ein Verschiebungswert einen anderen Verschiebungstyp
oder eine andere Verschiebungsrichtung darstellen.
-
Schließlich spezifiziert
eine "Ausgabemaske", wie ein Wert, der
in einem Register oder einer anderen Datenstruktur gespeichert wird,
zu formatieren ist. Wie oben angegeben, kann eine Ausgabeoperation
erfordern, das ein extrahierter, berechneter oder zusammengesetzter
Wert gespeichert wird. Ähnlich
wie die Extraktionsmaske ist die Ausgabemaske ein Zwei-Byte-Hexadezimalwert.
Für jede
Stelle in der Ausgabemaske, die eine Eins enthält, ist in dieser Ausführungsform
der Erfindung das entsprechende Bit in dem durch die Ausgabeoperation
und/oder das Operationsargument gekennzeichneten Zwei-Byte-Wert
zu speichern. Zum Beispiel zeigt ein Wert 0xFFFF an, dass der spezifizierte
Zwei-Byte-Wert so, wie er ist, zu speichern ist. Erläuternd wird
für jede
Stelle in der Ausgabemaske, die eine Null enthält, eine Null gespeichert.
Somit zeigt ein Wert 0xF000 an, dass die signifikantesten vier Bits
des ersten Bytes zu speichern sind, aber der Rest des gespeicherten
Wertes irrelevant ist und mit Nullen aufgefüllt werden kann.
-
Eine
Ausgabeoperation "KEINE" kann benutzt werden,
um anzuzeigen, dass keine Ausgabeoperation durchzuführen oder
zu speichern ist, in welchem Fall andere, die Ausgabe betreffende
Befehlsabschnitte ignoriert werden können oder spezifizierte Werte
enthalten können
(z.B. alles Nullen). In dem in 8 gezeigten Programm
kann jedoch eine Ausgabeoperation CLR_REG, die die selektive Neuinitialisierung
von Registern erlaubt, mit einem Operationsargument null benutzt
werden, um effektiv keine Ausgabe durchzuführen. Insbesondere zeigt ein
Operationsargument null für
die Operation CLR_REG an, dass keine Register zurückzusetzen
sind. In einer alternativen Ausführungsform
der Erfindung könnte
der Operationsfreigabe-Abschnitt eines Befehls auf einen Wert (z.B.
null) gesetzt werden, der anzeigt, dass die Ausgabeoperation nie
durchzuführen ist.
-
Das
Format und die Sequenz der Befehle von 8 stellen
selbstverständlich
nur ein Verfahren zum Analysieren eines Pakets dar, um zu bestimmen,
ob es einem bestimmten Datenübertragungsprotokoll
entspricht. Insbesondere sind die Befehle darauf ausgelegt, einen
oder mehrere Abschnitte eines oder mehrerer Paket-Anfangsblöcke auf
Vergleich mit bekannten oder erwarteten Werten zu prüfen und
nötigenfalls
ein Register oder einen anderen Speicherplatz zu konfigurieren oder
zu laden. Wie der Fachmann erkennt, können Befehle zum Analysieren
eines Pakets eine beliebige Zahl von Formen annehmen und können in
mannigfachen Sequenzen durchgeführt
werden, ohne den Schutzbereich der Erfindung zu verlassen.
-
Unter
Bezugnahme auf 8 können nun Befehle im Programm 800 im
Detail beschrieben werden. Vor Ausführung des in 8 gezeigten
Programms befindet sich ein Analysierzeiger am Beginn eines Anfangsblocks
der Schicht zwei eines Pakets. Die Position des Analysierzeigers
kann für
leichte Bezugnahme und Aktualisierung während der Analysierprozedur
in einem Register gespeichert werden. Insbesondere kann die Position
des Analysierzeigers als ein Versatz (z.B. vom Beginn des Anfangsblocks der
Schicht zwei) beim Berechnen der Position einer bestimmten Position
innerhalb eines Anfangsblocks benutzt werden.
-
Das
Programm 800 beginnt mit einem Befehl WAIT (z.B. Befehl
null), der auf ein neues Paket wartet (z.B. durch den Operator NP
angezeigt), und wenn einer empfangen wird, stellt es einen Analysierzeiger
auf das zwölfte
Byte des Anfangsblocks der Schicht zwei. Dieser Versatz zum zwölften Byte
wird durch den Abschnitt Erfolgversatz des Befehls angezeigt. Bis
ein Paket empfangen wird, schleift der Befehl WAIT in sich. Außerdem wird
eine Operation CLR_REG durchgeführt,
jedoch zeigt die Operationsfreigabe-Einstellung an, dass sie nur
durchgeführt
wird, wenn der Vergleich Erfolg hat (z.B. wenn ein neues Paket empfangen
wird).
-
Die
spezifizierte Operation CLR_REG arbeitet in Übereinstimmung mit dem Operationsargument
des Befehls WATT (d.h. 0x3FF). In dieser Ausführungsform entspricht jedes
Bit des Arguments einem Register oder einer anderen Datenstruktur.
Die bei dieser Operation initialisierten Register können die
Folgenden umfassen: ADDR (z.B. die Adresse oder den Ort des Analysierzeigers
zu speichern), FLOWID (z.B. den Flussschlüssel des Pakets zu speichern),
SEQNO (z.B. eine TCP-Sequenznummer zu speichern), SAP (z.B. der Ethertyp
des Pakets) und PAYLOADLEN (z.B. Nutzlastlänge). Die folgenden Register,
die konfiguriert sind, bestimmte Versätze zu speichern, können ebenfalls
zurückgesetzt
werden: FLOWOFF (z.B. Versatz innerhalb des Registers FLOWID), SEQOFF
(z.B. Versatz innerhalb des Registers SEQNO), L3OFFSET (z.B. Versatz innerhalb
des Anfangsblock der Schicht drei des Pakets), HDRSPLIT (z.B. Ort
zum Aufspalten eines Pakets) und CSUMSTART (z.B. Startort zum Berechnen
einer Prüfsumme).
Außerdem
können
ein oder mehrere Status- oder Steueranzeiger (z.B. die Register
CONTROL oder FLAGS) zum Berichten des Status eines oder mehrerer
Anzeiger eines Paket-Anfangsblocks zurückgesetzt werden. Zusätzlich können auch
ein oder mehrere temporäre
Register (z.B. R1, R2) oder andere Datenstrukturen initialisiert
werden. Diese Register sind für die
Datenstrukturen, die in einer Ausführungsform der Erfindung verwendet
werden können,
nur erläuternd.
In anderen Ausführungsformen
können
für dieselben
oder andere Ausgabeoperationen andere Datenstrukturen benutzt werden.
-
Temporäre Register
wie z.B. R1 und/oder R2 können
im Programm 800 benutzt werden, um verschiedene Anfangsblöcke und
Anfangsblock-Felder zu verfolgen. Der Fachmann erkennt die Zahl
der möglichen Kombinationen
von Datenübertragungsprotokollen
und die Wirkung dieser verschiedenen Kombinationen auf die Struktur
und das Format eines Paket-Anfangsblocks. Möglicherweise müssen mehr
Informationen geprüft oder
aus einem Paket entsprechend einem Protokoll oder einem Satz von
Protokollen statt aus einem Paket entsprechend einem anderen Protokoll
oder Satz von Protokollen gesammelt werden. Zum Beispiel, wenn Erweiterungs-Anfangsblöcke mit
einem Internet-Protokoll-Anfangsblock benutzt werden, müssen möglicherweise
Werte aus diesen Erweiterungs-Anfangsblöcken und/oder deren Längen gespeichert
werden, welche Werte nicht benötigt
werden, wenn keine Erweiterungs-Anfangsblöcke benutzt werden. Beim Berechnen
eines bestimmten Versatzes wie zum Beispiel eines Versatzes zum
Beginn eines Datenabschnitts eines Pakets müssen möglicherweise mehrere Register
nicht aufrechterhalten und ihre Werte kombiniert oder addiert werden. In
diesem Beispiel kann ein Register oder temporäres Register die Größe oder
das Format eines Erweiterungs-Anfangsblocks verfolgen, während ein
anderes Register den Basis-IP-Anfangsblock
verfolgt.
-
Ein
Befehl VLAN (z.B. Befehl eins) prüft das Zwei-Byte-Feld an der
Analysierzeigerposition (möglicherweise
ein Feld Typ, Länge
oder TPID) auf einen Wert, der einen VLAN-markierten Anfangsblock
anzeigt (z.B. 8100 in Hexadezimalschreibweise). Wenn der Anfangsblock
VLAN-markiert ist, wird der Zeiger ein Paar Bytes hochgezählt (z.B.
eine Zwei-Byte-Einheit), und die Ausführung geht mit dem Befehl CFI
weiter; andernfalls geht die Ausführung mit dem Befehl 802.3
weiter. In jedem Fall zeigt die Operationsfreigabe des Befehls an,
dass immer eine Operation IM CTL durchzuführen ist.
-
Wie
oben beschrieben, bewirkt eine Operation IM CTL, dass ein Steuerregister
oder eine andere Datenstruktur mit einem oder mehreren Anzeigern
zu bevölkern
ist, um den Status oder Zustand eines Pakets zu berichten. Ein Steuerindikator
kann anzeigen, ob ein Paket für
erweiterte Verarbeitung geeignet ist (z.B. ob ein Signal No Assist
für das
Paket erzeugt werden sollte), ob ein Paket irgendwelche Daten enthält und,
wenn ja, ob die Größe des Datenabschnitts
einen spezifizierten Schwellenwert übersteigt. Das Operationsargument 0x00A
für den
Befehl VLAN enthält
den im Steuerregister zu speichernden Wert, wobei individuelle Bits
des Arguments bestimmten Anzeigern entsprechen. Erläuternd können Anzeiger,
die den gerade beschriebenen Zuständen zugeordnet sind, bei dieser
Operation IM CTL auf eins oder wahr gesetzt werden.
-
Der
Befehl CFI (z.B. Befehl zwei) prüft
das CFI-Bit oder den Anzeiger in einem Anfangsblock der Schicht
zwei. Wenn das CFI-Bit gesetzt ist, ist das Paket nicht für die Verarbeitungsverbesserungen
einer vorliegenden Ausführungsform
der Erfindung geeignet, und die Analysierprozedur endet mit Aufruf
des Befehls DONE (z.B. Befehl achtzehn). Wenn das CFI-Bit nicht
gesetzt ist, wird der Zeiger ein weiteres Paar Bytes hochgezählt, und
die Ausführung
geht mit dem Befehl 802.3 weiter. Wie oben erläutert, zeigt eine Operation
Leerausgabe (z.B. "KEINE") an, dass keine
Ausgabeoperation durchzuführen
ist. Außerdem
stellt der Ausgabefreigabewert (z.B. null) weiterhin sicher, dass
keine Ausgabeoperation durchgeführt
wird.
-
Im
Befehl 802.3 (z.B. Befehl drei) wird ein Typ- oder Länge-Feld
(je nach dem Ort des Zeigers und dem Format des Pakets) geprüft, um zu
bestimmen, ob das Format der Schicht zwei des Pakets traditionelles
Ethernet oder 802.3-Ethernet ist. Wenn der Wert im Anfangsblock-Feld
802.3-Ethernet anzuzeigen scheint (z.B. einen Hexadezimalwert kleiner
als 0600 enthält),
wird der Zeiger zwei Byte hochgezählt (auf das, was ein Feld LLC
SNAP sein sollte), und die Ausführung
geht mit dem Befehl LLC_1 weiter. Andernfalls kann das Protokoll der
Schicht zwei als traditionelles Ethernet angesehen werden, und die
Ausführung
geht mit dem Befehl IPV4_1 weiter. Der Befehl 802.3 in dieser Ausführungsform
der Erfindung umfasst keine Ausgabeoperation.
-
In
den Befehlen LLC_1 und LLC_2 (z.B. Befehle vier und fünf) wird
ein vermutetes Feld LLC SNAP der Schicht zwei geprüft, um sicherzustellen,
dass das Paket dem 802.3-Ethernet-Protokoll
entspricht. Im Befehl LLC_1 wird ein erster Teil des Feldes geprüft, und
wenn erfolgreich, wird der Zeiger zwei Bytes hochgezählt und
wird ein zweiter Teil im Befehl LLC_2 geprüft. Wenn der Befehl LLC_2 Erfolg
hat, wird der Analysierzeiger vier Bytes hochgezählt, um das zu erreichen, was
ein Typ-Feld sein sollte, und die Ausführung geht mit dem Befehl IPV4_1
weiter. Wenn eine der Prüfungen
fehlschlägt,
wird die Analysierprozedur jedoch beendet. Im Ausführungsbeispiel
der Erfindung wird keine Ausgabeoperation durchgeführt, während das
Feld LLC SNAP geprüft
wird.
-
Im
Befehl IPV4_1 (z.B. Befehl sechs) sollte der Analysierzeiger in
einem Ethernet-Typ-Feld
sein. Dieses Feld wird geprüft,
um zu bestimmen, ob das Protokoll der Schicht drei der Version vier
des Internet-Protokolls zu entsprechen scheint. Ist die Prüfung erfolgreich
(z.B. enthält
das Typ-Feld einen Hexadezimalwert 0800), wird der Zeiger um zwei
Byte zum Beginn des Anfangsblocks der Schicht drei vorgerückt, und
die Ausführung des
Programms 800 geht mit dem Befehl IPV4_2 weiter. Ist die
Prüfung
erfolglos, geht die Ausführung mit
dem Befehl IPV6_1 weiter. Unabhängig
von den Prüfungsergebnissen
zeigt der Operationsfreigabewert (z.B. drei) an, dass die spezifizierte
LD SAP-Ausgabeoperation
immer durchgeführt
wird.
-
Wie
vorher beschrieben, wird bei einer Operation LD SAP der Ethertyp
eines Pakets (oder Service Access Point, Dienstzugangspunkt) in
einem Register gespeichert. Ein Teil des Operationsarguments von
0x100, insbesondere die sechs Bits ganz rechts (z.B. null), bilden
einen Versatz zu einem Zwei-Byte-Wert, der den Ethertyp aufweist.
Der Versatz ist in diesem Beispiel null, weil im vorliegenden Kontext
der Analysierzeiger schon im Typ-Feld ist, das den Ethertyp enthält. In der
vorliegend beschriebenen Ausführungsform
bildet der Rest des Operationsarguments einen Anzeiger, der spezifiziert,
dass die Startposition des Anfangsblocks der Schicht drei (z.B.
ein Versatz vom Beginn des Pakets) ebenfalls zu speichern ist (z.B.
im Register L3OFFSET). Insbesondere liegt der Beginn des Anfangsblocks
der Schicht drei bekanntermaßen
unmittelbar hinter dem Zwei-Byte-Typ-Feld.
-
Der
IPV4_2 (z.B. Befehl sieben) prüft
ein vermutetes Version-Feld der Schicht drei, um sicherzustellen,
dass das Protokoll der Schicht drei die Version vier von IP ist.
Insbesondere spezifiziert eine Spezifikation für die Version vier von IP,
dass die ersten vier Bits des Anfangsblocks der Schicht drei einen
Wert 0x4 enthalten. Wenn die Prüfung
fehlschlägt,
endet die Analysierprozedur mit dem Befehl DONE. Wenn die Prüfung Erfolg
hat, rückt
der Zeiger sechs Bytes vor, und der Befehl IPV4_3 wird aufgerufen.
-
Die
spezifizierte Operation LD SUM, die nur durchgeführt wird, wenn der Vergleich
im Befehl IPV4_2 Erfolg hat, zeigt an, dass ein Versatz zum Beginn
einer Stelle, von der an eine Prüfsumme
berechnet werden kann, gespeichert werden sollte. Insbesondere sollte
in der vorliegend beschriebenen Ausführungsform der Erfindung eine
Prüfsumme
vom Beginn des TCP-Anfangsblocks an berechnet werden (unter der
Voraussetzung, dass der Anfangsblock der Schicht vier TCP ist).
Der Wert des Operationsarguments (z.B. 0x00A) zeigt an, dass die
Prüfsumme
zwanzig Bytes (zum Beispiel zehn Zwei-Byte-Schritte) ab dem aktuellen Zeiger
liegt. Daher wird ein Wert von zwanzig Bytes zu der Analysierzeigerposition
addiert, und das Ergebnis wird in einem Register oder einer anderen
Datenstruktur gespeichert (z.B. dem Register CSUMSTART).
-
Der
Befehl IPV4_3 (z.B. Befehl acht) ist darauf ausgelegt, zu bestimmen,
ob der IP-Anfangsblock
des Pakets IP-Fragmentierung anzeigt. Wenn der in Übereinstimmung
mit der Extraktionsmaske aus dem Anfangsblock extrahierte Wert nicht
gleich dem Vergleichswert ist, zeigt das Paket Fragmentierung an.
Wird Fragmentierung nachgewiesen, wird das Paket als für die hierin
erörterten
Verarbeitungsverbesserungen ungeeignet angesehen, und die Prozedur
endet (zum Beispiel durch den Befehl DONE). Andernfalls wird der
Zeiger zwei Bytes hochgezählt,
und nach Durchführung
einer Operation LD_LEN wird der Befehl IPV4_4 aufgerufen.
-
In Übereinstimmung
mit der Operation LD_LEN wird die Länge des IP-Segments gespeichert.
Das gezeigte Operationsargument (z.B. 0x03E) enthält einen
Versatz zum Feld Gesamtlänge,
wo sich der Wert befindet. Insbesondere bilden die am Wenigsten
signifikanten sechs Bits den Versatz. Da der Zeiger schon an diesem
Feld vorbei vorgerückt
wurde, enthält
das Operationsargument einen negativen Wert. Der Fachmann erkennt,
dass dieser Binärwert
(z.B. 111110) benutzt werden kann, um den Dezimalwert negativ zwei
darzustellen. Daher wird der gegenwärtige Versatz des Zeigers,
minus vier Bytes (z.B. zwei Zwei-Bytes-Einheiten) in einem Register
oder einer anderen Datenstruktur gespeichert (zum Beispiel dem Register
PAYLOADLEN). Man kann irgendein geeignetes Verfahren zum Darstellen
eines negativen Versatzes benutzten. Oder die IP-Segment-Länge kann
gespeichert werden, während
der Zeiger an einem dem Feld Gesamtlänge vorhergehenden Ort ist
(zum Beispiel während
eines früheren
Befehls).
-
Im
Befehl IPV4_4 (zum Beispiel Befehl neun) wird ein Ein-Byte-Protokoll-Feld
geprüft,
um zu bestimmen, ob das Protokoll der Schicht vier TCP zu sein scheint.
Wenn ja, wird der Zeiger vierzehn Bytes vorgerückt, und die Ausführung geht
mit dem Befehl TCP_1 weiter; anderenfalls endet die Prozedur.
-
Die
spezifizierte Operation LD FID, die nur durchgeführt wird, wenn der Vergleich
im Befehl IPV4_4 Erfolg hat, umfasst, den Flussschlüssel des
Pakets wiederzugewinnen und ihn in einem Register oder anderen Ort
zu speichern (z.B. dem Register FLOWID). Der Fachmann erkennt, dass,
damit der Vergleich im Befehl IPV4_4 erfolgreich ist, die Anfangsblöcke der
Schicht drei und vier des Pakets IP (Version vier) bzw. TCP entsprechen
müssen.
Wenn ja, wird der ganze Flussschlüssel (z.B. IP-Quellen- und
-Zieladressen plus TCP-Quellen- und -Ziel-Port-Nummern) zusammenhängend im Anfangsblock-Abschnitt
des Pakets gespeichert. Insbesondere enthält der Flussschlüssel den
letzten Abschnitt des IP-Anfangsblocks und den Anfangsabschnitt
des TCP-Anfangsblocks
und kann in einer Operation extrahiert werden. Das Operationsargument
(z.B. 0x182) enthält
somit zwei Werte, die nötig
sind, um den Flussschlüssel
zu lokalisieren und einzugrenzen. Erläuternd kennzeichnen die sechs
Bits ganz rechts im Argument (z.B. 0x02) einen Versatz von der Zeigerposition
in Zwei-Byte-Einheiten zum Beginn des Flussschlüssels. Die anderen fünf Bits
des Arguments (z.B. 0x06) kennzeichnen die Größe des zu speichernden Flussschlüssels in
Zwei-Byte-Einheiten.
-
Im
Befehl IPV6_1 (zum Beispiel Befehl zehn), der dem durch den Befehl
IPV4_1 durchgeführten
Vergleich folgt, sollte der Analysierzeiger in einem Typ-Feld der
Schicht zwei sein. Ist diese Prüfung
erfolgreich (z.B. das Typ-Feld hält
einen Hexadezimalwert 86DD), wird der Befehl IPV6_2 durchgeführt, nachdem
eine Operation LD SUM durchgeführt
worden ist, und der Zeiger wird zwei Bytes zum Beginn des Protokolls
der Schicht drei hochgezählt.
Ist die Prüfung
erfolglos, endet die Prozedur.
-
Die
angezeigte Operation LD SUM im Befehl IPV6_1 ist der im Befehl IPV4_2
durchgeführten
Operation ähnlich,
benutzt aber ein anderes Argument. Wieder ist die Prüfsumme vom
Beginn des TCP-Anfangsblocks an zu berechnen (unter der Voraussetzung,
dass der Anfangsblock der Schicht vier TCP ist). Das spezifizierte
Operationsargument (z.B. 0x015) enthält somit einen Versatz zum
Beginn des TCP-Anfangsblocks – einundzwanzig
Zwei-Byte-Schritte voraus. Der angezeigte Versatz wird zu der gegenwärtigen Zeigerposition addiert
und in einem Register oder einer anderen Datenstruktur gespeichert
(z.B. dem Register CSUMSTART).
-
Befehl
IPV6_2 (zum Beispiel Befehl elf) prüft ein vermutetes Version-Feld
der Schicht drei, um noch mehr sicherzustellen, dass das Protokoll
der Schicht drei Version sechs von IP ist. Wenn der Vergleich fehlschlägt, endet
die Analysierprozedur mit dem Aufruf des Befehls DONE. Wenn er Erfolg
hat, wird der Befehl IPV6_3 aufgerufen. Die Operation IM_R1, die
nur durchgeführt
wird, wenn der Vergleich in dieser Ausführungsform Erfolg hat, speichert
die Länge
des IP-Anfangsblocks aus einem Feld Nutzlastlänge. Wie der Fachmann erkennt,
enthält
das Feld Gesamtlänge
(z.B. IP-Segmentgröße) eines
IP-Anfangsblocks der Version vier die Größe des Anfangsblocks der Version
vier. Jedoch enthält
das Feld Nutzlastlänge
(z.B. IP-Segmentgröße) eines
IP-Anfangsblocks der Version sechs die Größe des Anfangsblocks der Version
sechs nicht. Daher wird die Größe des Anfangsblocks
der Version sechs, die durch die acht Bits ganz rechts im Ausgabeargument (zum
Beispiel 0x14, was zwanzig Zwei-Byte-Einheiten anzeigt) gekennzeichnet
wird, gespeichert. Erläuternd kennzeichnet
der Rest des Arguments die Datenstruktur, in der die Anfangsblock-Länge zu speichern
ist (z.B. temporäres
Register R1). Wegen der Größenvariation
der Anfangsblöcke
der Schicht drei zwischen Protokollen wird in einer Ausführungsform
der Erfindung die Anfangsblock-Größe in anderen Einheiten angezeigt,
um größere Genauigkeit
zu ermöglichen.
Insbesondere wird in einer Ausführungsform
der Erfindung die Größe des Anfangsblocks
in Bytes im Befehl IPV6_2 spezifiziert, in welchem Fall das Ausgabeargument
0x128 sein könnte.
-
Der
Befehl IPV6_3 (z.B. Befehl zwölf)
in dieser Ausführungsform
prüft keinen
Anfangsblock-Wert. In dieser Ausführungsform zeigt die Kombination
einer Extraktionsmaske 0x0000 mit einem Vergleichswert 0x0000 an,
dass vor der nächsten
Prüfung
eines Abschnitt eines Anfangsblocks eine Ausgabeoperation gewünscht wird.
Nach Durchführung
der Operation LD FID wird der Zeiger sechs Bytes zu einem Feld Nächster Anfangsblock
des Anfangsblocks in Version sechs von IP vorgerückt. Da die Extraktionsmaske
und der Vergleichswert beide 0x0000 sind, sollte der Vergleich nie
fehlschlagen, und der Fehlschlag-Zweig des Befehls sollte nie aufgerufen
werden.
-
Wie
vorher beschrieben, speichert eine Operation LD FID einen Flussschlüssel in
einem geeigneten Register oder einer anderen Datenstruktur (z.B.
dem Register FLOWID). Erläuternd
enthält
das Operationsargument 0x484 zwei Werte zum Kennzeichnen und Eingrenzen
des Flussschlüssels.
Insbesondere zeigen die sechs Bits ganz rechts (z.B. 0x04) an, dass
der Flussschlüssel-Abschnitt
in einem Versatz von acht Bytes (z.B. vier Zwei-Byte-Schritten)
von der aktuellen Zeigerposition liegt. Der Rest des Operationsarguments
(z.B. 0x12) zeigt an, dass sechsunddreißig Bytes (z.B. das Dezimaläquivalent
von 0x12 Zwei-Byte-Einheiten) von dem berechneten Versatz zu kopieren
sind. Im Ausführungsbeispiel
der Erfindung wird der ganze Flussschlüssel intakt kopiert, einschließlich der
Quellen- und Zieladressen der Schicht drei und der Quellen- und
Ziel-Ports der Schicht vier.
-
Im
Befehl IPV6_4 (zum Beispiel Befehl dreizehn) wird ein vermutetes
Feld Nächster
Anfangsblock geprüft,
um zu bestimmen, ob das Protokoll der Schicht vier des Protokollstapels
des Pakets TCP zu sein scheint. Wenn ja, rückt die Prozedur sechsunddreißig Bytes
vor (z.B. achtzehn Zwei-Byte-Einheiten), und der Befehl TCP_1 wird aufgerufen;
andernfalls endet die Prozedur (zum Beispiel durch den Befehl DONE).
Danach wird die Operation LD_LEN durchgeführt, wenn der Wert im Feld
Nächster
Anfangsblock 0x06 ist. Wie oben beschrieben, speichert diese Operation
die IP-Segmentgröße. Wieder
enthält
das Argument (z.B. 0x03F) einen negativen Versatz, in diesem Fall
einen negativen. Dieser Versatz zeigt an, dass das gewünschte Feld
Nutzlastlänge
zwei Bytes vor der gegenwärtigen
Zeigerposition liegt. Daher wird der negative Versatz zu dem gegenwärtigen Zeigerversatz
addiert und das Ergebnis in einem geeigneten Register oder einer
anderen Datenstruktur gespeichert (z.B. dem Register PAYLOADLEN).
-
In
den Befehlen TCP_1, TCP_2, TCP_3 und TCP_4 (z.B. Befehlen vierzehn
bis siebzehn) werden keine Anfangsblock-Werte – außer bestimmten in den Ausgabeoperationen
des Befehls spezifizierten Anzeigern – geprüft, jedoch werden verschiedene
Daten aus dem TCP-Anfangsblock des Pakets gespeichert. Im Ausführungsbeispiel
enthalten die Daten, die gespeichert werden, eine TCP-Sequenznummer,
eine TCP-Anfangsblock-Länge und
einen oder mehrere Anzeiger. Für
jeden Befehl wird die spezifizierte Operation durchgeführt und
wird der nächste
Befehl aufgerufen. Wie oben beschrieben, wird ein Vergleich zwischen
dem Vergleichswert 0x0000 und einem Extraktionswert null, wie in
allen diesen Befehlen benutzt, nie fehlschlagen. Nach dem Befehl
TCP_4 kehrt die Analysierprozedur zum Befehl WAIT zurück, um auf
ein neues Paket zu warten.
-
Für die Operation
LD SEQ im Befehl TCP_1 enthält
das Operationsargument (z.B. 0x081) zwei Werte, um eine TCP-Sequenznummer
zu bestimmen und zu extrahieren. Die sechs Bits ganz rechts (z.B.
0x01) zeigen an, dass die Sequenznummer zwei Bytes von der aktuellen
Zeigerposition liegt. Der Rest des Arguments (z.B. 0x2) zeigt die
Zahl der Zwei-Byte-Einheiten an, die von dieser Position kopiert
werden müssen,
um die Sequenznummer zu erfassen. Erläuternd wird die Sequenznummer
im Register SEQNO gespeichert.
-
Für die Operation
ST_FLAG im Befehl TCP_2 wird das Operationsargument (z.B. 0x145)
benutzt, um ein Register (z.B. das Register FLAGS) mit in einer
Nachanalyseaufgabe zu benutzenden Anzeigern zu konfigurieren. Die
sechs Bits ganz rechts (z.B. 0x05) bilden einen Versatz in Zwei-Byte-Einheiten
zu einem Zwei-Byte-Abschnitt des TCP-Anfangsblocks, der Anzeiger
enthält,
die sich darauf auswirken können,
ob das Paket für
Nachanalyseverarbeitungs-Verbesserungen der vorliegenden Erfindung
geeignet ist. Zum Beispiel können
sich Anzeiger URG, PSH, RST, SYN und FIN an der Versatzposition
befinden und benutzt werden, um das Register zu konfigurieren. Die
Ausgabemaske (z.B. 0x002F) zeigt an, dass nur bestimmte Abschnitte
(z.B. Bits) des Anzeiger-Feldes des TCP-Anfangsblocks zu speichern
sind.
-
Die
Operation LD_R1 des Befehls TCP_3 ist der im Befehl IPV6_2 durchgeführten Operation ähnlich. Hier
enthält
ein Operationsargument 0x205 einen Wert (z.B. die am Wenigsten signifikanten
sechs Bits), der einen Versatz von fünf Zwei-Byte-Einheiten von
der aktuellen Zeigerposition kennzeichnet. Dieser Ort sollte ein
Feld Anfangsblock-Länge enthalten,
das in einer Datenstruktur zu speichern ist, die durch den Rest
des Arguments gekennzeichnet wird (z.B. das temporäre Register
R1). Die Ausgabemaske (z.B. 0xF000) zeigt an, dass nur die ersten
vier Bits gespeichert werden (z.B. ist das Feld Anfangsblock-Länge nur
vier Bits groß).
-
Wie
der Fachmann erkennen kann, muss im Ausführungsbeispiel der aus dem
Feld Anfangsblock-Länge
extrahierte Wert möglicherweise
angepasst werden, um die Verwendung von Zwei-Byte-Einheiten (z.B.
Sechzehn-Bit-Worten) widerzuspiegeln. In Übereinstimmung mit dem Abschnitt
Verschieben des Befehls TCP_3 wird daher der aus dem Feld extrahierte
und durch die Ausgabemaske (z.B. 0xF000) konfigurierte Wert an die
Positionen elf rechts verschoben, wenn er gespeichert wird, um die
Berechnungen zu vereinfachen.
-
Die
Operation LD_HDR des Befehls TCP_4 bewirkt das Laden eines Versatzes
zum ersten Byte von dem TCP-Anfangsblock folgenden Paketdaten. Erläuternd können Pakete,
die mit einem vorgewählten
Protokollstapel kompatibel sind, an irgendeiner Stelle in Anfangsblock-
und Datenabschnitte getrennt werden. Das Speichern eines Versatzes
zum Datenabschnitt macht es nun leichter, das Paket später aufzuspalten.
Erläuternd
enthalten die sieben Bits ganz rechts im Operationsargument 0x0FF
ein erstes Element des Versatzes zu den Daten. Der Fachmann erkennt
das Bitmuster (z. B. 1111111) als negativ eins gleichend. Daher
wird ein Versatzwert gleich dem aktuellen Analysierzeiger (z.B.
der Wert im Register ADDR) minus zwei Bytes – was den Beginn des TCP-Anfangsblocks
lokalisiert – gespeichert.
Der Rest des Arguments zeigt an, dass der Wert einer temporären Datenstruktur
(z.B. temporäres
Register R1) zu diesem Versatz zu addieren ist. In diesem bestimmten
Kontext wird der im vorher gehenden Befehl gespeicherte Wert (z.B.
die Länge
des TCP-Anfangsblocks) addiert. Diese zwei Werte bilden in Kombination
miteinander einen Versatz zum Beginn der Paketdaten, der in einem
geeigneten Register oder einer anderen Datenstruktur (z.B. dem Register
HDRSPLIT) gespeichert wird.
-
Schließlich, und
wie oben erwähnt,
zeigt der Befehl DONE (z.B. Befehl achtzehn) das Ende der Analyse
eines Pakets an, wenn festgestellt wird, dass das Paket nicht einem
oder mehreren der den gezeigten Befehlen zugeordneten Protokolle
entspricht. Dies kann als ein Befehl "Aufräumen" angesehen werden.
Insbesondere zeigt die Ausgabeoperation LD CTL mit einem Operationsargument
0x001 an, dass in dem oben in Verbindung mit dem Befehl VLAN beschriebenen
Steuerregister kein Signal No Assist zu setzen ist (z.B. auf eins).
Der Anzeiger No Assist, wie anderswo beschrieben, kann benutzt werden,
um andere Module des Netzschnittstelle zu informieren, dass das
vorliegende Paket für
eine oder mehrere anderswo beschriebene Verarbeitungsverbesserungen
ungeeignet ist.
-
Das
gezeigte Programm oder der gezeigte Mikrocode liefert nur ein Verfahren
zum Analysieren eines Pakets. Andere Programme mit denselben Befehlen
in einer anderen Sequenz oder völlig
anderen Befehlen mit ähnlichen
oder unähnlichen
Formaten können
verwendet werden, um Abschnitte von Anfangsblöcken zu prüfen und zu speichern und Register
und andere Datenstrukturen zu konfigurieren.
-
Die
bei Anwendung der verbesserten Verarbeitung einer vorliegenden Ausführungsform
der Erfindung zu realisierenden Effizienzgewinne wiegen die Zeit,
die nötig
ist, um ein Paket mit dem gezeigten Programm zu analysieren, mehr
als auf. Und obwohl in einer aktuellen Ausführungsform ein Anfangsblock-Analysator
ein Paket in einer NIC analysiert, muss das Paket möglicherweise
noch von einem Prozessor in einem Hauptrechner durch seinen Protokollstapel
verarbeitet werden (z.B. um die Protokoll-Anfangsblöcke zu entfernen).
Dies zu tun vermeidet, das Datenverarbeitungsgerät (zum Beispiel die Netzschnittstelle)
mit so einer Aufgabe zu belasten.
-
Eine Ausführungsform
einer Flussdatenbank
-
5 zeigt
eine Flussdatenbank (FDB) 110 in Übereinstimmung mit einer Ausführungsform
der Erfindung. Erläuternd
ist die FDB 110 als CAM (inhaltsadressierbarer Spei cher)
unter Verwendung einer neu beschreibbaren Speicherkomponente (z.B.
RAM, SRAM, DRAM) ausgeführt.
In dieser Ausführungsform
enthält die
FDB 110 einen assoziativen Abschnitt 502 und einen
assoziierten Abschnitt 504 und kann mit einer Flussnummer 506 indexiert
sein.
-
Der
Schutzumfang der Erfindung beschränkt die Form oder Struktur
der Flussdatenbank 110 nicht. In alternativen Ausführungsformen
der Erfindung kann praktisch jede Form von Datenstruktur verwendet
werden (z.B. Datenbank, Tabelle, Warteschlange, Liste, Anordnung),
entweder monolithisch oder segmentiert, und kann in Hardware oder
Software ausgeführt
werden. Die gezeigte Form von FDB 110 ist nur eine Art,
nützliche Informationen
hinsichtlich Datenflüssen
durch die NIC 100 aufrechtzuerhalten. Wie der Fachmann
erkennt, erlaubt die Struktur einer CAM stets hoch effizientes und
schnelles assoziatives Suchen.
-
Im
Ausführungsbeispiel
der Erfindung erlauben die in der FDB 110 gespeicherten
Informationen und der Betrieb des Flussdatenbankmanagers (FDBM) 108 (weiter
unten beschrieben) Funktionen wie z.B. Datenwiederzusammenbau, Schubverarbeitung
von Paket-Anfangsblöcken
und andere Verbesserungen. Diese Funktionen mögen wie folgt kurz beschrieben
werden.
-
Eine
Form von Datenwiederzusammenbau umfasst den Wiederzusammenbau oder
die Kombination von Daten aus mehreren verknüpften Paketen (zum Beispiel
Paketen aus einem einzelnen Datenfluss oder einem einzelnen Datagramm).
Ein Verfahren für
die Schubverarbeitung von Paket-Anfangsblöcken bringt mit sich, Protokoll-Anfangsblöcke aus
mehreren verknüpften
Paketen durch einen Protokollstapel kollektiv statt ein Paket auf
einmal zu verarbeiten. Eine andere Beispielfunktion der NIC 100 umfasst
die Aufteilung oder Verteilung so einer Protokollstapelverarbeitung
(und/oder anderer Funktionen) auf Prozessoren in einem Mehrprozessor-Hauptrechnersystem.
Noch eine andere mögliche
Funktion der NIC 100 ist, die Übertragung von wiederzusammengesetzten
Daten an ein Zielobjekt (z.B. ein Anwendungsprogramm) in einer effizienten
Gruppierung (z.B. einer Speicherseite) zu ermöglichen, wodurch stückweise
und höchst
ineffiziente Übertragungen
der Daten eines Pakets auf einmal vermieden werden. Daher ist es
in dieser Ausführungsform
der Erfindung ein Zweck der FDB 110 und des FDBM 108,
Informationen für
den Gebrauch der NIC 100 und/oder eines Hauptcomputersystems
beim Einschalten, Ausschalten oder Durchführen einer oder mehrerer dieser Funktionen
zu erzeugen.
-
Der
assoziative Abschnitt 502 der FDB 110 in 5 speichert
den Flussschlüssel
jedes gültigen
Flusses, der für
ein von der NIC 100 bedientes Objekt bestimmt ist. Daher
enthält
in einer Ausführungsform
der Erfindung der assoziative Abschnitt 502 eine IP-Quellen-Adresse 510,
eine IP-Ziel-Adresse 512, einen TCP-Quellen-Port 514 und
einen TCP-Ziel-Port 516. Wie in früheren Abschnitten beschrieben,
können
diese Felder aus einem Paket extrahiert und dem FDBM 108 durch
den Anfangsblock-Analysator 106 geliefert werden.
-
Obwohl
jedes von der NIC 100 bediente Zielobjekt an mehreren Datenflüssen oder
durchgehenden TCP-Verbindungen teilnehmen kann, gibt es zwischen
einem bestimmten Quellenobjekt und einem bestimmten Zielobjekt nur
einen Fluss auf einmal. Daher sollte jeder Flussschlüssel im
assoziativen Abschnitt 502, der einem gültigen Fluss entspricht, gegenüber allen
anderen gültigen
Flüssen
einzigartig sein. In alternativen Ausführungsformen der Erfindung
besteht der assoziative Abschnitt 502 aus verschiedenen
Feldern, die alternative Flussschlüsselformen widerspiegeln, die
durch die vom Anfangsblock-Analysator analysierten Protokolle und
die zum Kennzeichnen von Datenflüssen
benutzten Informationen bestimmt werden können.
-
Der
assoziierte Abschnitt 504 im Ausführungsbeispiel enthält einen
Flussgültigkeitsindikator 520,
eine Flusssequenznummer 522 und einen Flussaktivitätsindikator 524.
Diese Felder liefern Informationen hinsichtlich des Flusses, der
durch den im entsprechenden Eintrag im assoziativen Abschnitt 502 gespeicherten
Flussschlüssel
gekennzeichnet ist. Die Felder des assoziierten Abschnitts 504 können durch
den FDBM 108 wiedergewonnen und/oder aktualisiert werden,
wie im folgenden Abschnitt beschrieben.
-
Der
Flussgültigkeitsindikator 520 in
dieser Ausführungsform
zeigt an, ob der zugeordnete Fluss gültig oder ungültig ist.
Erläuternd
wird der Flussgültigkeitsindikator
gesetzt, um einen gültigen
Fluss anzuzeigen, wenn das erste Paket Daten in einem Fluss empfangen
wird, und kann zurückgesetzt
werden, um jedes Mal, wenn ein Abschnitt eines Datagramms eines
Flusses (z.B. ein Paket) korrekt empfangen wird, erneut eine Gültigkeit
des Flusses festzustellen.
-
Der
Flussgültigkeitsindikator 520 kann
ungültig
markiert werden, nachdem das letzte Paket Daten in einem Fluss empfangen
worden ist. Der Flussgültigkeitsindikator
kann außerdem
gesetzt werden, um einen ungültigen
Fluss anzuzeigen, immer wenn aus irgendeinem anderen Grund als dem
Empfang eines End-Datenpakets ein Fluss abzubrechen (z.B. zu beenden
oder vorzeitig zu beenden) ist. Zum Beispiel kann es sein, dass
ein Paket nicht der Reihe nach mit anderen Paketen eines Datagramms
empfangen wird, dass ein Steuerpaket empfangen wird, das anzeigt,
dass eine Datenübertragung
oder ein Datenfluss abgebrochen wird, dass ein Versuch gemacht wird,
einen Fluss wiedereinzurichten oder neu zu synchronisieren (in welchem
Fall der ursprüngliche
Fluss beendet wird) usw. In einer Ausführungsform ist der Flussgültigkeitsindikator 520 ein Einzelbit,
Anzeiger oder Wert.
-
Die
Flusssequenznummer 522 im Ausführungsbeispiel enthält eine
Sequenznummer des nächsten Abschnitts
Daten, der in dem zugeordneten Fluss erwartet wird. Da das in einem
Fluss gesendete Datagramm typischerweise über mehrere Pakete empfangen
wird, liefert die Flusssequenznummer einen Mechanismus, um sicherzustellen,
dass die Pakete in der richtigen Reihenfolge empfangen werden. In
einer Ausführungsform der
Erfindung setzt die NIC 100 zum Beispiel Daten aus mehreren
Paketen in einem Datagramm wieder zusammen. Um diesen Wiederzusammenbau
auf die effizienteste Weise durchzuführen, müssten die Pakete der Reihe
nach empfangen werden. Daher speichert die Flusssequenznummer 522 eine
Kennung zum Kennzeichnen des nächsten
Pakets oder Datenabschnitts, das bzw. der empfangen werden sollte.
-
In
einer Ausführungsform
der Erfindung entspricht die Flusssequenznummer 522 dem
in TCP-Protokoll-Anfangsblöcken
gefundenen TCP-Sequenznummer-Feld. Wie der Fachmann erkennt, kennzeichnet
die TCP-Sequenznummer eines Pakets die Position der Daten des Pakets
relativ zu anderen in einem Datagramm gesendeten Daten. Für Paket
und Flüsse
in Verbindung mit anderen Protokollen als TCP kann ein alternatives Verfahren
verwendet werden, den Empfang von Daten in der richtigen Reihenfolge
zu verifizieren oder sicherzustellen.
-
Der
Flussaktivitätsindikator 524 im
Ausführungsbeispiel
spiegelt die Frische der Aktivität
eines Flusses oder mit anderen Worten das Alter eines Flusses wider.
In dieser Ausführungsform
der Erfindung ist der Flussaktivitätsindikator 524 mit
einem Zähler
wie z.B. einem Flussaktivitätszähler (in 5 nicht
gezeigt) verknüpft. Der
Flussaktivitätszähler wird
jedes Mal aktualisiert (z.B. hochgezählt), wenn ein Paket als Teil
eines Flusses empfangen wird, der schon in der Flussdatenbank 110 gespeichert
ist. Der aktualisierte Zählerwert
wird dann im Flussaktivitätsindikator-Feld
des Paketflusses gespeichert. Der Flussaktivitätszähler kann außerdem jedes Mal
hochgezählt
werden, wenn ein erstes Paket eines neuen Flusses empfangen wird,
der der Datenbank hinzugefügt
wird. In einer alternativen Ausführungsform
wird ein Flussaktivitätszähler nur
für Pakete
aktualisiert, die Daten enthalten (z.B. wird er für Steuerpakete
nicht aktualisiert). In noch einer alternativen Ausführungsform
werden mehrere Zähler
benutzt, um Flussaktivitätsindikatoren
von verschiedenen Flüssen
zu aktualisieren.
-
Da
nicht immer festgestellt werden kann, wann ein Datenfluss geendet
hat (z.B. kann das End-Paket verloren gegangen sein), kann der Flussaktivitätsindikator
benutzt werden, um Flüsse
zu bestimmen, die obsolet sind oder die aus einem anderen Grund
abgebrochen werden sollten. Zum Beispiel, wenn die Flussdatenbank 110 voll
besetzt zu sein scheint (z.B. ist der Flussgültigkeitsindikator 520 für jede Flussnummer
gesetzt), wenn das erste Paket eines neuen Flusses empfangen wird,
kann der Fluss mit dem niedrigsten Flussaktivitätsindikator durch den neuen
Fluss ersetzt werden.
-
Im
Ausführungsbeispiel
der Erfindung kann die Größe der Felder
in der FDB 110 von einem Eintrag zum anderen verschieden
sein. Zum Beispiel sind IP-Quellen- und Zieladressen in Version
vier des Protokolls vier Bytes groß, in Version sechs aber sechzehn
Bytes groß.
In einer alternativen Ausführungsform
der Erfindung können
Einträge
für ein
bestimmtes Feld einheitlich groß sein,
wobei kleinere Einträge
nötigenfalls
aufgefüllt
werden.
-
In
einer anderen alternativen Ausführungsform
der Erfindung können
Felder innerhalb der FDB 110 zusammengelegt werden. Insbesondere
kann der Flussschlüssel
eines Flusses als ein einzelnes Objekt oder Feld gespeichert werden,
statt als eine Anzahl von getrennten Feldern gespeichert zu werden,
wie in 5 gezeigt. Ähnlich sind der Flussgültigkeitsindikator 520,
die Flusssequenznummer 522 und der Flussaktivitätsindikator 524 in 5 als
getrennte Einträge
gezeigt. In einer alternativen Ausführungsform der Erfindung können jedoch
ein oder mehrere dieser Einträge
kombiniert werden. Insbesondere weisen in einer alternativen Ausführungsform
der Flussgültigkeitsindikator 520 und
der Flussaktivitätsindikator 524 einen
einzelnen Eintrag mit einem ersten Wert (z.B. null) auf, wenn der
dem Fluss zugeordnete Eintrag ungültig ist. Solange der Fluss gültig ist,
wird der kombinierte Eintrag jedoch hochgezählt, wenn Pakete empfan gen
werden, und bei Beendigung des Flusses auf den ersten Wert zurückgesetzt.
-
In
einer Ausführungsform
der Erfindung enthält
die FDB 110 maximal vierundsechzig, durch die Flussnummer 506 indexierte
Einträge,
wodurch die Datenbank vierundsechzig gültige Flüsse auf einmal verfolgen kann.
In alternativen Ausführungsformen
der Erfindung können
mehr oder weniger Einträge
zugelassen werden, je nach der Größe des der Flussdatenbank 110 zugewiesenen
Speichers. Außer
durch die Flussnummer 506 kann ein Fluss durch seinen (im
assoziativen Abschnitt 502 gespeicherten) Flussschlüssel kennzeichenbar
sein.
-
Im
Ausführungsbeispiel
der Erfindung ist die Flussdatenbank 110 leer (z.B. sind
alle Felder mit Nullen gefüllt),
wenn die NIC 100 initialisiert wird. Wenn das erste Paket
eines Flusses empfangen wird, analysiert der Anfangsblock-Analysator 106 einen
Anfangsblock-Abschnitt des Pakets. Wie in einem früheren Abschnitt
beschrieben, setzt der Anfangsblock-Analysator einen Flussschlüssel zum
Kennzeichnen des Flusses zusammen und extrahiert weitere Informationen
hinsichtlich des Pakets und/oder des Flusses. Der Flussschlüssel und
weitere Informationen werden an den Flussdatenbankmanager 108 weitergegeben.
Der FDBM 108 durchsucht dann die FDB 110 nach
einem dem Flussschlüssel
zugeordneten aktiven Fluss. Da die Datenbank leer ist, gibt es keine Übereinstimmung.
-
In
diesem Beispiel wird der Flussschlüssel daher gespeichert (z.B.
als Fluss Nummer null), indem die IP-Quellen-Adresse, die IP-Ziel-Adresse,
der TCP-Quellen-Port und der TCP-Ziel-Port in die entsprechenden Felder
kopiert werden. Der Flussgültigkeitsindikator 520 wird
dann gesetzt, um einen gültigen
Fluss anzuzeigen, die Flusssequenznummer 522 wird aus der
TCP-Sequenznummer (erläuternd
vom Anfangsblock-Analysator geliefert) gewonnen und der Flussaktivitätsindikator 524 wird
auf einen Anfangswert (z.B. eins) gesetzt, der aus einem Zähler gewonnen
werden kann. Ein Verfahren zum Erzeugen einer geeigneten Flusssequenznummer,
das benutzt werden kann, um zu verifizieren, dass der nächste Abschnitt
der für
den Fluss empfangenen Daten der Reihe nach empfangen wird, ist,
die TCP-Sequenznummer und die Größe der Paketdaten zu
addieren. Je nach der Konfiguration des Pakets (z.B. ob das Bit
SYN in einem Feld Anzeiger des TCP-Anfangsblocks des Pakets gesetzt
ist) muss die Summe jedoch möglicherweise
angepasst werden (z.B. durch Addieren von eins), um den nächsten erwarteten
Abschnitt von Daten korrekt zu kennzeichnen.
-
Wie
oben beschrieben, ist ein Verfahren zum Erzeugen eines geeigneten
Anfangswertes für
einen Flussaktivitätsindikator,
einen Zählerwert
zu kopieren, der für
jedes als Teil eines Flusses empfangene Paket hochgezählt wird.
Zum Beispiel für
das erste Paket, das nach Initialisierung der VIC 100 empfangen
wird, kann ein Flussaktivitätszähler auf
den Wert eins hochgezählt
werden. Dieser Wert kann dann im Flussaktivitätsindikator 542 für den zugeordneten
Fluss gespeichert werden. Das nächste
als Teil desselben (oder eines neuen) Flusses empfangene Paket bewirkt,
dass der Zähler
auf zwei hochgezählt
wird, welcher Wert im Flussaktivitätsindikator für den zugeordneten
Fluss gespeichert wird. In diesem Beispiel sollten keine zwei Flüsse denselben
Flussaktivitätsindikator
aufweisen, außer
bei Initialisierung, wenn sie alle null oder ein anderer vorbestimmter
Wert sein können.
-
Nach
Empfang und Analyse eines späteren
an der NIC 100 empfangenen Pakets wird die Flussdatenbank
nach einem gültigen
Fluss durchsucht, der zu dem Flussschlüssel des Pakets passt. Erläuternd wird
nur nach den Flussschlüsseln
von aktiven Flüssen
gesucht (z.B. denjenigen Flüssen,
für die
der Flussgültigkeitsindikator 520 gesetzt
ist). Alternativ kann nach allen Flussschlüsseln gesucht werden (z.B.
allen Einträgen
im assoziativen Abschnitt 502), jedoch wird eine Übereinstimmung
nur berichtet, wenn ihr Flussgültigkeitsindikator
einen gültigen
Fluss anzeigt. Mit einer CAM wie der in 5 gezeigten
FDB 110 kann parallel nach Flussschlüsseln und Flussgültigkeitsindikatoren
gesucht werden.
-
Wenn
ein späteres
Paket den nächsten
Abschnitt Daten für
einen früheren
Fluss (z.B. Fluss Nummer null) enthält, wird dieser Fluss geeignet
aktualisiert. In einer Ausführungsform
der Erfindung bringt dies mit sich, die Flusssequenznummer 522 zu
aktualisieren und den Flussaktivitätsindikator 524 hochzuzählen, um ihre
neueste Aktivität
widerzuspiegeln. Der Flussgültigkeitsindikator 520 kann
ebenfalls gesetzt werden, um die Gültigkeit des Flusses anzuzeigen,
obwohl er bereits anzeigen sollte, dass der Fluss gültig ist.
-
Werden
neue Flüsse
bestimmt, werden sie der FDB 110 auf ähnliche Weise wie der erste
Fluss hinzugefügt.
Wird ein Fluss beendet oder abgebrochen, wird der zugeordnete Eintrag
in der FDB 110 ungültig
gemacht. In einer Ausführungsform
der Erfindung wird der Flussgültigkeitsindikator 520 nur
für den
beendeten Fluss gelöscht
(z.B. auf null gesetzt). In einer anderen Ausführungsform werden ein oder
mehrere Felder eines beendeten Flusses gelöscht oder auf einen beliebigen
oder vorbestimmten Wert gesetzt. Wegen der stoßweisen Natur von Netzpaketverkehr
werden alle oder die meisten Daten aus einem Datagramm im Allgemeinen in
einer kurzen Zeitspanne empfangen. Daher muss jeder gültige Fluss
in der FDB 100 normalerweise nur eine kurze Zeit lang aufrechterhalten
werden, und sein Eintrag kann dann benutzt werden, um einen anderen
Fluss zu speichern.
-
Aufgrund
der begrenzten Menge Speicher, die in einer Ausführungsform der Erfindung für die Flussdatenbank 110 zur
Verfügung
steht, kann die Größe jedes
Feldes begrenzt sein. In dieser Ausführungsform werden der IP-Quellen-Adresse 510 sechzehn
Bytes zugewiesen und werden der IP-Ziel-Adresse 512 sechzehn
Bytes zugewiesen. Für
weniger als sechzehn Bytes lange IP-Adressen kann der zusätzliche
Platz mit Nullen aufgefüllt
werden. Weiterhin werden dem TCP-Quellen-Port 514 und dem
TCP-Ziel-Port 516 jeweils zwei
Bytes zugewiesen. Außerdem
weist in dieser Ausführungsform
der Flussgültigkeitsindikator 520 ein
Bit auf, der Flusssequenznummer 522 sind vier Bytes zugewiesen
und dem Flussaktivitätsindikator 524 sind ebenfalls
vier Bytes zugewiesen.
-
Wie
der Fachmann aus den oben beschriebenen Ausführungsformen erkennt, ist ein
Fluss einer durchgehenden TCP-Verbindung ähnlich, aber nicht damit identisch.
Eine TCP-Verbindung kann für
eine relativ lange Zeitspanne bestehen, die ausreicht, um mehrere
Datagramme von einem Quellenobjekt an ein Zielobjekt zu übertragen.
Einen Fluss kann es jedoch nur für
ein Datagramm geben. Daher können
während
einer durchgehenden TCP-Verbindung mehrere Flüsse eingerichtet und abgebrochen
werden (z.B. einmal für
jedes Datagramm). Wie oben beschrieben, kann ein Fluss eingerichtet
(z.B. der FDB 110 hinzugefügt und gültig markiert) werden, wenn
die NIC 100 den ersten Abschnitt Daten in einem Datagramm
nachweist, und kann abgebrochen (z.B. in der FDB 110 ungültig markiert)
werden, wenn der letzte Abschnitt Daten empfangen wird. Erläuternd bekommt
jeder während
einer einzelnen durchgehenden TCP-Verbindung eingerichtete Fluss
denselben Flussschlüssel,
da die Adressen- und Port-Kennungen der Schicht drei und Schicht
vier, die benutzt werden, um den Flussschlüssel zu bilden, dieselben bleiben.
-
Im
Ausführungsbeispiel
bestimmt die Größe der Flussdatenbank 110 (z.B.
die Zahl der Flusseinträge) die
maximale Zahl von Flüssen,
die auf einmal verschachtelt (z.B. gleichzeitig aktiv sein) sein
können,
während die
Funktionen Datenwiederzusammenbau und Schubverarbeitung von Protokoll-Anfangsblöcken ermöglicht werden.
Mit anderen Worten, in der in 5 gezeigten
Ausführungsform
kann die NIC 100 vierundsechzig Flüsse einrichten und Pakete aus
bis zu vierundsechzig verschiedenen Datagrammen empfangen (d.h.
vierundsechzig Flüsse
können
aktiv sein), ohne einen Fluss abzubrechen. Wäre eine maximale Zahl von Flüssen durch
die NIC 100 bekannt, könnte
die Flussdatenbank 110 auf die entsprechende Zahl von Einträgen begrenzt
werden.
-
Die
Flussdatenbank kann klein gehalten werden, da in der vorliegend
beschriebenen Ausführungsform ein
Fluss nur ein Datagramm lang dauert, und wegen der stoßweisen
Natur von Netzpaketverkehr werden die Pakete eines Datagramm im
Allgemeinen in einer kurzen Zeitspanne empfangen. Die kurze Dauer
eines Flusses wiegt eine begrenzte Zahl von Einträgen in der
Flussdatenbank auf. In einer Ausführungsform der Erfindung wird,
wenn die FDB 110 mit aktiven Flüssen gefüllt ist und ein neuer Fluss
(d.h. ein erster Abschnitt Daten in einem neuen Datagramm) gestartet
wird, der älteste
(z.B. der am wenigsten aktive) Fluss durch den neuen Fluss ersetzt.
-
In
einer alternativen Ausführungsform
der Erfindung können
Flüsse
für eine
beliebige Zahl von Datagrammen (oder ein anderes Maß von Netzverkehr)
oder für
eine spezifizierte Länge
oder einen spezifizierten Zeitraum aktiv gehalten werden. Zum Beispiel,
wenn ein Datagramm endet, kann sein Fluss in der FDB 110 "offen" gehalten werden
(d.h. nicht abgebrochen werden), wenn die Datenbank nicht voll ist
(z.B. der Eintrag des Flusses nicht für einen anderen Fluss benötigt wird).
Dieses Schema kann den effizienten Betrieb der NIC 100 noch
mehr verbessern, wenn ein anderes Datagramm mit demselben Flussschlüssel empfangen
wird. Insbesondere wird der mit dem Einrichten eines anderen Flusses
verbundene Aufwand vermieden, und es kann mehr Datenwiederzusammenbau
und Schubverarbeitung (wie weiter unten beschrieben) durchgeführt werden.
Vorteilhaft kann ein Fluss in der Flussdatenbank 110 offen
gehalten werden, bis die durchgehende TCP-Verbindung endet, die
den Fluss einschließt.
-
Eine Ausführungsform
eines Flussdatenbankmanagers
-
6A bis 6E zeigen
ein Verfahren zum Betrieb eines Flussdatenbankmanagers (FDBM) wie z.B.
des Flussdatenbankmanagers 108 von 1A zum
Verwalten der Flussdatenbank (FDB) 110. Erläuternd speichert
und aktualisiert der FDBM 108 in der Flussdatenbank 110 gespeicherte
Flussinformationen und erzeugt einen Operationscode für ein von
der NIC 100 empfangenes Paket. Der FDBM 108 bricht
außerdem
einen Fluss ab (z.B. ersetzt, entfernt oder macht einen Eintrag
in der FDB 110 auf andere Weise ungültig), wenn der Fluss beendet
oder abgebrochen wird.
-
In
einer Ausführungsform
der Erfindung spiegelt der Operationscode eines Pakets die Kompatibilität des Pakets
mit vorbestimmten Kriterien zur Durchführung einer oder mehrerer Funktionen
der NIC 100 wider (z.B. Datenwiederzusammenbau, Schubverarbeitung
von Paket-Anfangsblöcken,
Lastverteilung). Mit anderen Worten, je nach dem Operationscode
eines Pakets können
andere Module der NIC 100 eine dieser Funktionen durchführen oder
nicht.
-
In
einer anderen Ausführungsform
der Erfindung zeigt ein Operationscode einen Paketstatus an. Zum Beispiel
kann ein Operationscode anzeigen, dass ein Paket: keine Daten enthält, ein
Steuerpaket ist, mehr als eine spezifizierte Datenmenge enthält, das
erste Paket eines neuen Flusses ist, das letzte Paket eines vorhandenen
Flusses ist, nicht der Reihe nach ist, einen bestimmten Anzeiger
enthält
(zum Beispiel in einem Protokoll-Anfangsblock), der nicht einen
erwarteten Wert hat (somit möglicherweise
einen außergewöhnlichen
Umstand anzeigt), usw.
-
Der
Betrieb des Flussdatenbankmanagers 108 hängt von
den vom Anfangsblock-Analysator 106 gelieferten
Paketinformationen und den aus der Flussdatenbank 110 herausgeholten
Informationen ab. Nachdem der FDBM 108 die Paketinformationen
und/oder -daten verarbeitet hat, werden Steuerinformationen (z.B.
der Operationscode des Pakets) in der Steuerwarteschlange 118 gespeichert,
und die FDB 110 kann geändert werden
(z.B. kann ein neuer Fluss eingegeben oder ein vorhandener Fluss
aktualisiert oder abgebrochen werden).
-
Unter
Bezugnahme auf 6A bis 6E ist
der Zustand 600 ein Startzustand, in dem der FDBM 108 auf
Informationen wartet, die aus einem Paket herausgeholt werden, das
von der NIC 100 aus dem Netz 102 empfangen wird.
Im Zustand 602 meldet der Anfangsblock-Analysator 106 oder
ein anderes Modul der NIC 100 dem FDBM 108 ein
neues Paket, indem er den Flussschlüssel des Pakets und einige
Steuerinformationen liefert. Empfang dieser Daten kann als Anforderung
interpretiert werden, die FDB 110 zu durchsuchen, um zu
bestimmen, ob es schon einen Fluss mit diesem Flussschlüssel gibt.
-
In
einer Ausführungsform
der Erfindung enthalten die an den FDBM 108 weitergeleiteten
Steuerinformationen eine aus einem Paket-Anfangsblock herausgeholte
Sequenznummer (z. B. eine TCP-Sequenznummer). Die Steuerinformationen
können
außerdem
den Status von bestimmten Anzeigern in den Anfangsblöcken des
Pakets anzeigen, ob das Paket Daten enthält, und wenn ja, ob die Datenmenge
eine bestimmte Größe übersteigt.
In dieser Ausführungsform
empfängt
der FDBM 108 außerdem
ein Signal No_Assist für
ein Paket, wenn der Anfangsblock-Analysator ermittelt, dass das
Paket nicht in Übereinstimmung
mit einem der vorgewählten
Protokollstapel formatiert ist (d.h. das Paket ist nicht "kompatibel"), wie in einem früheren Abschnitt erörtert. Erläuternd zeigt
das Signal No_Assist an, das eine oder mehrere Funktionen der NIC 100 (z.B.
Datenwiederzusammenbau, Schubverarbeitung, Lastausgleich) möglicherweise
nicht für
das Paket zur Verfügung
gestellt werden können.
-
Im
Zustand 604 stellt der FDBM 108 fest, ob ein Signal
No Assist für
das Paket geltend gemacht wurde. Wenn ja, geht die Prozedur zum
Zustand 668 weiter (6E).
Andernfalls durchsucht der FDBM 108 im Zustand 606 die
FDB 110 nach dem Flussschlüssel des Pakets. In einer Ausführungsform
der Erfindung wird nur nach gültigen
Flusseinträgen
in der Flussdatenbank gesucht. Wie oben erörtert, kann die Gültigkeit
eines Flusses durch einen Gültigkeitsindikator
wie z.B. den Flussgültigkeitsindikator 520 (in 5 gezeigt)
widergespiegelt werden. Wird im Zustand 608 festgestellt,
dass der Flussschlüssel
des Pakets nicht in der Datenbank gefunden worden ist oder dass
eine Übereinstimmung
gefunden wurde, aber der zugehörige
Fluss nicht gültig ist,
rückt die
Prozedur zum Zustand 646 vor (6D).
-
Wird
eine gültige Übereinstimmung
in der Flussdatenbank gefunden, wird im Zustand 610 die
Flussnummer (zum Beispiel der Flussdatenbank-Index für den übereinstimnienden
Eintrag) des übereinstimmenden Eintrags
gemeldet und werden die in der FDB 110 gespeicherten Flussinformationen
gelesen. Erläuternd
umfassen diese Informationen den Flussgültigkeitsindikator 520,
die Flusssequenznummer 522 und den Ffussaktivitätsindikator 524 (in 5 gezeigt).
-
In
Zustand 612 ermittelt der FDBM 108 aus den vom
Anfangsblock-Analysator 106 empfangenen Informationen,
ob das Paket TCP-Nutzlastdaten enthält. Wenn nicht, geht die gezeigte
Prozedur zum Zustand 638 weiter (6C);
andernfalls geht die Prozedur mit dem Zustand 614 weiter.
-
Im
Zustand 614 ermittelt der Flussdatenbankmanager, ob das
Paket einen Versuch darstellt, eine Datenverbindung oder einen Datenfluss
zurückzusetzen.
Erläuternd
kann dies ermittelt werden, indem der Status eines Bits SYN in einem
der Protokoll-Anfangsblöcke
des Pakets (z.B. einem TCP-Anfangsblock) geprüft wird. In einer Ausführungsform
der Erfindung werden der Wert eines oder mehrerer Steuer- oder Anzeigerbits
(wie z.B. des Bits SYN) dem FDBM durch den Anfangsblock-Analysator
geliefert. Wie der Fachmann erkennt, kann es sein, dass ein TCP-Objekt
versucht, einen Datenfluss oder eine Verbindung mit einem anderen
Objekt zurückzusetzen
(zum Beispiel wegen eines Problems in einem der Hauptrechner des
Objekts) und einen ersten Datenabschnitt zusammen mit der Wiederverbindungsanforderung
zu senden. Dies ist die Situation, die der Flussdatenbankmanager
im Zustand 614 wahrzunehmen versucht. Wenn das Paket Teil
eines Versuchs ist, einen Fluss oder eine Verbindung wiederzuverbinden
oder zurückzusetzen,
geht die Prozedur im Zustand 630 weiter (6C).
-
Im
Zustand 616 vergleicht der Flussdatenbankmanager 108 eine
aus einem Paket-Anfangsblock
extrahierte Sequenznummer (z.B. eine TCP-Sequenznummer) mit einer
Sequenznummer (z.B. Flusssequenznummer 522 von 5)
des nächsten
erwarteten Abschnitts Daten für
diesen Fluss. Erläuternd
sollten diese Sequenznummern korrelieren, wenn das Paket den nächsten Abschnitt
Daten des Flusses enthält.
Wenn die Sequenznummern nicht übereinstimmen,
geht die Prozedur im Zustand 628 weiter.
-
Im
Zustand 618 ermittelt der FDBM 108, ob bestimmte
aus einem oder mehreren der Protokoll-Anfangsblöcke des Pakets extrahierte
Anzeiger mit erwarteten Werten übereinstimmen.
Zum Beispiel sind in einer Ausführungsform
der Erfindung die Anzeiger URG, PSH, RST und FIN aus den TCP-Anfangsblöcken des Pakets
erwartungsgemäß frei (d.h.
gleich null). Wenn irgendwelche dieser Anzeiger gesetzt sind (z.B.
gleich eins), herrscht möglicherweise
eine außergewöhnliche
Bedingung, was es möglich
macht, dass eine oder mehrere der von der NIC 100 gebotenen
Funktionen (z.B. Datenwiederzusammenbau, Schubverarbeitung, Lastausgleich)
für dieses
Paket nicht durchgeführt
werden sollten. Solange die Anzeiger frei sind, geht die Prozedur
im Zustand 620 weiter; andernfalls geht die Prozedur im
Zustand 626 weiter.
-
Im
Zustand 620 ermittelt der Flussdatenbankmanager, ob mehr
Daten während
dieses Flusses erwartet werden. Wie oben erörtert, kann ein Fluss in der
Dauer auf ein einzelnes Datagramm begrenzt sein. Daher ermittelt
im Zustand 620 der FDBM, ob dieses Paket ein End-Abschnitt
von Daten für
dieses Datagramm des Flusses zu sein scheint. Erläuternd erfolgt
diese Ermittlung auf Basis der in dem gegenwärtigen Paket enthaltenen Datenmenge.
Wie der Fachmann erkennt, wird ein Datagramm, das mehr Daten enthält als in
einem Paket befördert
werden können, über mehrere
Pakete gesendet. Die typische Art und Weise, ein Datagramm auf mehrere
Pakete zu verbreiten, ist, so viele Daten wie möglich in jedes Paket zu setzen.
Daher ist jedes Paket außer
dem letzten gewöhnlich
gleich oder nahezu gleich groß wie
die maximale Übertragungseinheit (MTU),
die für
das Netz erlaubt ist, über
das die Pakete gesendet werden. Das letzte Paket enthält den Rest, wodurch
es gewöhnlich
kleiner ist als die MTU.
-
Daher
ist eine Art und Weise, den End-Abschnitt von Daten im Datagramm
eines Flusses zu bestimmen, die Größe jedes Pakets zu prüfen und
sie mit einer Zahl (z.B. MTU) zu vergleichen, die ein Paket erwartungsgemäß übersteigt,
außer
wenn es den letzten Datenabschnitt befördert. Es wurde oben beschrieben, dass
die Steuerinformationen durch die FDBM 108 vom Anfangsblock-Analysator 106 empfangen
werden. In diesen Informationen kann eine Anzeige der Größe der von
einem Paket beförderten
Daten enthalten sein. Insbesondere ist der Anfangsblock-Analysator 106 in
einer Ausführungsform
der Erfindung konfiguriert, die Größe jedes Datenabschnitts eines
Pakets mit einem vorgewählten
Wert zu vergleichen. In einer Ausführungsform der Erfindung ist
dieser Wert programmierbar. Dieser Wert wird im Ausführungsbeispiel
der Erfindung auf die maximale Datenmenge gesetzt, die ein Paket
befördern
kann, ohne die MTU zu übersteigen.
In einer alternativen Ausführungsform
wird der Wert auf einen Betrag etwas kleiner als die maximale Datenmenge
gesetzt, die befördert
werden kann.
-
Somit
ermittelt im Zustand 620 der Flussdatenbankmanager 108,
ob das empfangene Paket den End-Abschnitt der Daten für das Datagramm
des Flusses zu befördern
scheint. Wenn nicht, geht die Prozedur im Zustand 626 weiter.
-
Im
Zustand 622 ist herausgefunden worden, dass das Paket mit
vorgewählten
Protokollen kompatibel ist und für
eine oder mehrere von der NIC 100 gebotene Funktionen geeignet
ist. Insbesondere ist das Paket passend für eine oder mehrere der oben
erör terten
Funktionen formatiert worden. Der FDBM 108 hat ermittelt, dass
das empfangene Paket Teil eines vorhandenen Flusses ist, mit den
vorgewählten
Protokollen kompatibel ist und den nächsten Abschnitt Daten für den Fluss
enthält
(aber nicht den End-Abschnitt).
Weiterhin ist das Paket nicht Teil eines Versuchs, einen Fluss bzw.
eine Verbindung zurückzusetzen,
und wichtige Anzeiger haben ihre erwarteten Werte. Daher kann die
Flussdatenbank 110 wie folgt aktualisiert werden.
-
Der
Aktivitätsindikator
(z.B. Flussaktivitätsindikator 524 von 5)
für diesen
Fluss wird modifiziert, um die neueste Flussaktivität widerzuspiegeln.
In einer Ausführungsform
der Erfindung ist der Flussaktivitätsindikator 524 als
ein Zähler
ausgeführt
oder ist mit einem Zähler
verknüpft,
der jedes Mal hochgezählt
wird, wenn für
einen Fluss Daten empfangen werden. In einer anderen Ausführungsform
der Erfindung wird ein Aktivitätsindikator
oder Zähler
jedes Mal aktualisiert, wenn ein Paket mit einem Flussschlüsselempfangen
wird, der mit einem gültigen
Fluss übereinstimmt
(z.B. ob das Paket Daten enthält
oder nicht).
-
Im
Ausführungsbeispiel
wird, nachdem ein Flussaktivitätsindikator
oder Zähler
hochgezählt
worden ist, geprüft,
ob er null "überrollt" hat (d.h., ob er über seinen
Maximalwert hinaus hochgezählt
worden ist). Wenn ja, werden der Zähler und/oder die Flussaktivitätsindikatoren
für jeden
Eintrag in der Flussdatenbank 110 auf null gesetzt und
wird der aktuelle Flussaktivitätsindikator
noch einmal hochgezählt.
Daher bewirkt in einer Ausführungsform
der Erfindung das Überrollen
eines Flussaktivitätszählers oder
-indikators die Neuinitialisierung des Flussaktivitätsmechanismus
für die
Flussdatenbank 110. Daher wird der Zähler hochgezählt, und
die Flussaktivitätsindikatoren
werden wieder aktualisiert, wie vorher beschrieben. Der Fachmann
erkennt, dass es viele andere geeignete Verfahren geben kann, die
in einer Ausführungsform
der vorliegenden Erfindung angewandt werden können, um anzuzeigen, dass ein
Fluss kürzlicher
aktiv war als es ein anderer war.
-
Außerdem wird
im Zustand 622 die Flusssequenznummer 522 aktualisiert.
Erläuternd
wird die neue Flusssequenznummer bestimmt, indem die Größe der neu
empfangenen Daten zu der vorhandenen Flusssequenznummer addiert
wird. Je nach der Konfiguration des Pakets (z.B. den Werten in seinen
Anfangsblöcken) muss
diese Summe möglicherweise
angepasst werden. Zum Beispiel kann es sein, dass diese Summe einfach die
Gesamtmenge der so weit für
das Datagramm des Flusses empfangenen Daten anzeigt. Daher muss
möglicherweise
ein Wert (z.B. ein Byte) addiert werden, um eine Sequenznummer des
nächstens
Bytes Daten für das
Datagramm anzuzeigen. Wie der Fachmann erkennt, können an
Stelle des hier beschriebenen Schemas andere geeignete Verfahren
benutzt werden, um sicherzustellen, dass Daten der Reihe nach empfangen
werden.
-
Schließlich wird
im Zustand 622 in einer Ausführungsform der Erfindung der
Flussgültigkeitsindikator 520 gesetzt
oder zurückgesetzt,
um die Gültigkeit
des Flusses anzuzeigen.
-
Danach,
im Zustand 624, wird dem Paket ein Operationscode zugeordnet.
Im Ausführungsbeispiel
der Erfindung enthält
der Operationscode Codes, die vom Flussdatenbankmanager 108 erzeugt
und in der Steuerwarteschlange 118 gespeichert werden.
In dieser Ausführungsform
ist ein Operationscode drei Bits groß, was acht Operationscodes
berücksichtigt.
In alternativen Ausführungsformen
können
Operationscodes mannigfache andere Formen und Bereiche haben. Für das Ausführungsbeispiel
der Erfindung beschreibt Tabelle 1 jeden Operationscode in Form
der Kriterien, die zur Auswahl jedes Codes und den Verzweigungen
dieser Auswahl führen.
Zu Zwecken von Tabelle 1 umfasst das Einrichten eines Flusses, einen
Fluss in die Flussdatenbank 110 einzufügen. Das Abbrechen eines Flusses
umfasst, einen Fluss in der Flussdatenbank 110 zu entfernen
oder ungültig
zu machen. Wiederzusammenbau von Daten kann von der DMA-Maschine 120 durchgeführt werden.
-
Im
Ausführungsbeispiel
der Erfindung wird der Operationscode 4 im Zustand 624 für Pakete
im gegenwärtigen
Kontext der Prozedur ausgewählt
(z.B. kompatible Pakete, die den nächsten, aber nicht letzten
Datenabschnitt eines Flusses befördern).
Daher wird der vorhandene Fluss nicht abgebrochen, und es besteht keine
Notwendigkeit, einen neuen Fluss einzurichten. Wie oben beschrieben,
ist ein kompatibles Paket in dieser Ausführungsform ein Paket, das einem
oder mehreren der vorgewählten
Protokolle entspricht. Durch Ändern
oder Vergrößern der
vorgewählten
Protokolle kann in einer alternativen Ausführungsform der Erfindung praktisch
jedes Paket kompatibel sein.
-
Zurück zu 6A bis 6E,
endet die gezeigte Prozedur nach dem Zustand 624 im Zustand 670.
-
Im
Zustand 626 (vom Zustand 618 oder Zustand 620 her
erreicht) wird der Operationscode 3 für das Paket ausgewählt. Erläuternd zeigt
der Operationscode 3 an, dass das Paket kompatibel ist und mit einem
gültigen
Fluss übereinstimmt
(z.B. stimmt der Flussschlüssel
des Pakets mit dem Flussschlüssel
eines gültigen Flusses
in der FDB 110 überein).
Der Operationscode 3 kann außerdem
bedeuten, dass das Paket Daten enthält, keinen Versuch bildet,
einen Datenfluss bzw. eine Datenverbindung neu zu synchronisieren
oder zurückzusetzen,
und die Sequenznummer des Pakets mit der erwarteten Sequenznummer
(aus der Flussdatenbank 110) übereinstimmt. Jedoch ist entweder
ein wichtiger Anzeiger (z.B. einer der TCP-Anzeiger URG, PSH, RST oder
FIN) gesetzt (im Zustand 618 bestimmt), oder die Daten
des Pakets sind weniger als der oben (im Zustand 620) beschriebene
Schwellenwert, was anzeigt, dass diesem Paket in diesem Fluss wahrscheinlich
nicht mehr Daten folgen. Daher wird der vorhandene Fluss abgebrochen,
aber es wird kein neuer Fluss angelegt. Erläuternd kann der Fluss abgebrochen
werden, indem der Flussgültigkeitsindikator
gelöscht
wird (z.B. er auf null gesetzt wird). Nach dem Zustand 626 endet
die gezeigte Prozedur im Zustand 670.
-
Im
Zustand 628 (vom Zustand 616 her erreicht) wird
der Operationscode 2 für
das Paket ausgewählt. Im
vorliegenden Kontext kann der Operationscode 2 anzeigen, dass das
Paket kompatibel ist, mit einem gültigen Fluss übereinstimmt
(z.B. stimmt der Flussschlüssel
des Pakets mit dem Flussschlüssel
eines gültigen Flusses
in der FDB 110 überein),
Daten enthält
und keinen Versuch bildet, einen Datenfluss bzw. eine Datenverbindung
neu zu synchronisieren oder zurückzusetzen.
Jedoch stimmt die (im Zustand 616) aus dem Paket extrahierte
Sequenznummer nicht mit der erwarteten Sequenznummer aus der Flussdatenbank 110 überein. Dies
kann zum Beispiel geschehen, wenn ein Paket nicht der Reihe nach
empfangen wird. Daher wird der vorhandene Fluss abgebrochen, aber
es wird kein neuer Fluss eingerichtet. Erläuternd kann der Fluss abgebrochen
werden, indem der Flussgültigkeitsindikator
gelöscht
wird (z.B. er auf null gesetzt wird). Nach dem Zustand 628 endet
die gezeigte Prozedur im Zustand 670.
-
Der
Zustand 630 wird vom Zustand 614 her betreten,
wenn festgestellt wird, dass es empfangene Paket einen Versuch bildet,
einen Datenfluss oder eine Datenverbindung zurückzusetzen (z.B. ist das TCP-Bit SYN
gesetzt). Im Zustand 630 bestimmt der Flussdatenbankmanager 108,
ob erwartet wird, dass mehr Daten folgen. Wie in Verbindung mit
dem Zustand 620 erläutert,
kann diese Bestimmung auf der Basis von Steuerinformationen getroffen
werden, die durch den Flussdatenbankmanager vom Anfangsblock-Analysator
empfangen werden. Werden mehr Daten erwartet (z.B. die Datenmenge
im Paket gleicht einem oder übersteigt
einen Schwellenwert), geht die Prozedur im Zustand 634 weiter.
-
Im
Zustand 632 wird der Operationscode 2 für das Paket
ausgewählt.
Der Operationscode 2 wurde in anderem Kontext auch im Zustand 628 ausgewählt. Im
vorliegenden Kontext kann der Operationscode 2 anzeigen,
dass das Paket kompatibel ist, mit einem gültigen Fluss übereinstimmt
und Daten enthält.
Der Operationscode 2 kann in diesem Kontext auch bedeuten,
dass das Paket einen Versuch bildet, einen Datenfluss bzw. eine
Datenverbindung neu zu synchronisieren oder zurückzusetzen, dass aber nicht
mehr Daten erwartet werden, sobald der Fluss bzw. die Verbindung
zurückgesetzt
ist. Daher wird der vorhandene Fluss abgebrochen, und es wird ein
neuer Fluss eingerichtet. Erläuternd
kann der Fluss abgebrochen werden, indem der Flussgültigkeitsindikator
gelöscht
wird (z.B. er auf null gesetzt wird). Nach dem Zustand 632 endet
die gezeigte Prozedur im Zustand 670.
-
Im
Zustand 634 antwortet der Flussdatenbankmanager 108 auf
einen Versuch, einen Datenfluss bzw. eine Datenverbindung zurückzusetzen
oder neu zu synchronisieren, womit zusätzliche Daten erwartet werden. Daher
wird der vorhandene Fluss abgebrochen und wie folgt ersetzt. Der
vorhandene Fluss kann durch die im Zustand 610 wiedergewonnene
Flussnummer oder durch den Flussschlüssel des Pakets gekennzeichnet
werden. Die Flusssequenznummer (z.B. Flusssequenznummer 522 in 5)
wird auf den nächsten
erwarteten Wert gesetzt. Erläuternd
hängt dieser
Wert von der aus dem Paket (z.B. durch den Anfangsblock-Analysator 106)
wiedergewonnenen Sequenznummer (z.B. TCP-Sequenznummer) und der
im Paket enthaltenen Datenmenge ab. In einer Ausführungsform
der Erfindung werden diese zwei Werte addiert, um eine neue Flusssequenznummer
zu bestimmen. Wie vorher erörtert,
muss diese Summe möglicherweise
angepasst werden (z.B. durch Addieren von eins). Außerdem wird
im Zustand 634 der Flussgültigkeitsindikator aktualisiert
(z.B. hochgezählt).
Wie in Verbindung mit Zustand 622 erläutert, wenn der Flussgültigkeitsindikator überrollt,
werden die Aktivitätsindikatoren
für alle
Flüsse
in der Datenbank auf null gesetzt und wird der gegenwärtige Fluss wieder
hochgezählt.
Schließlich
wird der Flussgültigkeitsindikator gesetzt,
um anzuzeigen, dass der Fluss gültig
ist.
-
Im
Zustand 636 wird der Operationscode 7 für das Paket
ausgewählt.
Im vorliegenden Kontext zeigt der Operationscode 7 an,
dass das Paket kompatibel ist, mit einem gültigen Fluss übereinstimmt
und Daten enthält.
Der Operationscode 7 kann in diesem Kontext weiterhin bedeuten,
dass das Paket einen Versuch bildet, einen Datenfluss bzw. eine
Datenverbindung neu zu synchronisieren oder zurückzusetzen, und dass zusätzliche
Daten erwartet werden, sobald der Fluss bzw. die Verbindung zurückgesetzt
ist. Tatsächlich
wird daher der vorhandene Fluss abgebrochen, und es wird ein neuer
Fluss (mit demselben Flussschlüssel)
an dessen Stelle gespeichert. Nach dem Zustand 636 endet
die gezeigte Prozedur im Zustand 670.
-
Der
Zustand 638 wird nach dem Zustand 612 betreten,
wenn bestimmt wird, dass das Paket keine Daten enthält. Dies
zeigt häufig
an, dass das Paket ein Steuerpaket ist. Im Zustand 638 bestimmt
der Flussdatenbankmanager 108, ob ein oder mehrere durch
den Anfangsblock-Analysator aus dem Paket extrahierte Anzeiger mit
erwarteten oder gewünschten
Werten übereinstimmen.
Zum Beispiel müssen
in einer Ausführungsform
der Erfindung die TCP-Anzeiger URG, PSH, RST und FIN frei sein,
damit die DMA-Maschine 120 Daten aus
mehreren verknüpften
Paketen (z.B. Paketen mit identischem Flussschlüssel) wiederzusammensetzen kann.
Wie oben erörtert,
kann das TCP-Bit SYN ebenfalls geprüft werden. Im vorliegenden
Kontext (z.B. ein Paket ohne Daten) ist auch das Bit SYN erwartungsgemäß frei (z.B.
um einen Wert null zu speichern). Wenn die Anzeiger (und das Bit
SYN) ihre erwarteten Werte haben, geht die Prozedur im Zustand 624 weiter.
Wenn aber irgendwelche dieser Anzeiger gesetzt sind, herrscht möglicherweise
eine außergewöhnliche
Bedingung, was es möglich
macht, dass eine oder mehrere von der NIC 100 gebotene
Funktionen (z.B. Datenwiederzusammenbau, Schubverarbeitung, Lastverteilung)
für dieses
Paket ungeeignet sind, in welchem Fall die Prozedur zum Zustand 640 weitergeht.
-
Im
Zustand 640 wird der Operationscode 1 für das Paket ausgewählt. Erläuternd zeigt
der Operationscode 1 an, dass das Paket kompatibel ist und mit einem
gültigen
Fluss übereinstimmt,
aber keinerlei Daten enthält
und ein oder mehrere wichtige Anzeiger oder Bits im Anfangsblock
oder in den Anfangsblöcken
des Pakets gesetzt sind. Daher wird der vorhandene Fluss abgebrochen,
und es wird kein neuer Fluss eingerichtet. Erläuternd kann der Fluss abgebrochen
werden, indem der Flussgültigkeitsindikator gelöscht wird
(z.B. er auf null gesetzt wird). Nach dem Zustand 640 endet
die gezeigte Prozedur im Zustand 670.
-
Im
Zustand 642 wird der Flussaktivitätsindikator aktualisiert (z.B.
hochgezählt),
obwohl das Paket keine Daten enthält. Wie oben in Verbindung
mit Zustand 622 beschrieben, wenn der Flussgültigkeitsindikator überrollt,
werden in einer vorliegenden Ausführungsform der Erfindung alle
Flussaktivitätsindikatoren
in der Datenbank auf null gesetzt und wird der aktuelle Fluss wieder
hochgezählt.
Der Gültigkeitsindikator
des Flusses kann ebenfalls zurückgesetzt
werden, wie auch die Sequenznummer des Flusses.
-
Im
Zustand 644 wird der Operationscode 0 für das Paket ausgewählt. Erläuternd zeigt
der Operationscode 0 an, dass das Paket kompatibel ist, mit einem
gültigen
Fluss übereinstimmt
und dass das Paket keinerlei Daten enthält. Das Paket kann zum Beispiel
ein Steuerpaket sein. Der Operationscode 0 zeigt weiterhin an, dass
keiner der vom Anfangsblock-Analysator 106 geprüften und
oben beschriebenen Anzeiger (z.B. URG, PSH, RST und FIN) gesetzt
ist. Daher wird der vorhandene Fluss nicht abgebrochen, und es wird
kein neuer Fluss eingerichtet. Nach dem Zustand 644 endet
die gezeigte Prozedur im Zustand 670.
-
Der
Zustand 646 wird vom Zustand 608 her betreten,
wenn der Flussschlüssel
des Pakets mit keinem der Flussschlüssel von gültigen Flüssen in der Flussdatenbank übereinstimmt.
Im Zustand 646 bestimmt der FDBM 108, ob die Flussdatenbank 110 voll
ist, und kann eine Anzeige speichern, ob die Datenbank voll ist.
In einer Ausführungsform
der Erfindung wird die Flussdatenbank als voll angesehen, wenn der
Gültigkeitsindikator
(z.B. der Flussgültigkeitsindikator 520 von 5)
für jede
Flussnummer (z.B. für
jeden Fluss in der Datenbank) gesetzt ist. Wenn die Datenbank voll
ist, geht die Prozedur im Zustand 650 weiter, anderenfalls
geht sie im Zustand 648 weiter.
-
Im
Zustand 648 wird die niedrigste Flussnummer eines ungültigen Flusses
(z.B. eines Flusses, für
den der zugeordnete Flussgültigkeitsindikator
gleich null ist) bestimmt. Erläuternd
ist diese Flussnummer, wo ein neuer Fluss gespeichert wird, wenn
das empfangene Paket zur Erzeugung eines neuen Flusses ermächtigt. Nach
dem Zustand 648 geht die Prozedur im Zustand 652 weiter.
-
Im
Zustand 650 wird die Flussnummer des am wenigsten aktiven
Flusses bestimmt.
-
Wie
oben erörtert,
wird im Ausführungsbeispiel
der Erfindung ein Flussaktivitätsindikator
(z.B. der Flussaktivitätsindikator 524 von 5)
jedes Mal aktualisiert (z.B. hochgezählt), wenn für einen
Fluss Daten empfangen werden. Daher kann in dieser Ausführungsform
der am wenigsten kürzlich
aktive Fluss als der Fluss bestimmt werden, der den am wenigsten
kürzlich
aktualisierten (z.B. niedrigsten) Flussaktivitätsindikator aufweist. Erläuternd,
wenn mehrere Flüsse
Flussaktivitätsindikatoren
aufweisen, die auf einen gemeinsamen Wert (z.B. null) gesetzt sind,
kann nach zufälligen
oder anderen Kriterien eine Flussnummer von ihnen gewählt werden.
Nach dem Zustand 650 geht die Prozedur im Zustand 652 weiter.
-
Im
Zustand 652 bestimmt der Flussdatenbankmanager 108,
ob das Paket Daten enthält.
Erläuternd zeigen
die vom Anfangsblock-Analysator an den FDBM 108 gelieferten
Steuerinformationen an, ob das Paket Daten aufweist. Wenn das Paket
keine Daten enthält
(z.B. das Paket ist ein Steuerpaket), geht die gezeigte Prozedur
im Zustand 668 weiter.
-
Im
Zustand 654 bestimmt der Flussdatenbankmanager 108,
ob die mit dem gegenwärtigen
Paket empfangenen Daten den End-Abschnitt von Daten für das zugehörige Datagramm
bzw. den zugehörigen
Fluss zu enthalten scheinen. Wie in Verbindung mit dem Zustand 620 erläutert, kann
diese Bestimmung auf der Basis der in dem Paket enthaltenen Datenmenge
getroffen werden. Wenn die Datenmenge kleiner als ein Schwellenwert
ist (im Ausführungsbeispiel
ein programmierbarer Wert), werden nicht mehr Daten erwartet, und
dies sind wahrscheinlich die einzigen Daten für diesen Fluss. In diesem Fall
geht die Prozedur im Zustand 668 weiter. Wenn jedoch die
Daten den Schwellenwert treffen oder übersteigen, in welchem Fall
mehr Daten erwartet werden, geht die Prozedur zum Zustand 656 weiter.
-
Im
Zustand 656 werden die Werte von bestimmten Anzeigern geprüft, Diese
Anzeiger können
zum Beispiel die Bits URG, PSH, RST, FIN eines TCP-Anfangsblocks
umfassen. Wenn irgendwelche der geprüften Anzeiger nicht ihre erwarteten
oder gewünschten
Werte haben (z.B. wenn irgendwelche der Anzeiger gesetzt sind),
kann eine außergewöhnliche
Bedingung herrschen, was eine oder mehrere von der NIC 100 gebotene Funktionen
(z.B. Datenwiederzusammenbau, Schubverarbeitung, Lastverteilung)
für dieses
Paket ungeeignet macht. In diesem Fall geht die Prozedur im Zustand 668 weiter;
andernfalls geht die Prozedur zum Zustand 658 weiter.
-
Im
Zustand 658 gewinnt der Flussdatenbankmanager die im Zustand 646 gespeicherten
Informationen hinsichtlich dessen, ob die Flussdatenbank 110 voll
ist, wieder. Wenn die Datenbank voll ist, geht die Prozedur im Zustand 664 weiter;
andernfalls geht die Prozedur im Zustand 660 weiter.
-
Im
Zustand 660 wird der Flussdatenbank 110 ein neuer
Fluss für
das gegenwärtige
Paket hinzugefügt. Erläuternd wird
der neue Fluss auf der im Zustand 648 bestimmten oder wiedergewonnenen
Flussnummer gespeichert. Die Hinzufügung eines neuen Flusses kann
umfassen, eine Sequenznummer (z.B. Flusssequenznummer 522 von 5)
zu setzen. Die Flusssequenznummer 522 kann erzeugt werden,
indem eine aus dem Paket wiedergewonnene Sequenznummer (z.B. TCP-Sequenznummer)
und die im Paket enthaltene Datenmenge addiert werden. Wie oben
erörtert,
muss diese Summe möglicherweise
angepasst werden (z.B. durch Addieren von eins).
-
Das
Speichern eines neuen Flusses kann außerdem umfassen, einen Aktivitätsindikator
(z.B. Flussaktivitätsindikator 524 von 5)
zu initialisieren. In einer Ausführungsform
der Erfindung umfasst diese Initialisierung, einen Wert zu speichern,
der aus einem Zähler
wiedergewonnen wird, der jedes Mal hochgezählt wird, wenn für einen
Fluss Daten empfangen werden. Erläuternd, wenn der Zähler oder
ein Flussaktivitätsindikator über seinen
maximalen speicherbaren Wert hinaus hochgezählt wird, werden der Zähler und
alle Flussaktivitätsindikatoren
gelöscht
oder zurückgesetzt.
Außerdem
wird im Zustand 660 ein Gültigkeitsindikator (z.B. der
Flussgültigkeitsindikator 520 von 5)
gesetzt, um anzuzeigen, dass der Fluss gültig ist. Schließlich wird der
Flussschlüssel
des Pakets ebenfalls in der Flussdatenbank gespeichert, in dem der
zugeordneten Flussnummer entsprechenden Eintrag.
-
Im
Zustand 662 wird der Operationscode 6 für das Paket ausgewählt. Erläuternd zeigt
der Operationscode 6 an, dass das Paket kompatibel ist, mit keinerlei
gültigen
Flüssen übereinstimmt
und den ersten Abschnitt Daten für
einen neuen Fluss enthält.
Weiterhin haben die Anzeiger des Pakets ihre erwarteten oder notwendigen
Werte, im Fluss werden zusätzliche
Daten erwartet, und die Flussdatenbank ist nicht voll. Daher zeigt
der Operationscode 6 an, dass kein vorhandener Fluss abzubrechen
ist und dass ein neuer Fluss in der Flussdatenbank gespeichert worden
ist. Nach dem Zustand 662 endet die gezeigte Prozedur im
Zustand 670.
-
Im
Zustand 664 wird ein vorhandener Eintrag in der Flussdatenbank
ersetzt, so dass ein neuer, durch das gegenwärtige Paket gestarteter Fluss
gespeichert werden kann. Daher wird die Flussnummer des am wenigsten
kürzlich
aktiven Flusses, im Zustand 650 bestimmt, wiedergewonnen.
Dieser Fluss kann wie folgt ersetzt werden. Die Sequenznummer des
vorhandenen Flusses (z.B. Flusssequenznummer 522 von 5)
wird durch einen Wert ersetzt, der gewonnen wird, indem eine aus
dem Paket extrahierte Sequenznummer (z.B. TCP-Sequenznummer) mit
der Größe des Datenabschnitts
des Pakets kombiniert wird. Diese Summe muss möglicherweise angepasst werden
(z.B. durch Addieren von eins). Danach wird der vorhandene Flussaktivitätsindikator
(z.B. Flussaktivitätsindikator 524)
ersetzt. Zum Beispiel kann der Wert eines Flussaktivitätszählers in
den Flussaktivitätsindikator
kopiert werden, wie oben erörtert.
Der Flussgültigkeitsindikator
(z.B. Flussgültigkeitsindikator 520 von 5)
wird dann gesetzt, um anzuzeigen, dass der Fluss gültig ist.
Schließlich
wird der Flussschlüssel
des neuen Flusses gespeichert.
-
Im
Zustand 666 wird der Operationscode 7 für das Paket ausgewählt. Der
Operationscode 7 wurde auch im Zustand 636 ausgewählt. Im
vorliegenden Kontext kann der Operationscode 7 anzeigen, dass das Paket
kompatibel ist, mit dem Flussschlüssel keines gültigen Flusses übereinstimmt
und den ersten Abschnitt Daten für
einen neuen Fluss enthält.
Weiterhin haben die Anzeiger des Pakets kompatible Werte, und im
Fluss werden zusätzliche
Daten erwartet. Zuletzt zeigt der Operationscode 7 in diesem Kontext
jedoch an, dass die Flussdatenbank voll ist, so dass ein vorhandener
Fluss abgebrochen wurde und an seiner Stelle der neue Fluss gespeichert
wurde. Nach dem Zustand 666 endet die gezeigte Prozedur
im Zustand 670.
-
Im
Zustand 668 wird der Operationscode 5 für das Paket ausgewählt. Der
Zustand 668 wird von verschiedenen Zuständen her betreten, und der
Operationscode 5 stellt somit mannigfache mögliche Bedingungen oder Situationen
dar. Zum Beispiel kann der Operationscode 5 ausgewählt werden,
wenn ein Signal No Assist für
ein Paket nachgewiesen wird (im Zustand 604). Wie oben
erörtert,
kann das Signal No Assist anzeigen, dass das entsprechende Paket
nicht mit einem Satz von vorgewählten
Protokollen kompatibel ist. In dieser Ausführungsform der Erfindung sind
inkompatible Pakete ungeeignet für
eine oder mehrere der verschiedenen Funktionen der NIC 100 (z.B.
Datenwiederzusammenbau, Schubverarbeitung, Lastverteilung).
-
Der
Zustand 668 kann auch vom Zustand 652 her betreten
und der Operationscode 5 ausgewählt
werden, in welchem Fall der Code anzeigen kann, dass das empfangene
Paket mit keinen gültigen
Flussschlüsseln übereinstimmt
und weiterhin keine Daten enthält
(z.B. kann es ein Steuerpaket sein).
-
Der
Zustand 668 kann auch vom Zustand 654 her betreten
werden. In diesem Kontext kann der Operationscode 5 anzeigen, dass
das Paket mit keinen gültigen
Flussschlüsseln übereinstimmt.
Er kann weiterhin anzeigen, dass das Paket Daten enthält, dass
aber die Größe des Datenabschnitts
kleiner als der in Verbindung mit Zustand 654 erörterte Schwellenwert
ist. In diesem Kontext scheinen die Daten des Pakets vollständig zu
sein (z.B. enthält
es alle Daten für
ein Datagramm), was bedeutet, dass keine anderen Daten mit den Daten
dieses Pakets zusammenzusetzen sind und es daher keinen Grund gibt,
einen neuen Eintrag in der Datenbank für diesen Ein-Paket-Fluss vorzunehmen.
-
Schließlich kann
der Zustand 668 auch vom Zustand 656 her betreten
werden. In diesem Kontext kann der Operationscode 5 anzeigen, dass
das Paket mit keinen gültigen
Flussschlüsseln übereinstimmt,
Daten enthält
und dass mehr Daten erwartet werden, dass aber mindestens ein Anzeiger
in einem oder mehreren Protokoll-Anfangsblöcken des Pakets nicht ihre
erwarteten Werte haben. Zum Beispiel sind in einer Ausführungsform
der Erfindung die TCP-Anzeiger URG, PSH, RST und FIN erwartungsgemäß frei.
Sind irgendwelche dieser Anzeiger gesetzt, kann eine außergewöhnliche
Bedingung herrschen, was es möglich
macht, dass eine der von der NIC 100 gebotenen Funktionen
für dieses
Paket ungeeignet ist.
-
Wie
Tabelle 1 widerspiegelt, ist kein Fluss abzubrechen und ist kein
neuer Fluss einzurichten, wenn der Operationscode 5 ausgewählt wird.
Im Anschluss an den Zustand 668 endet die gezeigte Prozedur
im Zustand 670.
-
Der
Fachmann erkennt, dass die in 6A bis 6E gezeigte
und oben erörterte
Prozedur nur eine geeignete Prozedur ist, um eine Flussdatenbank
aufrechtzuerhalten und zu aktualisieren und um die Eignung eines
Pakets für
bestimmte Verarbeitungsfunktionen zu ermitteln. Insbesondere können andere
Operationscodes benutzt werden oder sie können auf eine andere Weise
ausgeführt
werden, wobei es ein Ziel ist, Informa tionen für spätere Verarbeitung des Pakets
durch die NIC 100 zu erzeugen.
-
In
der gezeigten Prozedur werden zwar allen Paketen durch einen Flussdatenbankmanager
Operationscodes zugeordnet, in einer alternativen Prozedur kann
ein durch den FDBM zugeordneter Operationscode aber durch ein anderes
Modul der NIC 100 ersetzt oder geändert werden. Dies kann geschehen,
um ein bestimmtes Verfahren sicherzustellen, bestimmte Typen von
Paketen zu behandeln. Zum Beispiel ordnet in einer Ausführungsform
der Erfindung das IPP-Modul 104 einen vorbestimmten Operationscode
(z.B. Operationscode 2 von Tabelle 1) Jumbo-Paketen zu (z.B. Paketen,
die größer als
die MTU sind), so dass die DMA-Maschine 120 sie nicht wiederzusammensetzen
wird. Insbesondere kann das IPP-Modul unabhängig ermitteln, dass das Paket
ein Jumbo-Paket ist (z.B. aus vom MAC-Modul gelieferten Informationen)
und daher den vorbestimmten Code zuordnen. Erläuternd führen der Anfangsblock-Analysator 106 und
der FDBM 108 ihre normalen Funktionen für ein Jumbo-Paket durch, und
das IPP-Modul 104 empfängt
einen ersten, durch die FDBM zugeordneten Operationscode. Jedoch
ersetzt das IPP-Modul diesen Code vor dem Speichern des Jumbo-Pakets
und Informationen hinsichtlich des Pakets. In einer alternativen
Ausführungsform
können
der Anfangsblock-Analysator 106 und/oder der Flussdatenbankmanager 108 konfiguriert
sein, einen bestimmten Typ von Paket (z.B. Jumbo) zu erkennen und
einen vorbestimmten Operationscode zuzuordnen.
-
Die
in der in 6A bis 6E gezeigten
Ausführungsform
der Erfindung angewandten Operationscodes sind in der folgenden
Tabelle 1 dargestellt und erläutert.
Tabelle 1 enthält
Beispielkriterien, die benutzt werden, um jeden Operationscode auszuwählen, und
Beispielergebnisse oder -wirkungen jedes Codes.
-
-
-
Eine Ausführungsform
eines Lastverteilers
-
In
einer Ausführungsform
der Erfindung ermöglicht
der Lastverteiler 112 die Verarbeitung von Paketen durch
ihre Protokollstapel, um auf eine Anzahl von Prozessoren verteilt
zu werden. Erläuternd
erzeugt der Lastverteiler 112 eine Kennung (z.B. eine Prozessornummer)
eines Prozessors, dem das Paket vorzulegen ist. Die mehreren Prozessoren
können
sich in einem Hauptrechnersystem befinden, das von der NIC 100 bedient wird.
In einer alternativen Ausführungsform
befinden sich ein oder mehrere Prozessoren zur Verarbeitung von Paketen
durch einen Protokollstapel in der NIC 100.
-
Ohne
ein wirksames Verfahren zum Aufteilen oder Verteilen der Verarbeitungsbelastung
könnte
ein Prozessor überlastet
werden, wenn er den ganzen oder meisten an der NIC 100 empfangenen
Netzverkehr verarbeiten müsste,
insbesondere in einer Hochgeschwindigkeitsnetz-Umgebung. Die resultierende
Verzögerung
bei der Verarbeitung von Netzverkehr könnte den Betrieb im Hauptrechnersystem
und auch anderen Computersystemen, die über das Netz mit dem Hauptsystem
kommunizieren, verschlechtern.
-
Wie
der Fachmann erkennt, ist es möglicherweise
kein wirksames Vorhaben, Pakete einfach auf Prozessoren in einem
Satz von Prozessoren zu verteilen (z.B. in einem Reihum-Schema).
So ein Vorhaben könnte leicht
in Paketen resultieren, die nicht der Reihe nach verarbeitet werden.
Zum Beispiel, würden
zwei Pakete aus einem Datenfluss oder einer Datenverbindung, die
in der richtigen Reihenfolge an einer Netzschnittstelle empfangen
werden, zwei verschiedenen Prozessoren vorgelegt, wird das zweite
Paket möglicherweise
vor dem ersten verarbeitet. Dies könnte zum Beispiel geschehen,
wenn der Prozessor, der das erste Paket empfangen hat, das Paket
nicht sofort verarbeiten könnte,
da er mit einer anderen Aufgabe beschäftigt ist. Werden Pakete nicht
der Reihe nach verarbeitet, muss im Allgemeinen ein Wiederherstellungsschema
gestartet werden, was noch mehr Ineffizienz und mehr Verzögerung einführt.
-
Daher
werden in einer vorliegenden Ausführungsform der Erfindung Pakete
auf Basis ihrer Flusskennungen auf mehrere Prozessoren verteilt.
Wie oben beschrieben, kann ein Anfangsblock-Analysator einen Flussschlüssel aus
Quellen- und Zielkennungen der Schicht drei (z.B. IP) und Schicht
vier (z.B. TCP) erzeugen, die aus den Anfangsblöcken eines Pakets wiedergewonnen
werden. Der Flussschlüssel
kann benutzt werden, um den Datenfluss zu kennzeichnen, zu dem die
Pakete gehören.
Daher werden in dieser Ausführungsform
der Erfindung alle Pakete mit identischem Flussschlüssel einem
einzelnen Prozessor vorgelegt. Solange die Pakete der Reihe nach
von der NIC 100 empfangen werden, sollten sie an den Hauptrechner
geliefert und der Reihe nach durch ihren zugeordneten Prozessor
verarbeitet werden.
-
Erläuternd werden
mehrere von einem Quellenobjekt zu einem Zielobjekt gesendete Pakete
denselben Flussschlüssel
haben, selbst wenn die Pakete Teil von getrennten Datagrammen sind,
solange ihre Kennungen der Schicht drei und Schicht vier dieselben
bleiben. Wie oben erörtert,
werden für
jedes Datagramm innerhalb einer durchgehenden TCP-Verbindung getrennte
Flüsse
eingerichtet und abgebrochen. Ebenso wie alle Pakete innerhalb eines
Flusses an einen Prozessor gesendet werden, werden daher auch alle
Pakete innerhalb einer durchgehenden TCP-Verbindung an denselben
Prozessor gesendet. Die hilft sicherzustellen, Pakete für die ganze
Verbindung korrekt anzuordnen, selbst zwischen Datagrammen.
-
Je
nach der Netzumgebung, in der die NIC 100 arbeitet (z.B.
den vom Netz 102 unterstützten Protokollen), ist der
Flussschlüssel
möglicherweise
zu groß,
um ihn als Kennung eines Prozessors zu benutzten. In einer oben
beschriebenen Ausführungsform
der Erfindung misst zum Beispiel ein Flussschlüssel 288 Bits. Indessen
kann die Zahl der am Lastausgleichsschemateilnehmenden Prozessoren
viel kleiner sein. Zum Beispiel in der unten in Verbindung mit 7 beschriebenen
Ausführungsform
der Erfindung werden maximal vierundsechzig Prozessoren unterstützt. Daher
ist in dieser Ausführungsform
nur eine Vierundsechzig-Bit-Nummer nötig, um den ausgewählten Prozessor
zu kennzeichnen. Der größere Flussschlüssel kann daher
in einen kleineren Bereich von Werten abgebildet oder Hash-codiert
werden.
-
7 zeigt
ein Verfahren zum Erzeugen einer Kennung (z.B. Prozessornummer)
zum Spezifizieren eines Prozessors zum Verarbeiten eines von der
NIC 100 empfangenen Pakets auf Basis des Flussschlüssels des
Pakets. In dieser Ausführungsform
der Erfindung ist das Netz 102 das Internet, und ein empfangenes
Paket ist in Übereinstimmung
mit einem kompatiblen Protokollstapel (z.B. Ethernet in Schicht
zwei, IP in Schicht drei und TCP in Schicht vier) formatiert.
-
Der
Zustand 700 ist ein Startzustand. Im Zustand 702 wird
ein Paket von der NIC 100 empfangen, und ein Anfangsblock-Abschnitt
des Pakets wird vom Anfangsblock-Analysator 106 analysiert
(ein Verfahren zum Analysieren eines Pakets ist in einem früheren Abschnitt
beschrieben). Im Zustand 704 empfängt der Lastverteiler 112 den
Flussschlüssels
des Pakets, der vom Anfangsblock-Analysator 106 erzeugt
wurde.
-
Da
der Flussschlüssel
eines Pakets in dieser Ausführungsform
288 Bits groß ist,
wird im Zustand 706 eine Hash-Funktion durchgeführt, um
einen Wert von geringerer Größe zu erzeugen.
Die Hash-Operation kann zum Beispiel eine Zweiunddreißig-Bit-CRC-Funktion (CRC = zyklische
Redundanzprüfung)
wie z.B. ATM(Asynchronübertragungsmodus)-Adaptionsschicht
5 (AAL5) aufweisen. Die AAL5 erzeugt Zweiunddreißig-Bit-Nummern, die ziemlich gleichmäßig auf
die 232 möglichen Werte verteilt sind.
Ein anderes geeignetes Verfahren zum Hash-Codieren ist die Standard-Ethernet-CRC-32-Funktion. Andere
Hash-Funktionen, die aus relativ großen Flussschlüsseln relativ
kleine Nummern erzeugen können,
wobei die Nummern sowohl erzeugt als auch auf einen Bereich von
Werten verteilt werden, sind ebenfalls geeignet,
-
Mit
dem resultierenden Hash-Wert wird im Zustand 708 eine Modulus-Operation über die
Anzahl der zum Verteilen oder Aufteilen der Verarbeitung zur Verfügung stehenden
Prozessoren durchgeführt.
Erläuternd programmiert
oder speichert Software, die auf dem Hauptcomputer ausgeführt wird
(z.B. ein Gerätetreiber
für die
NIC 100), die Anzahl von Prozessoren, so dass sie vom Lastverteiler 112 (z.B.
einem Register) gelesen oder wiedergewonnen werden kann. Die Anzahl
der für
Lastausgleich zur Verfügung
stehenden Prozessoren kann alle oder ein Teilsatz der Anzahl der
im Hauptrechnersystem eingebauten Prozessoren sein. Im Ausführungsbeispiel
ist die Anzahl der in einem Hauptrechnersystem zur Verfügung stehenden
Prozessoren programmierbar, mit einem Maximalwert von vierundsechzig.
Das Resultat der Modulus-Operation in dieser Ausführungsform
ist daher die Nummer des Prozessors (z.B. von null bis vierundsechzig),
dem das Paket zur Verarbeitung vorgelegt wird. In dieser Ausführungsform
der Erfindung ist der Lastverteiler 112 in Hardware ausgeführt, was
schnelle Ausführung
der Hash- und Modulus-Funktionen erlaubt. In einer alternativen
Ausführungsform
der Erfindung kann praktisch jede beliebige Anzahl von Prozessoren
untergebracht werden.
-
Im
Zustand 710 wird die Nummer des Prozessors, der das Paket
durch seinen Protokollstapel verarbeiten wird, im Speicher des Hauptrechners
gespeichert. Erläuternd
wird der Zustand 710 parallel zu dem Speichern des Pakets
in einem Hauptspeicherpuffer durchgeführt. In einer Ausführungsform
der Erfindung wird ein Beschreiberring im Speicher des Hauptrechners
eingerichtet, um die Prozessornummer und möglicherweise weitere Informationen
hinsichtlich des Pakets (z.B. Größe, TCP-Prüfsumme,
einen Zeiger auf das Paket) festzuhalten.
-
Ein
Beschreiberring in dieser Ausführungsform
ist eine Datenstruktur, die eine Anzahl von Einträgen oder "Beschreibern" zum Speichern von
Informationen zur Verwendung durch das Hauptrechnersystem der Netzschnittstellenschaltung
aufweist. Ein Beschreiben kann Paketinformationen vorübergehend
speichern, nachdem das Paket von der NIC 100 empfangen
worden ist, jedoch bevor das Paket vom Hauptrechnersystem verarbeitet
wird. Die in einem Beschreiber gespeicherten Informationen können zum
Beispiel vom Gerätetreiber
für die
NIC 100 oder zur Verarbeitung des Pakets durch seinen Protokollstapel
benutzt werden.
-
Im
Zustand 712 wird eine Unterbrechung oder Warnung an den
Hauptrechner ausgegeben; um ihn zu benachrichtigen, dass ein neues
Paket von der NIC 100 geliefert worden ist. In einer Ausführungsform
der Erfindung, in der die NIC 100 durch einen PCI-(Peripheriekomponenten)-Bus
mit dem Hauptrechner gekoppelt ist, kann das Signal INTA quer über den
Bus geltend gemacht werden. Ein PCI-Steuergerät im Hauptrechner empfängt das
Signal, und das Hauptbetriebssystem wird gewarnt (z.B. über eine
Unterbrechung).
-
Im
Zustand 714 wird auf dem Hauptrechner arbeitende Software
(z.B. ein Gerätetreiber
für die
NIC 100) aufgerufen (z.B. durch den Unterbrechungsabwickler
des Betriebssystems des Hauptrechners), um auf ein neu empfangenes
Paket einzuwirken. Die Software sammelt Informationen aus einem
oder mehreren Beschreibern im Beschreiberring und setzt Informationen,
die nötig
sind, um die Verarbeitung jedes neuen Pakets zu vollenden, in eine
Warteschlange für
den spezifizierten Prozessor (d.h. in Übereinstimmung mit der im Beschreiber
des Pakets gespeicherten Prozessornummer). Erläuternd entspricht jeder Beschreiber
einem getrennten Paket. Die in der Prozessorwarteschlange für jedes
Paket gespeicherten Informationen können einen Zeiger auf einen
Puffer, der das Paket enthält,
die TCP-Prüfsumme
des Pakets, Versätze
von einem oder mehreren Protokoll-Anfangsblöcken usw. umfassen. Außerdem kann
jeder am Lastverteilungsschemateilnehmende Prozessor eine zugeordnete
Warteschlange zur Verarbeitung von Netzpaketen aufweisen. In einer
alternativen Ausführungsform
der Erfindung können
mehrere Warteschlangen benutzt werden (z.B. für mehrere Prioritätsebenen
oder für
unterschiedliche Protokollstapel).
-
Erläuternd ist
jeder Prozessor auf dem Hauptrechner konfiguriert, alle Warnungen
und/oder Unterbrechungen zu empfangen, die mit dem Empfang von Netzpaketen
von der NIC 100 verknüpft
sind, und die geeignete Software-Routine oder den geeigneten Gerätetreiber
zu warnen. Diese Anfangsverarbeitung kann alternativ auf mehrere
Prozessoren verteilt werden. Außerdem
wird in einer Ausführungsform
der Erfindung ein Abschnitt der Wiedergewinnung und Verarbeitung
von Beschreiber-Inhalten als Teil der Abwicklung der Unterbrechung
durchgeführt,
die erzeugt wird, wenn ein neues Paket im Beschreiberring gespeichert
wird. Der zum Verarbeiten des Pakets ausgewählte Prozessor führt dann
den Rest der Wiedergewinnungs-/Verarbeitungsprozedur durch.
-
Im
Zustand 716 wird der zum Verarbeiten eines neuen Pakets
bestimmte Prozessor gewarnt oder geweckt. In einer Ausführungsform
der Erfindung, die auf einem SolarisTM-Arbeitsplatzrechner
arbeitet, sind individuelle vom Prozessor ausgeführte Prozesse als "Threads" (gekettete Programme)
konfiguriert. Ein Thread ist ein Prozess, der in einer Normalbetriebsart
abläuft
(z.B. nicht auf einer Unterbrechungsebene), um minimale Auswirkung
auf andere auf dem Arbeitsplatzrechner ausgeführte Prozesse zu haben. Ein
Normalbetriebsart-Prozess kann jedoch mit hoher Priorität ausgeführt werden.
Alternativ kann ein Thread auf einer relativ niedrigen Unterbrechungsebene
ablaufen.
-
Ein
für Verarbeitung
eines ankommenden Pakets verantwortlicher Thread kann sich selbst
blockieren, wenn er keine Pakete zu verarbeiten hat, und wird geweckt,
wenn er Arbeit bekommt. Um anzuzeigen, ob der Thread ein Paket zu
verarbeiten hat, kann eine "Bedingungsvariable" benutzt werden.
Erläuternd
wird die Bedingungsvariable auf einen ersten Wert gesetzt, wenn
der Thread ein Paket verarbeiten soll (z.B. wenn ein Paket zur Verarbeitung
durch den Prozessor empfangen wird), und wird auf einen zweiten
Wert gesetzt, wenn keine Pakete mehr zu verarbeiten sind. Im Ausführungsbeispiel
der Erfindung kann jeder Prozessorwarteschlange eine Bedingungsvariable
zugeordnet sein.
-
In
einer alternativen Ausführungsform
wird der angezeigte Prozessor im Zustand 716 durch einen "Querprozessorruf" gewarnt. Ein Querprozessorruf
ist eine Art, zwischen Prozessoren zu kommunizieren, wodurch ein
Prozessor durch einen anderen Prozessor fernunterbrochen wird. Anstelle
von Threads und Querprozessorrufen können auch andere Verfahren
benutzt werden, durch die ein Prozessor einen anderen Prozessor
warnt oder ihm einen Prozess schickt.
-
Im
Zustand 718 beginnt ein Thread oder anderer Prozess im
ausgewählten
Prozessor mit der Verarbeitung des Pakets, das in der Warteschlange
des Prozessors gespeichert wurde. Die gezeigte Prozedur endet dann
mit dem Endzustand 720.
-
In
einer alternativen Ausführungsform
der Erfindung ist eine Hochgeschwindigkeits-Netzschnittstelle konfiguriert, ATM(Asynchronübertragungsmodus)-Verkehr
zu verarbeiten. In dieser Ausführungsform
ist ein Lastverteiler als ein Satz von Befehlen (z.B. als Software)
statt als ein Hardware-Modul ausgeführt. ATM-Verkehr kann als verbindungsorientiert
charakterisiert werden und kann durch eine virtuelle Verbindungskennung (VCI)
gekennzeichnet werden, die einer zwischen den Quellen- und Zielobjekten
des Pakets hergestellten virtuellen Schaltung entspricht. Jedes
Paket, das Teil einer virtuellen Schaltung ist, enthält die VCI
in seinem Anfangsblock.
-
Vorteilhaft
hat eine VCI eine relativ geringe Größe (z.B. sechzehn Bits). In
dieser alternativen Ausführungsform
kann daher die VCI eines Pakets anstelle eines Flussschlüssels zu
dem Zweck benutzt werden, die Last der Verarbeitung von Paketen
durch ihre Protokollstapel zu verteilen oder aufzuteilen. Erläuternd wird
Verkehr von unterschiedlichen VCIs an unterschiedliche Prozessoren
gesendet, um aber das korrekte Anordnen von Paketen sicherzustellen,
können
alle Pakete mit derselben VCI an denselben Prozessor gesendet werden. Wird
ein ATM-Paket an einer Netzschnittstelle empfangen, wird die VCI
aus seinem Anfangsblock wiedergewonnen und an den Lastverteiler
geliefert. Danach wird der Modulus der VCI über die Anzahl von Prozessoren berechnet,
die für
Lastverteilung zur Verfügung
stehen. Ähnlich
wie im Ausführungsbeispiel
werden das Paket und die Nummer seines zugeordneten Prozessor dann
an den Hauptrechner geliefert.
-
Wie
oben beschrieben, wird in einer vorliegenden Ausführungsform
der Erfindung Lastverteilung auf Basis der Quellen- und Zielobjekt-Kennungen
der Schicht drei und/oder Schicht vier eines Pakets durchgeführt. In
einer alternativen Ausführungsform
der Erfindung kann die Lastverteilung jedoch auf Basis von Adressen
der Schicht zwei durchgeführt
werden. In dieser alternativen Ausführungsform werden Pakete mit
zum Beispiel denselben Ethernet-Quellen- und Zieladressen an einen
einzelnen Prozessor gesendet.
-
Dies
kann jedoch dazu führen,
dass ein Prozessor mehr Pakete empfängt als er emp fangen würde, wenn
Kennungen der Schicht drei und/oder Schicht vier benutzt würden. Zum
Beispiel, wenn eine große
Menge Verkehr über
einen Router empfangen wird, der (in logischem Sinne) nahe am Hauptrechner
liegt, kann es sein, dass die Quellen-Ethernet-Adresse für den ganzen Verkehr die Adresse
des Routers ist, obwohl der Verkehr von einer Menge verschiedener
Endnutzer und/oder Computer herrührt.
Im Gegensatz dazu, wenn der Hauptrechner an demselben Ethernet-Segment
wie alle Endnutzer bzw. Computer ist, werden die Quellenadressen
der Schicht zwei größere Vielfalt
zeigen und effizientere Lastverteilung ermöglichen.
-
Andere
Verfahren zum Verteilen der Verarbeitung von aus einem Netz empfangenen
Paketen können sich
von der in 7 gezeigten Ausführungsform
unterscheiden, ohne den Schutzbereich der Erfindung zu überschreiten.
Die PCT-Veröffentlichung
WO 00/52904, veröffentlicht
am 8. September 2000, liefert zusätzliche Details einer Netzschnittstelle,
bei der eine Ausführungsform
der Erfindung in die Praxis umgesetzt werden kann.
-
Sun,
Sun Microsystems, SPARC und Solaris sind Marken oder eingetragene
Marken der Fa. Sun Microsystems in den Vereinigten Saaten und anderen
Ländern.
-
Die
vorhergehenden Beschreibungen von Ausführungsformen der Erfindung
wurden nur zu Zwecken der Darstellung und Beschreibung gegeben.
Sie sollen nicht erschöpfend
sein oder die Erfindung auf die offenbarten Formen beschränken. Dementsprechend
soll die obige Offenbarung die Erfindung nicht beschränken; der
Schutzbereich der Erfindung wird durch die beigefügten Ansprüche definiert.