連載第6回
TCP/IPアレルギー撲滅ドリル【下位レイヤ編】

Etherealでリアルな
TCPの動きを観察する

福永勇二
インタラクティブリサーチ
2004/9/18


素朴な疑問
事件は現場で……
1 “理屈以上”を知る
道具の準備と使い方
2 どうやって観察するの
3 モニタするのは誰と誰の通信か
4 どんな通信を観察するか
フツーの通信の様子
5 何を観察するか
6 データのやりとりの表
7 最初のSYNの意味
8 Webサーバへのリクエスト
9 どこで画像データを送信するの
10 最後のFINの意味は
大きなファイルを送る
11 どうやって観察するの
12 大きなファイルの特徴
 フツーの通信の様子を見よう

●何をどうやって観察するのでしょうか?

 ここでは、http://www.atmarkit.co.jp/top/mainlogo.gifにある画像(図1)を読み出すときの様子を、この解説で利用している同じマシンのEtherealでキャプチャしました。画像のサイズは2757バイトです。キャプチャしたときの画面は画面1のとおりです。

図1 AtmarkITトップページのロゴ。サイズは2,757バイト

 この画面は、データのやりとりを表すものですが、おそらくこの画面だけでは、やりとりをつかみにくいと思います。そこで、ここでは表示内容をExcelで少し整理してみました。

画面1 ロゴ画像のダウンロードをモニタした様子

 ちなみに、この整理はEtherealの画面を見ながら行ってもいいのですが、ちょっと大変な場合は、キャプチャした内容をテキストファイルに書き出して、それをExcelに読み込んでデータのやりとりを見やすい表の形にすると少し楽になります。キャプチャしたデータをテキストで書き出すには、Etherealの「File」メニューの「Export」を使います。

 この方式で書き出したテキストファイルは図2のようになります。ここでは、図で背景を薄いオレンジ色にした部分を抜き出しました。

図2 Etherealのテキスト出力の一部

●データのやりとりの表を見せてください

 表1がその結果です。Etherealの結果は、A>B(AからBに向けた通信)、B<A(BからAに向けた通信)のように、通信の方向と受信した内容が表示されています。それだとちょっと分かりにくいので、ここでは通信の方向に合わせて、自マシンを右に、接続したWebサーバを左に分けて、やりとりのイメージがわきやすいように並べました。

# time Webブラウザ 192.168.1.49 (4044) 方 向 Webサーバ 211.4.250.170 (80)
flg Seq Ack Win Len MSS flg Seq Ack Win Len MSS
1 0 [SYN] 0 0 16384 0 1460
2 0.018753 [SYN,
ACK]
0 1 5840 0 1414
3 0.018945 [ACK] 1 1 16968 0
4 0.019305 1 1 16968 448
5 0.041515 [ACK] 1 449 6432 0
6 0.044883 1 449 6432 1414
7 0.046129 1415 449 6432 1414
8 0.046214 [ACK] 449 2829 16968 0
9 0.064751 2829 449 6432 317
10 0.066311 [FIN,
ACK]
449 3146 16651 0
11 0.083121 [FIN,
ACK]
3146 450 6432 0
12 0.083273 [ACK] 450 3147 16651 0
表1 ロゴデータのやりとりを表にしたもの(クリックすると拡大、さらに詳細な情報を表示します

 #はやりとりしたパケットの番号、timeは自マシンがパケットを受信した時間、flgは[ACK]など特別な機能を表します。またSeqはシーケンス番号、Ackは肯定確認応答番号、Winはウィンドウサイズ、Lenはデータの長さ、MSS(Maximum Segment Size)は最小セグメントサイズを表しています。ちなみにMSSは、トラックの例でいうとトラックの最大積載量に相当するものです。また備考には、上位プロトコルの情報などを書いています。

●最初のSYNはどんな意味があるのですか?

 #1〜#3ではお互いに[SYN]と[ACK]を送り合っています。これは第1回「TCPの迷宮をさまよってみませんか?」●TCPのキホンのキホンで説明したもので、3ウェイハンドシェークと呼ばれる動作です。この動作で、お互いに通信の開始を確認し合います。

 このときお互いに送り合っているMSSは、一度に送れるデータのサイズを表します。本連載のいい方をすれば「トラックに一度に積めるりんごの数」ということになります。これを最初にお互いに知らせ合っておくわけです。

●Webサーバへのリクエストはどこで送っているのですか?

 WebブラウザがWebサーバに画像を送るように出しているリクエストは、#4で送っています。ちなみに備考のコマンド内容「GET /top/mainlogo.gif HTTP/1.1」は、コマンドの冒頭を抜き出したものです。送出した全コマンドを見たい場合には、Ethereal画面でそのデータを選択してください。画面2のようにコマンドを見ることができます。

画面2 httpコマンドをEtherealで見る

 また#4への[ACK]を示しているのが#5です。この[ACK]のAck欄に書かれている数値「449」は、次に受信したい情報の番号です。肯定確認応答[ACK]で、次に送ってほしい番号を送ることは、第5回「それでも不正確なデータを受け取ったらどうするの?」●送信データが消えてしまうケースを追うで説明していますので、参照してください。

 なお、この数値は1バイトを送るたびに1ずつ増えるようになっています。#4で、シーケンス番号1から始まる、448バイトのデータを送ったところ、#5で送られた[ACK]では、Ackの値が449になっていて、次のデータとして449バイト目から送るよう要求していることが図から読み取れます。

●Webサーバはどこで画像データを送信していますか?

 Webサーバからの画像のデータは、#6、#7、#9で送信しています。ここでまず注目する点は、データが3つに分割されていることです。画像のファイルサイズは2757バイトですが、WebサーバがHTTPに関連する情報を加えるので、送り返されるデータはこれより多くなります。しかしトラックのサイズ(MSS)は1414バイトですから、1414バイトずつ、3回に分けて送信されているわけです。

 ここで面白いのは、#6と#7は、[ACK]を受信することなく、連続して送信している点です。これは通信の効率を上げるためのTCPの特徴です。[ACK]を受信しなくてもなぜ大丈夫なのかは、第2回「ITオンチにTCPのセボネを見る」●「ひとまとめ」と「連続送り」を図で説明してくださいで説明していますので、参照してください。

 ところで、#6、#7と2つのデータを受信しておきながら、Webブラウザは#8の[ACK]を1つだけしか送っていません。これはどうしてでしょうか。この謎を解く鍵は、#8のAckの値が2829になっている点にあります。

 #8の[ACK]の値が2829になっているということは、次のシーケンス番号として2829をリクエストしている、ということです。#6でWebサーバが送出したデータは1414バイト、#7でも同じく1414バイトですから、2829バイト目をリクエストするこの[ACK]は、#7に対する[ACK]ということになります。

 では#6に対する[ACK]は送らなくてもよいのでしょうか? そう、送らなくても大丈夫です。その理由は、第5回「それでも不正確なデータを受け取ったらどうするの?」●肯定確認応答が届かないケースを追うに書いてあります。TCPは、途中の[ACK]が到着しなくても、最後のデータに対する[ACK]が受信できれば、そこまではすべてOKと見なします。ここではその特性を積極的に利用して、わざと途中の[ACK]を省略し、最後の[ACK]だけを送ることで、通信効率を上げているわけです。こういった細かいテクニックは実にニクイばかりです。

 なお、#9で受信したデータに対する[ACK]は、#10で[FIN]と一緒に送られています。このことは、Ack欄の値が3146になっていることから読み取れます。#9で、シーケンス番号2829で始まる317バイトのデータを受信したので、その次のデータは3146になるわけです。

●最後のFINはどんな意味があるのですか?

 #10〜#12では、お互いに通信の終わりを表す[FIN]を送り合って通信を終わっています。それぞれが[FIN]を送り合うのは、[SYN]の場合と同じように、相互に通信を終える手順を踏むルールになっているためです。

道具の準備と使い方

TCP/IPアレルギー撲滅ドリル【下位レイヤ編】(6)目次
1  TCP再送は現場で起きている/道具の準備と使い方
2  フツーの通信の様子を見よう
3  大きなファイルを送る様子を見よう

関連リンク
  連載:TCP/IPアレルギー撲滅ドリル【超実践編】(上位レイヤ編)
連載:インターネット・プロトコル詳説

連載:ルータの仕組みを学ぼう
ホストのネット接続は正しく行われているか? 〜netstatによるネットワーク設定の確認〜

「Master of IP Network総合インデックス」


Master of IP Network フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Master of IP Network 記事ランキング

本日 月間