PR

 ネットワークでやりとりされるパケットにはTCPによるものとUDPによるものがある。UDPはDNSやDHCPといったプロトコルで使われるものの、やりとりされるパケットの数はHTTPで主に使われるTCPのほうが圧倒的に多い。

 Part5では、Wiresharkを使ってTCP通信のシーケンスを確認しよう。正しいシーケンスを知っておけば、TCPに関連するトラブルへの対処にも役立つ。

最初にコネクションを確立

 TCPの特徴は、パケットを確実にやりとりできる仕組みを備えていることだ。

 TCPによる通信のシーケンスは、(1)コネクションの確立、(2)データのやりとり、(3)コネクションの終了の3つの段階に分けられる(図5-1)。

図5-1●3回やりとりしてコネクションを確立するTCP
図5-1●3回やりとりしてコネクションを確立するTCP
TCPでは、データをやりとりする前に3ウエイハンドシェークでコネクションを確立する。
[画像のクリックで拡大表示]

 コネクションは、確実に通信できるように確保する仮想的な通信路を指す。コネクションを確立するために、TCPで通信を行う機器は通信相手とやりとりする。このやりとりをハンドシェークと呼ぶ。

 TCPでは、コネクションを確立して初めてデータのやりとりを始められる。データのやりとりが終わると、コネクションを終了する。このような仕組みを採用することで、第三者が送信元を偽って通信するといった攻撃を防ぐ。

 TCPのハンドシェークでは、コネクションを確立するために、通信を開始する機器と送信相手の間でパケットを3回やりとりする。これを「3ウエイハンドシェーク」と呼ぶ。

 3ウエイハンドシェークではまず、通信を開始する機器が、同期を表す「SYN」という特性が記されたTCPパケットを通信相手に送る。これを受け取った通信相手は、同期を表すSYNと承諾を表す「ACK」が記されたTCPパケットを送信元に返す。通信を開始した機器がSYN+ACKのTCPパケットを受け取ったら、通信相手にACKのTCPパケットを送る。これら3回のやりとりでTCPのコネクションを確立する。

Wiresharkでやりとりを見る

 TCPの3ウエイハンドシェークで行われるこうしたやりとりをWiresharkで確認してみよう。

 パソコン上でWiresharkを起動し、ネットワーク内のプリンターやサーバーなどにアクセスする。パケットキャプチャーが終わったら、キャプチャー結果をファイルに保存する。

 次に、表示するパケットを表示フィルターで絞り込む(図5-2)。例えばTCPパケットだけを表示するには、画面上部の表示フィルターに「tcp」を入力してEnterキーを押す。ただ、tcpでフィルタリングしても表示されるパケットはあまり減らない。

図5-2●3回やりとりしてコネクションを確立するTCP
図5-2●3回やりとりしてコネクションを確立するTCP
通信相手とやりとりするデータを最初から確認したところ。3ウエイハンドシェークでコネクションを確立してから、データのやりとりを開始していることが分かる。
[画像のクリックで拡大表示]