今日は、平成22年度秋期ネットワークスペシャリスト午後I 問1を解こうと思います。
問題文および模範解答(解答のみ、解説はありません)は下のリンクからどうぞ。
※IPAのサイトで公開されているPDFにリンクしています
各問解説
設問1
(1)
ア、イ
空欄 [ ア ] [ イ ] の直前の問題文には『HTTPクライアントとHTTPサーバ間の通信では、大量のデータを位置方向に転送するバルクデータ転送と、比較的少量のデータを相互に転送する対話型データ転送とが混在している』とあります。よって [ ア ] [ イ ] の一方が『バルク転送』、もう一方が『対話型データ転送』となるのは、用語の意味をまったく知らなくても見当がつくでしょう。
問題文の続きを読むと『 [ ア ] の応答性能は、ラウンドトリップ時間の影響を受ける。ラウンドトリップ時間とは、TCPコネクションにおけるパケットの往復時間である』『一方、[ イ ] の応答時間は、ラウンドトリップ時間の他、ボトルネックとなる中経路の帯域幅と、確認応答を待たずに送信できるデータ量である [ ウ ] によっても変化する』とあります。
[ ア ] は『往復にかかる時間』、[ イ ] は『帯域幅や確認応答を待たずに送信できるデータ量』の影響を強く受けると読み取れますので、
[ ア ] は通信の往復回数の多い『対話型データ転送』
[ イ ] は一度に送信するデータ量の多い『バルク転送』であるとわかります。
ウ
TCPで『確認応答を待たずに送信できるデータ量』といえば、『ウィンドウサイズ』です。
(2)
TCPの通信手順
まず、TCPの通信手順をおさらいしましょう。
・コネクション確立
TCPでは、クライアントとサーバが通信を行うためには最初にコネクション確立する必要があります。コネクション確立は以下の手順です。
- クライアントがサーバにSYNを送信する
- サーバがクライアントにSYN+ACKを返す
- クライアントがACKを返す
この1往復半のやりとりを3ウェイハンドシェイクといいます。
・データ転送
- 大量のデータを転送する場合、受信側はウィンドウサイズを送信側に通知する
- 送信側は指定されたウィンドウサイズまでデータを転送する
- 受信側はデータを受信すると、確認応答を返す
- 送信側は受信側からの確認応答を受信すると、余裕ができた分だけ続きのデータを転送する
- 3~4を、すべてのデータの転送が終了するまで繰り返す
データ転送中は、このようなフロー制御が行われています。
・コネクション終了
TCPコネクションの終了は、多くの場合は以下のような手順で行われます。
(以下はサーバ側から先に切断する場合ですが、クライアント側から切断する場合もサーバとクライアントが入れ替わるだけでまったく同じです)
- サーバがクライアントにFINを送信する
- クライアントはサーバからのFINを受信するとACKをサーバに返す
- クライアントがサーバにFINを送信する
- サーバはクライアントからのFINを受信するとACKをクライアントに返す
このような手順を4ウェイハンドシェイクといいます。
HTTPの通信手順
アプリケーションレベルのプロトコル、HTTPについてもおさらいしておきましょう。HTTPは非常に単純なプロトコルで、基本的には以下の一往復のやり取りだけで完結します。
- クライアントがWebサーバに対して、サーバ上のリソース(htmlファイルなど)を要求するコマンドやブラウザの環境などの情報をまとめた『リクエスト』を送信する
- サーバがクライアントに、要求されたリソースにタイムスタンプやデータサイズなどの情報を付加した『レスポンス』を送信する
以上を踏まえて図3をみると、
①のSYN、その直後のサーバからのSYN,ACKは、コネクション確立の3ウェイハンドシェイクの一部だと判ります。ということは、②はACKです。
③からが通信の本体です。これはHTTPの通信なので、最初にクライアントからサーバに対してHTTPリクエストが送信されているはずです。よって、③はGETなどのHTTPリクエストであると判ります。
その後、サーバからFINが送られる前までは、サーバからクライアントに対してHTTPレスポンスが送信されています。レスポンスのサイズが大きいためパケットは複数に分けられますが、サーバはウィンドウサイズまでパケットを次々に転送します。④と⑤はそれに対するクライアントからの確認応答だと思われます。
⑥の直前にサーバからクライアントに送られたFIN以降は、TCPコネクションを切断する4ウェイハンドシェイクです。
以上より、GETリクエストが送られたのは『③』です。
(3)
(2)での説明でだいたい判ると思います。
TCPコネクション確立までの時間は、クライアント側はサーバからのSYN+ACKを受信し、クライアントからサーバに対してACKを送信した時点でコネクションが確立していると考えると、t1+t2 となります。サーバがACKを受信するまで、という考え方もありますが、その時間はt3の途中になってしまい図中からは読み取れません。よって、t1+は既に書かれているので、 [ エ ] は 『t2』となります
(2)での説明の通り、ダウンロード(サーバからのデータの転送)完了は⑤の時点です。よって、TCPコネクション確立完了からダウンロード完了までの時間 [ オ ] は『t3+t4+t5』となります。
ダウンロード完了からTCPコネクションの切断と情報の表示が友に完了するまでの時間は、図3の一番下に『Webページの表示完了』とあるので、t6+t7+t8+t9です。+t9は既に書かれているので、 [ カ ] は『t6+t7+t8』となります。
キャッシュの情報が最新だった場合、図3の③に対するレスポンスとして『304 Not Modified』が返され、その後の⑤の送信までのやりとりがなくなります(⑤より下の部分をt4に重なるようにずらすイメージ)。よって [ キ ] は『t4+t5』となります。
設問2
(1)
『プロキシサーバのアクセス順序を変更する』とは、
PC → プロキシ1 → プロキシ2 → Webサイト
となっていたのを、
PC → プロキシ2 → プロキシ1 → Webサイト
とすることでしょう。プロキシ1とプロキシ2のIPアドレスを入れ替えただけでは正常に動作せず、以下の変更が必要になります。
・proxy.pacをプロキシ1からプロキシ2に移動する(中に書かれているIPアドレスは、2つのプロキシでアドレスを入れ替えるため変更の必要はない)
・アクセス順序変更後はプロキシ2からWebサーバではなくプロキシ1にアクセスするようになるため、プロキシ2のプロキシサーバとしてプロキシ1を定義する
・アクセス順序変更後はプロキシ1からはプロキシ2ではなくインターネット上のWebサーバにアクセスようになるため、プロキシ1上のプロキシサーバの定義を削除する
(2)
(1)でのプロキシのアクセス順序変更を行っても、プロキシ1の先読み機能が有効ならばプロキシ1からインターネットへは多数のアクセスが発生します。よって、プロキシ1からインターネットへの経路上にボトルネックとなる部分が存在します。
図1より、プロキシ1からインターネットへのアクセスはL2SWとファイアウォールを経由しますが、より複雑な処理を行うファイアウォールがボトルネックになると思われます。よって解答は『ファイアウォールの処理能力』となります。
設問3
設問2(1)でプロキシのアクセス順序を変更しているので、装置は左から順に『PC(ブラウザ)』『プロキシ2』『プロキシ1』『ファイアウォール』とするのが画きやすいでしょう。プロキシ1、2を逆に配置して矢印を回り込むように描いても間違いではないでしょうが…。
TCPコネクションについては、
『CサイトアクセスによるTCPコネクション』は PC~プロキシ2、プロキシ2~プロキシ1、プロキシ1~ファイアウォール、ファイアウォール~Cサイトのすべて
『先読みによるTCPコネクション』は、先読み機能を持っているのがプロキシ1なので、 プロキシ1~ファイアウォール、ファイアウォール~ほかのWebサイト
となります。以上を凡例に従って記入すればいいでしょう。
コメント