回答:
理論的には、これはOSとネットワークハードウェアの仕様によって異なります。実際には、主流のOSとハードウェアは、ハードウェアとOS(およびOSによって制御されるすべてのソフトウェア)間の相互作用のための割り込みに基づくプッシュモデルを使用します。
基本的に、割り込みは非常に低レベルのメカニズムであり、処理する必要のあるイベント(ネットワークパケットの到着、キーの押下など)があることを周辺ハードウェアがCPUに通知できます。CPUは、そのときに行っていた処理をすべて一時停止し、代わりに割り込みハンドラを実行することにより、これに対応します。
割り込み処理は通常、OSによって行われるか、少なくともOSによって開始され、特定のタイプのイベントに関心があると登録されているより具体的なアプリケーションコードに渡されます。
ええ、私はイーサネットハードウェアエンジニアではありませんが、あなたの質問を試してみることはできると思います。ポートからリッスンするコードを記述すると、次のことが起こります。
したがって、「プル」が発生するという直観は、最低のハードウェアレベルでおそらく正しいです。イーサネット回路は、電圧レベルが一定の間隔で「プル」されるようにします。(ただし、「プル」という用語は、OSレベルで話す場合はまったく間違っている可能性があります。)もちろん、電圧レベルと正確にどのようにトリガーされるかについて話し始めると、電気物理学も光学物理学も「プッシュ」という用語を使用しません。 "または"プル "電場と電位を説明しますが、ここでは物理学者ではなく、すべてのプログラマーであると仮定します。:-)
ポートをリッスンするコードは、ネットワークからのメッセージを待つだけです。
イーサネットチップがメッセージを受信するたびに、割り込みが発生します。カーネルはこの中断を処理し、メッセージをネットワークドライバーに転送します。そのメッセージはTCP / IPスタックを通過し、フィルターで除去されるか、ポートをリッスンするコードに渡されます。
イーサネットハードウェアは、物理的なワイヤー(またはワイヤレス)をポーリングするものです。「十分な」理由がある場合、プロセッサに割り込みます。プロセッサは、割り込みを処理する適切なドライバを見つけます。割り込みハンドラーがイベントを処理します(データの読み取り/書き込み)。ドライバーはまた、待機中のスレッドをウェイクアップするようにOsに指示します。