本稿ではIPA試験で必要とされる知識をまとめます。
目次
TCPの開始・切断要求でway数が異なる理由
TCPにおいて,開始要求と切断要求ではway数が異なります。
- 開始要求:3way(SYN/ACK+SYN/ACK)
- 切断要求:4way(FIN/ACK/FIN/ACK)
開始要求がいわゆる「TCP 3wayハンドシェイク」に相当します。
結論から言うと,両者のway数が異なるのは「切断要求を受けた側は切断の準備が整っているとは限らないから」です。TCPでは切断要求はクライアント・サーバのいずれから行ってもよいですが,今回はクライアントからサーバに対して切断要求を行うケースを考えましょう。クライアントが切断要求を行う際は,クライアント側は切断の準備が整っていることが保証されていますが,サーバ側はリクエストを捌いている途中の可能性もあり,準備が整っていることが保証されていないのです。一方,接続開始時はソケットが作成されていないため,クライアントもサーバも接続の準備が整っていることが保証されています。
このような背景から,接続開始時はクライアント側からのSYNに対するサーバ側のACKとSYNを同一のリクエストに乗せることができますが,切断時はクライアント側からのFINに対するサーバ側のACKとFINを同一のリクエストに乗せることができません。仮にACKとFINを同一のレスポンスに乗せようとすると,サーバ側で切断の準備が整うまでACKを送るのが遅れてしまい,クライアント側でタイムアウトされてしまう可能性があります。そこで,サーバ側はとりあえずACKを送ってから,サーバ側のアプリケーションが切断の準備が整うまで待機し,アプリケーションからGoサインが出てからFINを送る形になっています。
切断要求を受けた側の状況によっては4wayが3wayとなることもあるみたいです。
コメント