第16回 信頼性のある通信を実現するTCPプロトコル(3) : 基礎から学ぶWindowsネットワーク (4/4 ページ) 
 それでは実際にTCPプロトコルの通信例を見てみよう。ここではオープン、データ通信、クローズにおける典型的な例を取り上げてみる。より理解を深めるためには、Windows Server OSに含まれているネットワーク・モニタなどを使って、実際のパケットのやりとりを観測するのが望ましい。ネットワーク・モニタについては別稿の「Windowsネットワーク・プロトコルの理解と検証 」を参照していただきたい。
 すでに述べたように、TCPのオープン処理は「3ウェイ・ハンドシェイク」というシーケンスに沿って行われる。実際にネットワーク・パケットをキャプチャして観測すると、その特徴的なパターンにより、すぐに見つけることができるだろう。
 以下は、あるマシン(マシン名は「CLIENT」。OSはWindows XP Professional)から、Webサーバ(マシン名は「SERVER」。OSはWindows 2000 Server)に対して、HTTPプロトコルで通信を行っているところである。この例では、CLIENT側からSERVER側に対して、最初にオープン要求を送信している。つまりCLIENT側がアクティブ・オープン、SERVER側がパッシブ・オープンを実行している。
 オープン時に渡されるシーケンス番号に対して、受信確認のACK番号が+1されていることに注意していただきたい。これはSYNフラグも1byte分のシーケンス番号を占めるからである。
TCPのオープンにおける通信の例 (1) クライアントからサーバへのアクティブ・オープン要求。 (2) (1) (3) (4) (5) (6) (5) (7) (8) (7) (9) (10) (11) (12) (13) (14)  
 次はデータの送信処理を見てみる。
 データを送信すると、必ずそれに対応する受信確認のためのパケットが返信される。ただしこの受信確認は、データを受け取るたびにすぐ行われるのではなく、いくらかまとまった量のパケットを受信したり、最後の受信からある一定時間が経ったりしてから送られる。逐一受信確認を送信すると、パフォーマンスが悪くなるし、ウィンドウ制御によってまとめて受信できるようになっているので、すぐに応答する必要もないからである。
データの送信とその受信確認 (1) SERVERからCLIENT側へデータを送信している。 (2) (1) (3) (4) (5) (6) (5)  
 終了時のパケットのやりとりも、ある決まったパターンがある。まず通信を終了させたい方がF(終了)フラグのセットされたパケットを送信すると、相手がそれに対してACKを返す。さらに相手もFフラグのセットされたパケットを送信し、それに対してACKが返される。Fフラグもシーケンス番号を1つ占めるので、ACK番号はそれぞれ+1されていることに注意していただきたい。
クローズ処理 (1) 一番最初にSERVERからCLIENTへ向けてクローズ要求が送信されている(アクティブ・クローズ)。 (2) (1) (3) (4) (3) (5) (6) (7) (8)  
「連載 基礎から学ぶWindowsネットワーク ―― Windowsネットワーク管理者への道 ――  」
 
Copyright© Digital Advantage Corp. All Rights Reserved.