ハンドシェイクとは

ハンドシェイクは、ネットワーク通信やコンピュータ間で通信を開始する際に、お互いの状態を確認し、通信の確立に必要なパラメータやルールを合意するためのプロセスのことです。

人間が挨拶を交わしてから会話を始める様子に例えて「握手」と呼ばれており、この手順を踏むことで異なる環境にある機器同士が安全かつ確実にデータを交換できる準備を整えます。

ハンドシェイクの目的と重要性

ハンドシェイクの主な目的は、通信の開始に先立って「通信の同期」と「条件の合意」を行うことにあります。これが行われない場合、送信側がデータを送り出しても受信側が準備できていなかったり、データの解釈方法が異なったりすることで、通信の不成立やデータの破損を招く恐れがあります。

1. 通信経路の確立

相手がオンラインであり、通信を受け入れる準備ができているかを確認します。

2. パラメータの交渉

通信速度、パケットのサイズ、使用するプロトコルのバージョン、文字コードなどの仕様を決定します。

3. セキュリティの確保

暗号化通信(SSL/TLSなど)においては、使用する暗号アルゴリズムの選定や、証明書による本人確認、共通鍵の生成などをハンドシェイクの中で行います。

代表的なハンドシェイクの例

プロトコルの種類によって、その手順は多岐にわたりますが、代表的なものにTCPとSSL/TLSがあります。

1. TCP 3ウェイ・ハンドシェイク

信頼性の高い通信を行うTCP(Transmission Control Protocol)では、以下の3つのステップで接続を確立します。

  1. SYN: クライアントからサーバーへ、接続要求パケットを送信します。
  2. SYN-ACK: サーバーが要求を許可し、確認パケットをクライアントへ返します。
  3. ACK: クライアントが確認を受け取ったことをサーバーへ伝え、通信が確立されます。

2. TLSハンドシェイク

HTTPS通信などで用いられるTLS(Transport Layer Security)では、TCP接続の確立後にさらに複雑なハンドシェイクが行われます。これにより、通信の暗号化と相手の真正性が担保されます。

性能評価と通信の効率

ハンドシェイクは確実な通信を支える一方で、データの送受信に先立って行われる「手続き」であるため、ネットワークの遅延(レイテンシ)を発生させる要因にもなります。

通信全体の所要時間

T_{total}

は、ハンドシェイクにかかる時間

T_{handshake}

と、実際のデータ転送時間

T_{data}

の和として表されます。

T_{total} = T_{handshake} + T_{data}

特に、往復のやり取りを何度も必要とする複雑なハンドシェイクでは、送信元と送信先が物理的に離れているほど

T_{handshake}

が増大し、Webサイトの表示速度などに影響を与えます。このため、HTTP/3などの最新プロトコルでは、ハンドシェイクの回数を削減して通信を高速化する技術が導入されています。

運用上の留意点

ハンドシェイクの失敗は、ネットワークトラブルの主要な原因の一つです。

  • タイムアウト: サーバーからの応答が一定時間内にない場合、ハンドシェイクは失敗します。これは、サーバーの過負荷やファイアウォールによるパケット遮断が原因であることが多いです。
  • ミスマッチ: 通信プロトコルのバージョンが互いに対応していない場合や、共通の暗号方式が見つからない場合に発生します。
  • セキュリティ攻撃: 「SYNフラッド攻撃」のように、大量の接続要求(SYN)を送りつけてハンドシェイクの処理待ち状態を作り、サーバーをダウンさせる攻撃手法が存在します。

ハンドシェイクは、複雑な情報通信ネットワークにおいて、機器同士が相互に理解し合い、安全に手を取り合うための不可欠な儀式といえます。

関連用語

プロトコル | 今更聞けないIT用語集
パケット | 今更聞けないIT用語集
クラウドソリューション

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。