6.2.6 開設手続き

TCPでは、接続に先立って、相手との接続確認を行います。この際に3つの データグラムをやり取りするために、この開設手続きは 3ウェイハンドシェークと呼ばれています。

3ウェイハンドシェークでは、以下のようなデータグラムをやり取り します。(但し、クライアントからサーバ側に向かって接続を確立しようと しています。)

クライアント側 方向 サーバ側
SYN  
  SYN,ACK
ACK  

なお、このような3ウェイハンドシェークが必要な理由ですが、順序番号の初期値の 通知や、フローコントロールのためのバッファ量の通知などのために必要とされて いるのですが、そこまで詳しいことは通常必要ないでしょう。大事な事は、 SYNフラグの立ったパケットが飛び、それに対して SYN,ACK の立ったパケットが 返り、最後に ACK の立ったパケットが飛んで初めて接続が確立されるのだという 事です。これは、ファイアーウォールなどでコネクションを通すか否かの判定を する際の基本となるからです。

ちなみに、TCPで用いられるフラグには以下のものがあります。

SYN 接続の開始の最初に使う
ACK 受信の確認に使う
FIN 接続の終了に使う
PSH 素早いパケットの送受信に使う
URG 緊急データ転送に使う
RST 接続のリセットなどに使う

これらのフラグは具体的には、ヘッダの中の決まった場所のビットが1か否かで 判断されます。従って、論理的には、全てのフラグが立っている場合もあり得ますが、 実際には SYN と RST が同時に立っているものはあり得ず、基本的には SYN ビットは それだけしか立っていません。

参考
上記のフラグは定められたビットが対応しています。ですから、 6bitが必要なのですが、当然6bitは半端ですので、8bitの領域が確保されています。 つまり、TCPフラグには使われていない 2bit が余分にあるのです。こうした領域の フラグが立っていた場合(当然変なパケットなのですが)、どういう反応をOSが返す かは実装によりますし、昔ですとセキュリティホールや、その他の攻撃に使われた りしました。



Noriyo Kanayama