2016-06-26 14 views
1

(「奇妙なTCPコネクション近い行動」原題)からのHTTP接続を終了します。クライアントはサーバーへの接続を開きます(2つの異なるサーバーを試しました)、長いデータストリームの受信を開始します。クライアントがサーバ[FIN、ACK]パケットを停止して送信しようとしているにもかかわらず、サーバがデータの送信を停止していない場合、それは自身のフルストリーム終了まで続き、それ自体の完了パケット[FIN、PSH、ACK] 。私はクライアントがFINパケットを送った後、クライアントのソケットからデータを読み続けることを考え出しました。また、クライアントがこのFINパケットを送信した後、その状態はFIN_WAITであるため、サーバからFIN応答を待っています。が正しくクライアント側

FINパケットを送信してFINパケットに応答する理由は何ですか?

クライアントがFINパケットを送信した後も、サーバはFINを受信する前にオンザフライであったいくつかのパケットを送信しますが、ロングデータストリーム全体ではありません。

編集:読書this私は、Webサーバーが「クローズ待機:サーバーは、終了する準備ができていることをサーバーに知らせるために、最後のアプリケーションプロセスが待機しています」(3行目)とそのデータ送信すべてのコンテンツをその最後のソケットにフラッシュしたときに "完了"したプロセスであり、このプロセスは終了できません。奇妙な。

Edit1:私の質問は少し違うようです。私は完全にクライアント側で接続を終了する必要があるので、サーバーはデータの送信を停止し、クライアント側からの強制終了については狂ったことにはならず、次の接続の準備ができている側のデータ送信スレッドを中断します。

Edit2:環境はHTTPサーバーです。

答えて

1

なぜサーバーはFINを設定した状態でデータの送信を停止し、FINパケットに応答しますか?

なぜでしょうか?クライアントは別の要求を送信しないと言いましたが、それはすでに送信した要求に対する応答には関心がないというわけではありません。

HTTPなどのほとんどのプロトコルは、サーバーが現在の要求に対する応答を完了してから、接続を終了するように指定します。これは異常終了ではなく、何も送ってこないという約束です。

+0

クライアントが何も受信したくない場合、どうすればよいですか?私はそれを説明する標準が表示されません。そして、クローズ(RST)との接続を終了するだけで、リモート側で予測可能な結果が得られる有効なアクションではないようですか?クライアントが完全になくなっても、サーバーはデータをプッシュし続けるでしょう... – Anonymous

+0

これはクライアントの約束です。それから、クライアントが必要としない情報を受け取らないように、サーバーが不必要なデータの送信を適切に停止し、ハングアップしたり、狂ったりしないように、クライアント側からの接続を完全に中断する方法を少し言い換える必要があります。 – Anonymous

+0

@Anonymousこれは、特定の状況で特定の状況を処理するためにサーバーとクライアントの間で合意が必要となります。プロトコルがこれを行う方法を提供しない場合、これを行う方法はありません。 TCPは、特定のTCPイベントに応答してクライアントまたはサーバーが何をすべきかを指定しません。 –

2

クライアントは、接続をシャットダウンするだけで出力を閉じます。したがって、サーバーは完全に送信を継続できます。

クライアントが接続を終了した場合、受信したデータに応じてRSTが発行され、サーバーはこれ以上モジュロバッファリングを送信できなくなります。

+0

EJPは、この方法でクライアントに有効な動作を閉じていますか?それ以上の_server_操作でどのような影響があるのか​​分かりますか(たとえば、ポートの再利用によって問題が発生します)。この文脈で "モジュロ"の使用方法を詳述すると、私はとてもうれしく思います。多くの人が英語のネイティブスピーカーではないので、意味を理解している可能性があります。 – Anonymous

+1

パーフェクトに有効です。実際にそれはクライアントが行うことができる唯一のものです。その結果、サーバーは「ピアによって接続がリセットされました」が発生し、ソケットを閉じる必要があります。ポートに悪影響はありません。 「モジュロ」は「脇に残す」ための省略表現です。 – EJP

+0

ありがとうございます。私は私の経験を追加したい。ソケットを閉じる(= RSTパケットをサーバーに送信する)だけで接続を終了すると、同じソースポートから同じホストへの接続に問題があります(測定しませんでしたが、最大2桁になる可能性があります秒)。 – Anonymous

関連する問題