TCP/IPアレルギー撲滅ドリル【総まとめ編6回目】

Webアクセス中のHTTPパケットの中身をみる

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


素朴な疑問
Webアクセスをのぞき込む
1 HTTPってなんでしたっけ?
2 HTTPパケットのやりとりを見せてください
3 HTTP要求パケットを見せてください
4 HTTPの応答パケットを見せてください

 Webアクセスをのぞき込む

 TCP/IPアレルギー撲滅ドリルの総まとめ編では、パケットのうごきをおさらいするためのツール、Etherealを使って、arpとDNSの動きを見てきました。ツールのメリットや使い方を知りたい方は「Etherealでパケットの実物を捕まえて中身をのぞき込もう」を、IPアドレスからMACアドレスを得るときに使うプロトコルの「arp」の動きを確認されたい方は、「Etherealでarpパケットをのぞき込もう」を、DNSへの問い合わせと回答のやりとりをのぞきたい方は、「DNSへの問い合わせをEtherealでのぞき込む」を参照してください。一連のシリーズの説明は今回のHTTPパケットでおしまいです。さあ、気になっているHTTPプロトコルの中身を見てみましょう。

HTTPってなんでしたっけ?

 HTTPはWebアクセスに使うプロトコルです。Webサーバに対して、見たいページのhtmlを要求したり、またデータをアップロードすることができます。

・HTTPについてはHTTP語でWebブラウザとしゃべってみようを参照してください

HTTPパケットのやりとりを見せてください

 画面1でHTTPでのやりとりを見て取れます。No.4は192.168.1.5(観察対象PC)から210.131.249.57(www.atmarkit.co.jp)に送ったHTTPコマンドです(E)。またNo.6は210.131.249.57から戻ってきたレスポンスです(F)。

画面1 HTTPでのやりとり

・HTTP要求パケットを見せてください

 画面2がHTTPコマンドを送るパケットの中身です。

画面2 HTTPリクエストの内容(図クリックで拡大表示)

 画面2図1の(E)-4のパケットを表しています。また画面2の左端の記号(E)-1〜(E)-4は、図1の同じ記号で表した各処理段階に対応します。

図1 HTTPコマンドの流れ

 パケット内容を見てみます。イーサヘッダのSourceは00:0d:0b:26:36:3d(192.168.1.5)、Destinationは00:80:87:96:59:e1(192.168.1.1)となっています。一方、IPヘッダではSourceが192.168.1.5、Destinationが210.131.249.57になっており、両者は一致していません。これはなぜでしょうか?

 答えは210.131.249.57がほかのネットワークのコンピュータであることによります。同じネットワークにないコンピュータにあてたパケットは、あて先IPアドレスとは無関係に、一般にデフォルトルータに送り届けなければなりません。そのためパケットの配送に直接関係するイーサヘッダでは、あて先にデフォルトゲートウェイである192.168.1.1が設定されているわけです。

 このほか、IPヘッダのProtocolがTCPとなっていて、上位プロトコルがTCPであることを読み取れます。

 TCPヘッダの中には、TCPのところで説明したキモがいくつか読み取れます。Destination portはHTTPコマンドを送るポートの番号です。HTTPは普通80番です。Sequence numberはTCPがデータに付与した番号で、これを使ってデータの到着や再送を管理します。Acknowledgement numberは肯定応答を相手に伝えるときに番号を格納するフィールドです。またWindow sizeはTCPのウィンドウサイズを表しています。

 またHTTPコマンドの中では、コマンドがGET(Request Method: GET)、アクセスするロケーションが/fnetwork/rensai/tcp10/03.html(Request URI: /fnetwork/rensai/tcp10/03.html)、リクエストバージョンがHTTP/1.1(Request Version: HTTP/1.1)、ホスト名がwww.atmarkit.co.jp(Host: www.atmarkit.co.jp)であることが読み取れます。そのほか、Cookie情報やユーザーエージェントなども送っています。

・ほかのネットワークとの通信についてはルータ経由の場合のリクエスト送信の図解を参照してください
・シーケンス番号については「シーケンス番号」って何ですか?を参照してください
・肯定確認応答についてじゃあ「肯定確認応答(ACK)」は?およびここが難関! 分かりやすく説明してくださいを参照してください
・ウィンドウサイズについては忙しさを知らせる方法を教えてくださいを参照してください
・HTTPのメッセージについてはサーバとはどんなメッセージをやりとりするんですか?を参照してください

HTTPの応答パケットを見せてください

 画面3はWebサーバから送り返されたHTTPの応答パケットの中身です。

画面3 HTTP応答の内容

 画面3図2の(F)-4のパケットを表しています。また画面3の左端の記号(F)-1〜(F)-4は、図2の同じ記号で表した各処理段階に対応します。

図2 HTTPコマンドの流れ

 パケットの中身を見ましょう。このパケットは、ほかのネットワークにあるサーバからの応答なので、イーサヘッダのSourceはデフォルトゲートウェイを表す00:80:87:96:59:e1(192.168.1.1)になっています。一方、IPヘッダではSourceは210.131.249.57となっており、要求パケットの場合と同様に、両者は一致しません。なお、あて先を表すDestinationはどちらも自分自身が指定されています。またIPヘッダのProtocolにはTCPが指定されています。

 TCPヘッダではSource portが80であることが読み取れます。これは80番に送ったコマンドへの応答が80番から送られてくることを意味しています。またコマンドを含んでいたパケットと同様にSequence number、Acknowledgement number、Window sizeを見て取ることができます。

 HTTPの応答を見ると、まずステータスコードが正常(Response code: 200)となっていて、正しくデータを取得できたことを表しています。またこのほかに、送り返したデータのタイプ(Content-Type: text/html)や日付などが含まれています。

 なお、返送されてきた結果(html)はこのパケットに入り切らなかったため、次のパケット以降に順次送られています。

・HTTPのステータスコードについてはWebサーバが送ってきた結果はどうやって見ればいいんですか?を参照してください

 今回で、アレルギー撲滅ドリル【総まとめ編】はおしまいです。これまで図で説明してきたパケットの流れを、実際のパケットの中身で見てゆきました。、ボンヤリしていたものが、少しでもはっきり見えてきたら幸いです。

関連リンク
  連載:TCP/IPアレルギー撲滅ドリル【超実践編】(上位レイヤ編)
連載:TCP/IPアレルギー撲滅ドリル【超実践編】(下位レイヤ編)
連載:インターネット・プロトコル詳説
連載:ルータの仕組みを学ぼう
ホストのネット接続は正しく行われているか? 〜netstatによるネットワーク設定の確認〜







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


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

注目のテーマ

Master of IP Network 記事ランキング

本日 月間