人間の会話とコンピュータ通信を比較してみる:3ウェイハンドシェイク

アメブロで書いてたものをこっちに移転するにあたって、リメイク。 元記事は↓でした。 ameblo.jp

はじめに

コンピュータ同士で渡したいデータを抜け漏れなく渡すことを担保する仕組みの1つとして、

「3ウェイハンドシェイク」があります。

これと人間の会話を比較してみると?という内容です。

f:id:jinka1997:20180916225021p:plain

相手とやり取りをする時…

「ちゃんと聞いてもらえない!」って感じてしまうことがありませんか?

でも、相手は聞ける状態になっていたのでしょうか?

相手は自分に話しかけれたと思ってないかもしれません。

コンピュータ同志が通信する時、いきなりデータを相手に送り付けているのでしょうか?

そんなことはありません。

「相手との接続確立」のための通信が先に行われます。

自分は相手に送っても大丈夫な状態、相手は送られても大丈夫な状態にする。

それからの通信です。

人間の会話だと?

相手との接続確立

話しかけるにしても、いきなり「これお願い!」とは言いませんよね。

話しかけても相手が何かに集中していて、自分がそこいることをわかってないことだってあるでしょう。

相手の「あなたとやりとりできますよ」を確認の上で話し始めないと、残念なことになりがちです。

相手との接続を確立する手段はいろいろあります。

  • 「xxさん、ちょっといいですか?」と話しかけて反応を確認する
  • アイコンタクトして、目が合ったのを確認する
  • Slackとかチャットツールで「今からそちらに行きます!」「了解!」となってから話しかける

接続を確立してから話し始めるだけでもコミュニケーションってずいぶんよくなるような気がします( ̄▽ ̄)

コンピュータ通信の場合

相手との接続確立

「第4層:トランスポート層(ネットワークの端から端までの通信管理)」で、TCPというプロトコルを使います。 TCPはコネクション型なので、通信相手の応答を確認してはじめて通信を開始します。

通信相手の応答を確認するための手順として「3ウェイハンドシェイク」が使われます。 その手順は以下の3ステップです。

  1. 通信元(From)が「あなたと通信したいです」の情報を通信先(To)に送信する(SYNパケットの送信)
  2. 通信先(To)が「いいですよ!」の情報を通信元(From)に送信する(SYN+ACKパケットの送信)
  3. 通信元(From)が「了解です!」と送信先(To)に送信し、コネクションが確立(ACKパケットの送信)

※SYN=Synchronize、ACK=Acknowledge

3が正常に終了すると、通信元(From)も通信先(To)も状態が「ESTABLISHED」となり、 接続が確立状態になります。その後、データを送信していきます。