6

ソケットで迷っています。私の知る限り、ソケットはIPアドレスとポート番号の組み合わせです。ストリームへの書き込みまたはストリームからの読み取りを許可するための単なるプログラミングの抽象化 (TCP の場合)。クライアントにサービスを提供するときにサーバーに1つ以上のソケットがあるかどうかは、私が絶対に確信していませんか? httpポート80で 言ってみましょう。

さまざまなクライアントからのすべてのデータが 1 つのソケット (サーバー:80) に送信され、一部の UBER サーバー プロセスは着信アドレスに基づいてそれらを区別しますか、それともクライアント アドレスと TCP レイヤーによって作成されたポート番号の組み合わせに基づいて複数のソケットになりますか? サーバーがソケットをポートにバインドするだけでなく、サーバーがソケットをリッスンし、サーバーがデータを提供するだけでなく、段階的なアルゴリズム(同時にサービスを提供する複数のクライアントの場合)を使用して、誰かがこれを完全に説明できますか?

4

3 に答える 3

0

ほとんどの OS/カーネルは同様に動作すると思いますが、私は主に Linux について話すことができます。簡単に言えば、カーネルがほとんどの作業を行うということです。

カーネルは、ある種のネットワーク インターフェイスと通信します。これは、基本的に、信号をワイヤからカーネルに、またはその逆に変換するだけです。ソケットとアドレスは、特定の接続の単なる記述子です。カーネルは、どの内部プロセスがどのソケット/アドレスのペアに関連しているかを追跡し、それに応じてデータを転送します。通常、これは FIFO (先入れ先出し) として実装されます。これは、受信データと送信データに当てはまります。

サーバーが複数のクライアントに接続されている場合、通常、接続されている各クライアントに個別のパケットを送信するのはアプリケーションの役割です。つまり、アプリケーションはアクティブなクライアントの数を追跡する必要があります。一部のカーネルや NIC は、この一部を実行できます。これがローカル ネットワークであり、ネットワークに接続されているすべてのクライアントにパケットを送信する場合は、ブロードキャスト パケットを送信できます。ブロードキャスト パケットは 1 回だけ送信する必要がありますが、すべての接続で受信されます。

さらに多くの情報が必要な場合は、このリンクが非常に詳細です。

ポートとソケットの違いは何ですか?

于 2013-09-03T13:50:57.833 に答える
0

通常、サーバー側では、ソケットが作成され、特定のポート/アドレスの組み合わせにバインドされた後、呼び出される関数Listen(または同様の関数) が呼び出されます。これにより、このバインドされたソケットがリッスン ソケットになります。接続の試行が開始されるのを待っているだけです。

Acceptこの後、リッスン ソケットのような関数が呼び出されます。この呼び出しは、待機中のソケットから保留中の接続要求を受け取り、新しいソケットを作成して、それを返します。

クライアントとサーバー間の以降のすべての通信は、接続中はこの新しいソケット (サーバー側) を介して行われます。

サーバーが複数のクライアント接続を同時に処理する必要がある場合は、スケーラビリティを実現するためにさまざまな手法を使用できます。単純な手法の 1 つ (何千もの接続されたクライアントには対応していません) は、新しいスレッド/プロセスを生成して (O/S の負荷が低いものに応じて)、この接続を処理し、元のスレッド/プロセスが呼び出し元に戻ることAcceptです。

他の手法には、ソケットを何らかの形式のプールに配置することや、各ソケットに注意が必要な場合に、固定数のスレッドによって処理されるイベントをソケットに生成させることが含まれる場合があります。

于 2013-09-03T13:30:05.670 に答える