Kurze Antwort auf die Frage: Die Hardware / Firmware der Netzwerkschnittstelle und das Betriebssystem erledigen all das.
Genauer gesagt sind einige Fahrer beteiligt. Das Gerät deckt normalerweise die OSI-Schichten 1 (physikalisch) und 2 (Datenverbindung) selbst ab, d. H. Die Übersetzung zwischen physikalischen Signalen (elektrisch, Funk) und Bits und deren Gruppierung zu Rahmen wird von der Hardware / Firmware durchgeführt. Der Gerätetreiber steuert die entsprechenden Funktionen. Die Schichten 3 (Netzwerk) und 4 (Transport) werden vom Betriebssystem abgedeckt, obwohl privilegierte Userland-Prozesse möglicherweise Zugriff auf die Daten erhalten.
Wie kommt das Betriebssystem an den Frame?
Wenn der Netzwerkschnittstelle ein Frame zur Verfügung steht, wird ein Interrupt ausgelöst, sodass der Kernel ihn aus dem entsprechenden E / A-Speicherbereich auslesen kann.
Die Frame-Header-Daten geben an, was mit dem Frame geschehen soll. Wenn der Kernel (genauer: der Netzwerktreiber) den Typ der Nutzlast (z. B. IPv4 oder IPv6) kennt, wird das Paket (nach Entfernen der Header und Trailer der Schicht 2) an den entsprechenden Netzwerktreiber weitergeleitet.
Es behandelt alle Besonderheiten des Netzwerkschichtprotokolls wie Fragmentierung und Zusammenbau, Prüfsummenberechnung und -verifizierung usw. sowie alle netzwerkschichtspezifischen Aufgaben wie Routing und Paketfilterung. Abhängig von der Nutzlast (TCP, UDP, ICMP, ICMPv6, GRE, SCTP, DCCP usw.) wird das Paket weiter an den entsprechenden Transportschichtentreiber weitergeleitet. Es kümmert sich um alle Transportschicht-spezifischen Dinge. Für verbindungsorientierte Protokolle wie TCP bedeutet dies beispielsweise, den Verbindungsstatus zu verfolgen, die Warteschlangen zu verwalten und die Buchhaltung zu übernehmen. Eine andere Sache ist die Überlastungskontrolle.
Sobald ein Paket diese Schicht passiert hat, wird es weiter nach oben weitergeleitet (erneut nach dem Entfernen des Transportschicht-Headers), diesmal jedoch an den Userland-Prozess. Der Userland-Prozess sieht so gut wie nichts von der Verarbeitung auf niedrigerer Ebene.
Jetzt ist es möglich, auf Rohdaten wie Frames aus dem Userland zuzugreifen und diese zu verarbeiten. Dies können Sie mit Software wie libpcap tun. All dies im Kernel zu tun ist jedoch effizienter.