スリーウェイハンドシェイク
接続のやり方だよ
「データを送っていい?」「いいよー!こっちからも送っていい?」「いいよー!」な手順を踏むよ
TCPで採用されている やり方だよ
簡単に書くよ
スリーウェイハンドシェイク(英:3-way handshake)とは
「TCP」と呼ばれるやり方で通信するときに使われる接続のやり方
であり
「こっちから何か送っても、いいかなー?」(質問)「いいともー!こっちからも送って、いいかなー?」(返事&質問)「いいともー!バッチ来いや~!」(返事)の3回のやり取りをして接続するやり方
です。
詳しく書くよ
サクっと一言で説明すると
「データを送るよ」「OK。こっちも送るよ」「OK」の3回のやり取りを経て接続を確立する
のが「スリーウェイハンドシェイク」です。
……と、いきなり言われても分からないですよね。
大丈夫です。
順番に説明します。
例えば、そうですね。
ピヨ太君が、ぼーっとしていました。
ピヨ子さんも、ぼーっとしていました。
ピヨ太君はピヨ子さんと お話がしたいです。
そこで、ピヨ子さんに「しゃべっても いいかな?」と聞きました。
ピヨ子さんは「いいわよー」と答えて、ピヨ太君の話を聞く態勢に入りました。
ついでに「私も、しゃべって いいかしら?」と聞きました。
ピヨ太君のつまらない話を聞くだけでは眠くなりますからね。
自分もしゃべりたいと思ったのでしょう。
ピヨ太君は「いいよー」と答えました。
そして、ピヨ子さんの話を聞く態勢に入りました。
これでピヨ太君もピヨ子さんも、しゃべる許可を相手からもらいました。
お互いの話を聞く態勢も整っています。
楽しく ぺちゃくちゃ おしゃべりできるでしょう。
このようなやり方で接続を確立するのがスリーウェイハンドシェイクです。
1.「しゃべっても いいかな?」
2.「いいわよー」「私も、しゃべっても いいかしら?」
3.「いいよー」
の3回のやり取りを経て、やり取りできる(通信できる)状態を作ります。
実際のところ、これだけです。
難しくないでしょ?
それでは、ちょっとだけ応用編です。
実際のコンピュータの世界のやり取りに置き換えて見てみましょう。
コンピュータ同士のやり取りでは意思疎通にパケットを使います。
パケットは「通信用に細切れにしたデータ」ね。
よく分からない人は「通信中のデータ」くらいの理解でも かまいません。
やり取りするパケットの中には「SYN」と呼ばれる目印と「ACK」と呼ばれる目印が くっついています。
この目印が大事です。
SYNは「送っていい?」な質問用の目印だと思ってください。
SYNが「1」のパケットは「送っていい?」な質問のパケットです。
ACKは「いいよー」な返事の目印だと思ってください。
ACKが「1」のパケットは「いいよー」な返事のパケットです。
それを踏まえて、ピヨ太コンピュータ(ピヨ太PC)がピヨ子コンピュータ(ピヨ子PC)に接続するまでの流れを見ていきましょう。
まずはピヨ太PCの出番です。
ピヨ太PCはピヨ子PCに対して「送っていい?」な質問をします。
「SYN=1、ACK=0」になっているパケットを送りました。
次はピヨ子PCの出番です。
質問を受け取ったピヨ子PCはピヨ太PCに対して「いいよー」な返事をします。
「SYN=0、ACK=1」になっているパケットを送ることにしました。
あと「私も送っていい?」な質問をします。
「SYN=1、ACK=0」になっているパケットを送ることにしました。
実際に送ろうとしたピヨ子PCは気付きました。
「SYN=0、ACK=1」な返事と「SYN=1、ACK=0」な質問は合体させられそうです。
「SYN=1、ACK=1」にすれば、返事と質問が一緒に伝わるはずです。
2回も送るのは面倒くさいです。
合体して1回で送ってしまいましょう。
ピヨ子PCはピヨ太PCに対して「SYN=1、ACK=1」になっているパケットを送りました。
「いいよー」な返事と「私も送っていい?」な質問を一度に送ったのです。
最後は、またピヨ太PCの出番です。
質問を受け取ったピヨ太PCはピヨ子PCに対して「いいよー」な返事をします。
「SYN=0、ACK=1」になっているパケットを送りました。
これで2人とも相手から「送っていいよー」な許可をもらいました。
相手から送られてきたデータを受け取る心の準備もバッチリです。
この状態は「接続が確立された状態」と言えそうです。
ピヨ太PCとピヨ子PCは通信できるでしょう。
めでたし、めでたし。
実際には、もう少し複雑ですけどね。
これが基本的な考え方です。
1.送っていい?
2.いいよー!送っていい?
3.いいよー!
の3回のやり取りを経て、接続を確立します。
そのときに、やり取りするデータは
1.「SYN=1、ACK=0」のパケット
2.「SYN=1、ACK=1」のパケット
3.「SYN=0、ACK=1」のパケット
です。
なお、スリーウェイハンドシェイクはTCPの話で よく出てきます。
TCPでは、スリーウェイハンドシェイクで接続するからです。
TCPの詳細については、用語「TCP」の説明を ご覧ください。
一言でまとめるよ
まぁ「スリーウェイハンドシェイク」って単語が出てきたら「『送っていい?』『いいよー。こっちも送っていい?』『いいよー』な手順を踏む接続のやり方なんだな~」と お考えください。
おまけ
■訳してみるよ
「three(スリー)」の意味は「3」とか「3つ」とか「3個」とか「3人」とかです。
「way(ウェイ)」の意味は「道」とか「方向」とか「方法」とか「やり方」とかです。
「handshake(ハンドシェイク)」の意味は「握手」です。
何となく くっつけると
3方向握手
となります。






