1. 序章

私たちの日常生活では、人々との会話を開始および終了するためのいくつかのシグナルがあります。 たとえば、通信したい相手と握手することができます。 さらに、手を振って他の人に別れを告げたり、誰かに背を向けて立ち去ったりすることもできます。

同様に、コンピュータには、ネットワーク内の通信を調整するためのさまざまな信号があります。 たとえば、コンピュータが伝送制御プロトコル(TCP)を使用して通信する場合、SYN、ACK、FIN、およびRSTメッセージがこれらの通信信号として機能します。

このチュートリアルでは、特にTCPからの2つの通信信号(FINとRST)について学習します。最初に、TCPを介した通信を簡単に確認し、通信の開始と終了に使用されるメッセージを示します。 そこで、FINメッセージとRSTメッセージを詳細に調査し、それらが使用されるシナリオを調査します。 最後に、体系的な要約でFINとRSTを比較します。

2. TCPを介した通信

TCPは、OSIモデルの第4層(トランスポート)で動作します。したがって、TCPは、複数のデバイスとそのアプリケーションにホスト間通信を提供します。 さらに、TCPはコネクション型プロトコルです。 これは、TCPを介して通信するデバイスが接続を確立する必要があることを意味します。 次に、接続はハンドシェイクプロセスを介して確立され、接続されたデバイスがメッセージを交換できるようにします。

TCPは、接続を確立、管理、および閉じるために、デバイスへの信号として機能する制御メッセージを使用します。

  • SYN:クライアントとサーバー間の接続を要求するために通常使用される同期メッセージ
  • ACK:特定のメッセージの受信を宣言するために使用される確認メッセージ
  • FIN :クライアントとサーバー間の正常な接続終了をトリガーするメッセージ
  • RST :クライアントとサーバー間の接続(強制終了)を中止するメッセージ

このように、TCPを介した一般的な通信は、3ウェイハンドシェイクプロセスから始まります。 このプロセスでは、SYNメッセージとACKメッセージを使用して、クライアントとサーバー間の接続を確立します。 したがって、接続されたエンティティはメッセージを交換できます。

さらに、エンティティは、受信した各メッセージを相互に確認(ACK)します。 通信が終了すると、接続されたエンティティはFINメッセージを送信して接続を閉じます。 したがって、FINハンドシェイクプロセスが開始されます。 ただし、接続で問題が発生した場合、エンティティはRSTメッセージを送信して接続を中止できます。

3. FINメッセージ

FINメッセージは、TCP接続の終了を適切に要求します。 接続を会話と比較すると、FINメッセージは次のことを宣言するエンティティを表します。 「私はあなたに言わなければならないことすべてを言いました。 今、あなたが私に言わなければならないことすべてをあなたが言うまで、私はあなたに耳を傾けます。」 ただし、技術的には、FINメッセージはFINハンドシェイクと呼ばれるプロセスをトリガーします。 

クライアントがサーバーに接続して通信したと考えてみましょう。 ある時点で、クライアントは接続を正常に閉じるように通知します。 したがって、FINハンドシェイクが始まります。

  1. クライアントはFINメッセージをサーバーに送信します
  2. サーバーはクライアントのFINメッセージを受信し、それをクライアントにACKします
  3. クライアントはサーバーのACKを受信し、待機します
  4. サーバーからクライアントに送信するメッセージがある場合、サーバーはそれを送信します
  5. サーバーはFINメッセージをクライアントに送信します
  6. クライアントはサーバーのFINメッセージを受信し、サーバーにACKを送信します
  7. サーバーはクライアントのACKを受信し、サーバー側で接続を閉じます
  8. クライアントはプロトコル時間待機します
  9. クライアントはクライアント側で接続を閉じます

次の画像は、前述のFINハンドシェイクプロセスの手順を示しています。

最後に、FINハンドシェイクが双方向ハンドシェイクのペアで構成されていることを強調することが重要です:最初のFINメッセージを送信するエンティティによって開始される最初のハンドシェイク(ステップ1)。 もう1つは、他のエンティティが2番目のFinメッセージを送信したときに始まります(ステップ5)。

4. RSTメッセージ

RSTメッセージはTCP接続を中止します。 会話に例えると、RSTメッセージは、次のように宣言する人に相当します。 私はあなたに何も言わないでしょう、そして私はあなたから何も聞かないでしょう。」 実際には、RSTメッセージを送信したエンティティは、TCP接続をすぐに閉じることができるため、通信している他のエンティティからの後続のメッセージは無視されます。

クライアントがサーバーと通信する一般的なシナリオを考えてみましょう。 最終的に、サーバーでイベントが発生し、クライアントメッセージに応答できなくなります。 したがって、サーバーは次のようにRSTメッセージを介してクライアントに通知する必要があります。

  1. サーバーはRSTメッセージをクライアントに送信します
  2. サーバーはサーバー側の接続を閉じます
  3. クライアントはサーバーからRSTメッセージを受信します
  4. クライアントはクライアント側で接続を閉じます

次の画像は、TCP接続を中止する前に概説した手順を例示しています。

RSTメッセージを使用できる特定のシナリオは次のとおりです。

  • エンティティは、以前に確立された接続を介して別のエンティティからメッセージを受信します。 ただし、最初のエンティティはすでにソケットを閉じていました。 したがって、最初のエンティティはRSTメッセージを2番目のエンティティに送信します
  • エンティティは、すでに確立されている接続のSYNメッセージを受信します。 したがって、このエンティティは、SYNメッセージにRSTメッセージで応答します
  • エンティティは別のエンティティからメッセージを受信しますが、最初のエンティティはビジーで応答できません。 したがって、RSTメッセージは最初のエンティティから2番目のエンティティに送信されます

最後に、 なりすましTCPリセット攻撃 RSTメッセージを使用して、2つのエンティティ間の接続を中止します。 この場合、悪意のあるエージェントは、接続されたエンティティのアドレス情報を使用してRSTパケットを偽造します。 したがって、この悪意のあるエンティティは、偽造されたパケットをそれらの接続されたエンティティの1つに送信します。

偽造されたパケットを受信したエンティティは、接続をただちに中止します。 ある時点で、(偽造されたパケットを受信しなかった)他のエンティティは、通信の試行が応答されないことを通知し、接続を中止します。

5. FIN対。 RST

FINメッセージとRSTメッセージは、高レベルでは同じ目的を持っています。つまり、TCP接続を閉じます。 ただし、終了プロセスとこれらのメッセージが使用される一般的なシナリオは、複数の側面で異なります。

まず、FINメッセージが正常な終了をトリガーし、接続されたエンティティが接続を閉じることに同意します。 次に、RSTメッセージは接続をすぐに閉じ、他の接続されたエンティティからの同意を必要としません。

このように、FINまたはRSTとの接続を閉じることが最も適切なシナリオがあります。 一般に、TCP接続が正常であると見なされる場合(正常に確立され、メッセージ交換が異常なく発生する場合)、FINメッセージが接続を閉じるためのより適切なオプションです。 FINプロセスは、接続されたエンティティが必要なすべてのメッセージを送受信することを保証します。

RSTとの接続を中止することは、たとえば、接続エラーが発生したり、エンティティが異常メッセージを受信したりする場合に、より適切なオプションです。 このようにして、RSTプロセスは、壊滅的なエラーやセキュリティの侵害の発生を回避します。

次の表は、FINとRSTの違いをまとめたものです。

6. 結論

この記事では、TCPのFINおよびRSTメッセージについてTCPのFINおよびRSTメッセージについて学びました。TCPのFINおよびRSTメッセージについて。 まず、TCPについて簡単に説明しました。 次に、FINとRSTの制御メッセージを詳細に分析し、それらの特性を概説しました。 最後に、FINとRSTの制御メッセージを比較し、それらの主な違いとアプリケーションシナリオを要約しました。

FINとRSTはTCPで関連する役割を果たしており、エンティティが一般的なシナリオで協調的に接続を閉じたり、リスクがある場合は接続を中止したりできるようになっていると結論付けることができます。