人間の会話とコンピュータ通信を比較してみる:3ウェイハンドシェイク
アメブロで書いてたものをこっちに移転するにあたって、リメイク。 元記事は↓でした。 ameblo.jp
はじめに
コンピュータ同士で渡したいデータを抜け漏れなく渡すことを担保する仕組みの1つとして、
「3ウェイハンドシェイク」があります。
これと人間の会話を比較してみると?という内容です。
相手とやり取りをする時…
「ちゃんと聞いてもらえない!」って感じてしまうことがありませんか?
でも、相手は聞ける状態になっていたのでしょうか?
相手は自分に話しかけれたと思ってないかもしれません。
コンピュータ同志が通信する時、いきなりデータを相手に送り付けているのでしょうか?
そんなことはありません。
「相手との接続確立」のための通信が先に行われます。
自分は相手に送っても大丈夫な状態、相手は送られても大丈夫な状態にする。
それからの通信です。
人間の会話だと?
相手との接続確立
話しかけるにしても、いきなり「これお願い!」とは言いませんよね。
話しかけても相手が何かに集中していて、自分がそこいることをわかってないことだってあるでしょう。
相手の「あなたとやりとりできますよ」を確認の上で話し始めないと、残念なことになりがちです。
相手との接続を確立する手段はいろいろあります。
- 「xxさん、ちょっといいですか?」と話しかけて反応を確認する
- アイコンタクトして、目が合ったのを確認する
- Slackとかチャットツールで「今からそちらに行きます!」「了解!」となってから話しかける
- …
接続を確立してから話し始めるだけでもコミュニケーションってずいぶんよくなるような気がします( ̄▽ ̄)
コンピュータ通信の場合
相手との接続確立
「第4層:トランスポート層(ネットワークの端から端までの通信管理)」で、TCPというプロトコルを使います。 TCPはコネクション型なので、通信相手の応答を確認してはじめて通信を開始します。
通信相手の応答を確認するための手順として「3ウェイハンドシェイク」が使われます。 その手順は以下の3ステップです。
- 通信元(From)が「あなたと通信したいです」の情報を通信先(To)に送信する(SYNパケットの送信)
- 通信先(To)が「いいですよ!」の情報を通信元(From)に送信する(SYN+ACKパケットの送信)
- 通信元(From)が「了解です!」と送信先(To)に送信し、コネクションが確立(ACKパケットの送信)
※SYN=Synchronize、ACK=Acknowledge
3が正常に終了すると、通信元(From)も通信先(To)も状態が「ESTABLISHED」となり、 接続が確立状態になります。その後、データを送信していきます。