Wie hört, zieht oder drückt ein Port?

9

Was passiert unter der Haube, wenn Sie einen Code zum Abhören von einem Port aus schreiben, z. B. 80? Ist die Methode, mit der das Betriebssystem zuhört, Pull oder Push? Mit anderen Worten, überprüft das Betriebssystem diesen Port beispielsweise alle x Millisekunden?

Ich verstehe es einfach nicht. Je mehr ich darüber nachdenke, desto mehr scheint es mir, dass es nichts anderes als Ziehen sein kann.

Ich meine, selbst wenn das Betriebssystem eine Rückruffunktion eingestellt hat, sollte dennoch etwas verstehen, dass neue Informationen eingetroffen sind, um diese Rückruffunktion aufzurufen. Dass etwas noch Pull verwenden sollte, um das Eintreffen der neuen Daten zu verstehen.

Wie hört ein Port zu?

Saeed Neamati
quelle

Antworten:

14

Theoretisch hängt dies von den Besonderheiten des Betriebssystems und der Netzwerkhardware ab. In der Praxis verwenden Mainstream-Betriebssysteme und -Hardware ein Push-Modell, das auf Interrupts für die Interaktion zwischen der Hardware und dem Betriebssystem (und der gesamten vom Betriebssystem gesteuerten Software) basiert .

Grundsätzlich ist ein Interrupt ein sehr, sehr niedriger Mechanismus, durch den periphere Hardware der CPU signalisieren kann, dass ein Ereignis behandelt werden muss (z. B. ein Netzwerkpaket angekommen, eine Taste gedrückt usw.). Die CPU reagiert darauf, indem sie alles unterbricht, was sie zu diesem Zeitpunkt tat, und stattdessen einen Interrupt-Handler ausführt.

Die Interrupt-Behandlung wird normalerweise vom Betriebssystem durchgeführt oder zumindest vom Betriebssystem gestartet und an einen spezifischeren Anwendungscode übergeben, der als an einem bestimmten Ereignistyp interessiert registriert wurde.

Michael Borgwardt
quelle
Sie meinen, der Port ist eine Peripherie-Hardware, die bei Ankunft eines neuen Netzwerkpakets einen Interrupt an die CPU sendet. OK, aber wie versteht der Port , dass ein neues Netzwerkpaket angekommen ist? Durchziehmechanismus? oder durch Strom? Wie?
Saeed Neamati
1
Die Netzwerkkarte ist die Peripherie-Hardware. Ein Port ist lediglich ein Softwarekonstrukt des TCP / IP-Protokolls. Das Betriebssystem reagiert auf den Hardware-Interrupt und ruft den TCP / IP-Stack auf, der über eine Registrierung verfügt, deren Port Anwendungen überwacht. Wenn kein Listener registriert ist, wird das Paket ignoriert oder eine Fehlerantwort gesendet. Wenn es einen Listener gibt, wird er aufgerufen.
Michael Borgwardt
Es tut mir leid, der Kette genau zu folgen, :). Aber wie die Netzwerkkarte versteht, dass ein neues Paket angekommen ist. Ich versuche nur herauszufinden, ob das ursprüngliche Gerät in dieser Kette (Anwendung, Betriebssystem, Hardware, Netzwerkkabel) Pull oder Push verwendet. Danke, dass du bei mir bleibst, Kumpel. :)
Saeed Neamati
1
@Saeed: Ich bin mir nicht sicher, ob die Unterscheidung "Pull vs. Push" auf Hardwareebene Sinn macht. Und es kommt auf die Details der Netzwerktechnologie an. Beispielsweise muss die Firmware einer Ethernet- oder WiFi-Karte den gesamten WiFi-Verkehr kontinuierlich überwachen, bis sie ein Paket erkennt, dessen Ziel-MAC-Adresse mit ihrer eigenen übereinstimmt, und an diesem Punkt einen Interrupt sendet. Ich würde das allerdings nicht "Pull" nennen, da die Karte nur passiv zuhört. Netzwerkhardware, die auf Punkt-zu-Punkt-Verbindungen basiert, funktioniert jedoch möglicherweise völlig anders.
Michael Borgwardt
1
"Aber wie versteht die Netzwerkkarte, dass ein neues Paket eingetroffen ist"? Stromspannung. Ernsthaft. Ein Signal kommt entweder über Funk oder über ein Kabel an. Die Spannung signalisiert die Aktivität, die die Karte als Bits decodiert. Es unterbricht die CPU, um anzuzeigen, dass Bits angekommen sind.
S.Lott
8

OK, ich bin kein Ethernet-Hardware-Ingenieur, aber ich denke, ich kann Ihre Frage beantworten. Wenn Sie Code schreiben, um von einem Port abzuhören, geschieht Folgendes:

  • Ihr Anwendungscode blockiert / sleeps / "selects" / polls, bis das Betriebssystem signalisiert, dass ein Paket angekommen ist (mit einigen Bits im IP-Header, die anzeigen, dass das Paket diesem bestimmten "Port" und damit Ihrer Anwendung zugeordnet ist, die es abhört dieser Port)
  • Das Betriebssystem fragt normalerweise nicht (in x86 / PC-Architekturen) nach neuen Paketen ab, sondern läuft nur fröhlich weiter, bis es einen Interrupt von der Ethernet-Netzwerkhardware empfängt (die vom Ethernet-Netzwerktreiber, der OS / Hardware-Schnittstelle, weitergeleitet wird).
  • Die Ethernet-Netzwerkhardware selbst enthält normalerweise einen Ethernet-Controller und einige "Empfangspuffer", auch "Paketpuffer" genannt. Der Ethernet-Netzwerktreiber verwaltet die Details der Benachrichtigung, dass ein Puffer voll ist, und das Betriebssystem sollte benachrichtigt werden. Ich bin mir nicht ganz sicher, ob dies normalerweise Push oder Pull innerhalb der Ethernet-Hardware ist, aber ich vermute, dass es Interrupt-gesteuert ist oder dass ein Register auf dem Chip gesetzt wird, wenn ein Puffer bereit ist. Aber was setzt die Puffer?
  • Ein noch niedrigerer Teil der Ethernet-Hardware füllt die Puffer (oder DMA-Pakete direkt in den Hauptspeicher). Eine Logik mit sehr niedrigem Pegel erkennt tatsächlich die Spannungsschwankungen (oder die optische Signalisierung) und übersetzt diese als "Bits" und platziert die Ergebnisse in den Paketempfangspuffern (und legt möglicherweise Registerwerte innerhalb der Ethernet-Hardware fest). (Nebenbemerkung: Zurück vor Netzwerkschnittstellenkarten, wenn Benutzer serielle / parallele Anschlussverbindungen verwendeten, konnte ein einzelnes Byte einen Hardware-Interrupt (IRQ) zum Betriebssystem erzeugen. Siehe Abschnitt 4 von http://zone.ni.com/devzone / cda / tut / p / id / 4052 )
  • Woher weiß diese Hardware der niedrigsten Ebene, was ein "Bit" ausmacht? Nun, Ethernet , zumindest die meisten älteren / gängigen, verwenden Manchester Coding Spannungsschwankungen als Bits zu dekodieren. Was bedeutet das? Nun, wie auf dieser Seite erwähnt, gibt es eine zugrunde liegende Annahme, dass jedes Bit in einer festen Zeit übertragen wird, einem impliziten Taktsignal. (Aus diesem Grund sind die Ethernet-Geschwindigkeiten in den Standards entweder auf 10 MBit / s, 100 MBit / s, 1000 MBit / s usw. festgelegt und nicht vollständig variabel. Beide Seiten der Ethernet-Verbindung müssen der Übertragungsrate über die Konfiguration oder einen anfänglichen Handshake-Mechanismus zustimmen Wenn das Ethernet-Kabel eingesteckt ist. Auf beiden Seiten des Kabels befindet sich eine tatsächliche Taktschaltung in der Hardware, die diese eine oder mehrere dieser Frequenzen unterstützt. Manchmal wird die Rate dieses Takts als Frequenz oder Signalisierungsrate bezeichnet.) Während ich würde Nennen wir es Sampling, nicht Polling / Pulling.

Ihre Intuition, dass "Ziehen" auftritt, ist also auf der niedrigsten Hardwareebene vielleicht richtig ... die Ethernet-Schaltung "zieht", was der Spannungspegel in bestimmten Intervallen ist. (Aber der Begriff "Ziehen" kann geradezu falsch sein, wenn man auf Betriebssystemebene spricht.) Wenn Sie über Spannungspegel sprechen und genau wissen, wie Dinge ausgelöst werden, werden natürlich weder die elektrische noch die optische Physik die Begriffe "Push" verwenden "oder" ziehen "zur Beschreibung elektrischer Felder und Potentiale, aber nehmen wir an, wir sind alle Programmierer, hier keine Physiker. :-)

GregW
quelle
3

Der Code, der einen Port abhört, wartet nur auf eine Nachricht vom Netzwerk.

Immer wenn der Ethernet-Chip eine Nachricht empfängt, wird eine Unterbrechung ausgelöst. Der Kernel behandelt diese Unterbrechung und leitet die Nachricht an den Netzwerktreiber weiter. Diese Nachricht durchläuft den TCP / IP-Stapel und wird entweder herausgefiltert oder an den Code übergeben, der den Port abhört.

Mouviciel
quelle
Das Problem ist genau hier. Wie empfängt der Ethernet-Chip eine Nachricht? Ist es nur eine andere Art von Zug? Überprüft der Ethernet-Chip beispielsweise die Spannung des Netzwerkkabels in Intervallen?
Saeed Neamati
4
Dies ist auf elektrischer Ebene. Wie erkennt eine Glühbirne den Zustand ihres Schalters? Dies ist keine regelmäßige Abfrage. Obwohl die Details in einem Ethernet-Chip komplexer sind, ist dies im Grunde dasselbe.
Mouviciel
"Wie der Ethernet-Chip eine Nachricht empfängt". Stromspannung. Elektronen auf einem Draht oder Radiowellen in der Luft. Der Chip wird durch eingehende Spannung aktiviert und sammelt die Bits. Es unterbricht dann die CPU, um das Vorhandensein von Bits anzuzeigen. Die CPU muss aufhören, was auch immer sie getan hat, und die Bits sammeln, bevor weitere eintreffen. Stromspannung.
S.Lott
3

Die Ethernet-Hardware ist diejenige, die das physische Kabel (oder das drahtlose Kabel) abfragt. Wenn es einen "guten" Grund gibt, wird der Prozessor unterbrochen. Der Prozessor wird unseren richtigen Treiber ermitteln, der den Interrupt behandelt. Der Interrupt-Handler behandelt das Ereignis (Lese- / Schreibdaten). Der Treiber weist die Os außerdem an, alle wartenden Threads zu aktivieren.

vrdhn
quelle
Wie fragt die Ethernet-Hardware den physischen Draht ab? Und wenn sie abstimmen, verwenden sie tatsächlich Pull, ja? Beobachten sie den Draht etwa alle 10 Millisekunden?
Saeed Neamati