ポートはどのように「リッスン」、プル、またはプッシュしますか?


9

たとえば80などのポートからリッスンするコードを作成すると、内部では何が起こりますか?OSがリッスンする方法はプルですか、プッシュですか?言い換えると、OSは、たとえばxミリ秒ごとにそのポートをチェックしますか?

わかりません。考えれば考えるほど、引っ張る以外にあり得ない気がします。

つまり、OSがコールバック関数を設定したとしても、そのコールバック関数を呼び出すための新しい情報が到着したことを理解する必要があります。その何かはまだ新しいデータの到着を理解するためにプルを使用する必要があります。

ポートはどのように待機しますか?

回答:


14

理論的には、これはOSとネットワークハードウェアの仕様によって異なります。実際には、主流のOSとハードウェアは、ハードウェアとOS(およびOSによって制御されるすべてのソフトウェア)間の相互作用のための割り込みに基づくプッシュモデルを使用します。

基本的に、割り込みは非常に低レベルのメカニズムであり、処理する必要のあるイベント(ネットワークパケットの到着、キーの押下など)があることを周辺ハードウェアがCPUに通知できます。CPUは、そのときに行っていた処理をすべて一時停止し、代わりに割り込みハンドラを実行することにより、これに対応します。

割り込み処理は通常、OSによって行われるか、少なくともOSによって開始され、特定のタイプのイベントに関心があると登録されているより具体的なアプリケーションコードに渡されます。


つまり、ポートは、新しいネットワークパケットの到着時にCPUに割り込みを送信する周辺ハードウェアです。OK、しかしポートは新しいネットワークパケットが到着したことをどのように理解するのでしょうか。プルメカニズムを通じて?または電気を通じて?どうやって?
Saeed Neamati

1
ネットワークカードは周辺機器のハードウェアです。ポートは、純粋にTCP / IPプロトコルのソフトウェア構造です。OSはハードウェア割り込みに反応し、TCP / IPスタックを呼び出します。TCP/ IPスタックには、アプリケーションがリッスンしているポートのある種のレジストリがあります。リスナーが登録されていない場合、パケットは無視されるか、エラー応答が送信されます。リスナーがある場合、それが呼び出されます。
Michael Borgwardt、2011

そのチェーンを厳密にたどって申し訳ありません、:)。しかし、新しいパケットが到着したことをネットワークカードがどのように理解するか。このチェーンの元のデバイス(アプリケーション、OS、ハードウェア、ネットワークワイヤー)がプルを使用しているか、プッシュを使用しているかを調べようとしています。私と一緒にいてくれてありがとう、バディ。:)
Saeed Neamati 2011

1
@Saeed:「プルとプッシュ」という区別がハードウェアレベルで意味があるかどうかはわかりません。そして、それはネットワーク技術の詳細に依存します。たとえば、イーサネットまたはWiFiカードのファームウェアは、宛先MACアドレスが自身のアドレスと一致するパケットを見つけるまで、すべてのWiFiトラフィックを継続的に監視する必要があり、その時点で割り込みを送信します。カードは単に受動的にリッスンするだけなので、私はそれを「プル」とは呼びません。ただし、ポイントツーポイント接続に基づくネットワークハードウェアは、まったく異なる動作をする場合があります。
Michael Borgwardt、2011

1
「しかし、ネットワークカードは、新しいパケットが到着したことをどのように理解するのですか」?電圧。真剣に。信号は、無線または有線で到着します。電圧は、カードがビットとしてデコードするアクティビティを示します。CPUに割り込み、ビットが到着したことを示します。
S.Lott、2009

8

ええ、私はイーサネットハードウェアエンジニアではありませんが、あなたの質問を試してみることはできると思います。ポートからリッスンするコードを記述すると、次のことが起こります。

  • アプリケーションコードは、OSがパケットの到着を通知するまでブロック/スリープ/「選択」/ポーリングします(IPヘッダーにいくつかのビットがあり、パケットがその特定の「ポート」に関連付けられているため、リッスンしているアプリケーションに関連付けられていることを示しますそのポート)
  • OSは通常、新しいパケットを(x86 / PCアーキテクチャーで)ポーリングしません。イーサネットネットワークハードウェア(イーサネットネットワークドライバー、OS /ハードウェアインターフェイスによって渡される)からの割り込みを受信するまで、それは楽に実行されます。
  • イーサネットネットワークハードウェア自体は、通常、イーサネットコントローラーといくつかの「受信バッファー」または「パケットバッファー」を含みます。イーサネットネットワークドライバーは、バッファーがいっぱいであり、OSに通知する必要があることを通知する詳細を管理します。これが通常イーサネットハードウェア内でプッシュまたはプルであるかどうかは完全にはわかりませんが、割り込み駆動であるか、バッファの準備ができたときにチップ上のレジスタが設定されるのではないかと思います。しかし、バッファを設定するものは何ですか?
  • イーサネットハードウェアのさらに低いレベルの部分がバッファ(またはDMAパケットを直接メインメモリに送信)を満たします。非常に低レベルのロジックが実際に電圧の変動(または光信号)を認識し、それらを「ビット」として変換し、結果をパケット受信バッファーに配置します(おそらくイーサネットハードウェア内のレジスタ値を設定します)。(補足:ネットワークインターフェースカードの前に、シリアル/パラレルポート接続を使用すると、入ってくる1バイトがOSへのハードウェア割り込み(IRQ)を生成する可能性があります。http://zone.ni.com/devzoneの段落4を参照してください。/ cda / tut / p / id / 4052
  • その最低レベルのハードウェアは、「ビット」を構成するものをどのようにして知るのでしょうか。まあ、イーサネット、少なくともほとんどの古い/一般的なものは、マンチェスターコーディングを使用しています 電圧スイングをビットとしてデコードします。それはどういう意味ですか?まあ、そのページで述べているように、各ビットは固定された時間、つまり暗黙のクロック信号で送信されるという根本的な前提があります。(これが、標準のイーサネット速度が10Mb / s、100Mb / s、1000Mb / sなどのいずれかに固定され、完全に可変ではない理由です。イーサネット接続の両側は、構成または初期のハンドシェイクメカニズムを介して伝送速度に同意する必要がありますイーサネットケーブルが差し込まれているとき。ハードウェアの実際のクロック回路がワイヤーの両側にあり、これらの周波数の1つまたは複数をサポートしています。このクロックのレートは、その周波数またはシグナリングレートと呼ばれることもあります)。ポーリング/プルではなく、サンプリングと呼び、

したがって、「プル」が発生するという直観は、最低のハードウェアレベルでおそらく正しいです。イーサネット回路は、電圧レベルが一定の間隔で「プル」されるようにします。(ただし、「プル」という用語は、OSレベルで話す場合はまったく間違っている可能性があります。)もちろん、電圧レベルと正確にどのようにトリガーされるかについて話し始めると、電気物理学も光学物理学も「プッシュ」という用語を使用しません。 "または"プル "電場と電位を説明しますが、ここでは物理学者ではなく、すべてのプログラマーであると仮定します。:-)


3

ポートをリッスンするコードは、ネットワークからのメッセージを待つだけです。

イーサネットチップがメッセージを受信するたびに、割り込みが発生します。カーネルはこの中断を処理し、メッセージをネットワークドライバーに転送します。そのメッセージはTCP / IPスタックを通過し、フィルターで除去されるか、ポートをリッスンするコードに渡されます。


問題はここにあります。イーサネットチップはどのようにメッセージを受信しますか?それは単なる別の種類の引きですか?たとえば、イーサネットチップはネットワークワイヤの電圧を一定間隔でチェックしますか?
Saeed Neamati

4
これは電気レベルです。電球はどのようにしてスイッチの状態を感知しますか?これは定期的なポーリングではありません。詳細はイーサネットチップではより複雑ですが、これは基本的に同じです。
mouviciel 2011

「イーサネットチップがメッセージを受信する方法」。電圧。ワイヤー上の電子または空中の電波。チップは入力電圧によってアクティブになり、ビットを収集します。次に、CPUに割り込み、ビットの存在を示します。CPUは、他に何をしているのかを停止し、さらに到着する前にビットを収集する必要があります。電圧。
S.Lott、2009

3

イーサネットハードウェアは、物理的なワイヤー(またはワイヤレス)をポーリングするものです。「十分な」理由がある場合、プロセッサに割り込みます。プロセッサは、割り込みを処理する適切なドライバを見つけます。割り込みハンドラーがイベントを処理します(データの読み取り/書き込み)。ドライバーはまた、待機中のスレッドをウェイクアップするようにOsに指示します。


イーサネットハードウェアは物理ワイヤをどのようにポーリングしますか?そして、彼らが投票した場合、実際にプルを使用しますね?彼らは10ミリ秒ごとに回線を監視していますか?
Saeed Neamati
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.