TCPの制御(スリーウェイハンドシェイク)

 スリーウェイハンドシェイクは、3ウェイ・ハンドシェイク、「three-way handshaking」とも表記されます。

 TCPの接続において、オープン時に、スリーウェイハンドシェイクという手順で、接続を確立します。このハンドシェイクで初期シーケンス番号を交換し、2つのホストがそれぞれの初期シーケンス番号を同期させます。

TCPの通信では、シーケンス番号を交換することが重要になってきます。

 送信するデータは、セグメントという転送単位に分割されます。また、IPによる通信では、送信したパケットが送信した順に相手に届くことが保障されません。パケットは、ばらばらに到着することもあるのです。

 そこで、TCPでは、送信したセグメントを元通りのデータに復元できるように、シーケンス番号を使用するようにしています。

 シーケンス番号は、送信するデータに対して、それぞれのバイト位置を指すようになっていて、その番号に基づいて整列することで元通りのデータに復元できるようにしています。

シーケンス番号

TCPヘッダは、次のように構成されています。

TCPの制御(スリーウェイハンドシェイク)

上の図から分るように、シーケンス番号は、32bit長です。符号なしの整数値で表現されます。

 TCPでは、コネクションを開始すると、通信路にはそれぞれランダムなシーケンス番号が初期値として与えられるようになっています。

 なぜランダムなのかというと、いつも決まった数値で始まったり、「1,2,3,4,5・・・」などと順番に割り当てられたとすると、セグメントの偽装が行い易いからです。そのため、スリーウェイハンドシェイクでは、コネクションの際にランダムに決めた値を初期値とするようになっています。

スリーウェイハンドシェイクの手順

 TCPの通信において、オープン時に、スリーウェイハンドシェイクという手順で、接続を確立します。このハンドシェイクで、初期シーケンス番号を交換することで、2つのホストが、それぞれの初期シーケンス番号を同期させています。

同期は、SYN(同期制御ビット)と初期シーケンス番号で構成されるパケットを交換することで行われます