接続を閉じるには、セグメント ヘッダー内で終了(FIN)制御フラグをセットする必要があります。 それぞれの一方向 TCP セッションを終了するには、FIN セグメントと ACK セグメントから成る 2 ウェイ ハンドシェイクを使用します。 したがって、TCP でサポートされる単一の会話を終了するためには、図 1 に示すように、4 回の交換によって両方のセッションを終了する必要があります。

:この説明では、単純化のためにクライアントとサーバという用語を使用していますが、終了プロセスは開かれたセッションを保持しているどの 2 つのホストでも開始できるのです。

ステップ 1:ストリームで送信するデータがクライアント側にもうなければ、クライアントが FIN フラグをセットしたセグメントを送信します。

ステップ 2:サーバが ACK を送信して、クライアントからサーバへのセッションを終了するための FIN を受信したことをクライアントに知らせます。

ステップ 3:サーバがサーバからクライアントへのセッションを終了するための FIN をクライアントに送信します。

ステップ 4:クライアントが ACK で応答して、サーバからの FIN を受け入れます。

転送するデータがクライアント側にもうなければ、クライアントはセグメントのヘッダー内の FIN フラグをセットします。 次に、その接続のサーバ側が、確認応答番号が含まれていて ACK フラグがセットされている通常のセグメントを送信します。これはデータのすべてのバイトを受け取ったことを確認するものです。 すべてのセグメントに対して確認応答がなされると、そのセッションが閉じられます。

逆方向のセッションも同じプロセスで閉じられます。 受信側は、送信元に送信するセグメントのヘッダー内で FIN フラグをセットすることにより、送信するデータがもうないことを示します。 返信確認応答は、データのすべてのバイトを受け取ったことと、セッションが閉じられることを確認するためのものです。

図 2 および 3 で、セグメント ヘッダーの FIN フラグと ACK フラグがセットされていることを確認してください。これにより、HTTP セッションが閉じられます。

3 ウェイ ハンドシェイクで接続を終了することもできます。 送信するデータがクライアント側にもうなければ、クライアントはサーバに FIN を送信します。 送信するデータがサーバ側にももうなければ、サーバは 2 つのステップを 1 つにまとめ、FIN フラグと ACK フラグの両方をセットして応答できます。 それに対して、クライアントは ACK で応答します。