応用情報技術者試験 令和元年 秋季試験 問5:ネットワークを解説していきます。
出題テーマ:HTTP/2
令和元年 秋季試験 問5:ネットワークの出題テーマとしては『HTTP/2』です。
テーマではあるのですが問題を解くにあたり『HTTP/2』に関する知識は必要ありません。
もちろん知識があるに越したことはありません。
TCPに関する『3wayハンドシェイク』や『送信元ポート番号や宛先ポート番号』というような知識があれば解答することができた問題でした。
『3wayハンドシェイク』は午前問題でも出題される内容ですので、難易度はそこまで高くないと思います。
普段何気なくWebページを閲覧していますが、Webを閲覧する際に多く『HTTP/2』が使用されています。
HTTPのバージョンのシェア率が毎年発表されますが、2021年現在では『HTTP/2』が約50%ほど使用されており、今後も伸びていくとの予想がされています。
その次シェア率としては『HTTP/1.1』が用いられ、少数の限られたサイトでは『HTTP/3』も登場しています。
この問題で触れることができるのは『HTTP/2』の表面部分だけではありますが、どのような仕組みで行われているのか問題を解きながら触れていきましょう。
設問1 (1)
この問題は少し知識が必要となる問題です。
『TCP/IPでサーバとブラウザが通信を行うために必要なサーバの【a】が枯渇し、新たなTCPコネクションが確立できなくなったと考えた。』とあります。
TCPはL4層・トランスポート層の技術ですので、選択肢を見るとIPアドレスはL3層・ネットワーク層の技術ですので選択肢から外すことができます。
プロセスも一見すると正解っぽいですが、L7層・アプリケーション層などで用いる言葉ですので選択肢から外すことができます。
『送信元IPアドレス:送信元ポート番号 宛先IPアドレス:宛先ポート番号』の組み合わせのことをソケットと呼びます。
PCがサーバへアクセスする場合、宛先IPアドレスに入るべきはサーバのIPアドレスですし、宛先ポート番号はWeb(HTTP)サーバなら80番のように固定されています。
なので、サーバ側のポートは固定であるため枯渇するということは起こりえません。
よって解答としては『イ:ソケット』と解答することができます。
ソケット≒TCPコネクションというイメージを持っておくと今回の問題は解きやすいかと思います。
設問1 (2)
『多数のWebブラウザ(以下、ブラウザ)からのアクセスをシミュレートする負荷テストツールを用いて、開発した新システムの性能テストを行った。性能テストの結果、同時にアクセス数が、32ユーザを超えるとアクセスエラーが発生した。』と記載があります。
サーバのログには『TCPコネクションを確立できないという内容のログが多く残っていた。』とあります。
また、『サーバの【a】(ソケット)の最大数は128に設定されていた』ともあります。
サーバのソケット(≒TCPコネクション)の最大が128ですが、32ユーザでこれ以上TCPコネクションを確立できないというエラーメッセージが表示されるのであれば、ユーザ(ブラウザ)側が複数のTCPコネクションを確立しているのではと考えることができます。
よって解答例としては『複数のTCPコネクションを確立する手法(19文字)』と解答することができます。
設問2
【b】について考えていきます。
『HTTP/1.1 over TLSを用いてブラウザとサーバが通信するとき、ブラウザからサーバの【b】番ポートに対して』とあります。
HTTP/1.1 over TLSはいわゆるHTTPSのことです。
HTTPS(TLS)はTCP443番を用いますので、解答としては『ウ:443』と解答することができます。
【c】、【d】、【e】についてまとめて考えていきます。
TCPコネクションを確立するために一番最初に何をするかと言えば、SYN・SYN/SCK・ACKを行う3wayハンドシェイクを行います。
よって解答としては『c キ:SYN』、『d ク:SYN/ACK』、『e エ:ACK』となります。
設問3
なぜ画像ファイルの取得に時間がかかるかというと、図3の通信フローを確認すると、ブラウザが画像を表示したいというリクエストである『get image001.jpg』を送り、サーバ側が『image001.jpg』と画像ファイルを送信しています。
ブラウザ側は『image001.jpg』の受信を待って、次の画像ファイルの『get image002.jpg』のリクエストを行っています。
これが順番順番に行われています。
フローで見ると問題なさそうに見えますが、現実問題に置き換えて考えてみましょう。
例えばコンビニでレジ前に置いてあるようなチキンを2つくださいと言えば、店員さんはチキンを2つ袋に入れてくれます。
今回のフローに例えるなら、チキンをくださいと言い、店員さんがチキンを袋に入れて、レジに戻ってきます。
これを待ってからもう一度チキンをくださいと言い、店員さんがチキンを袋に入れてくれるというようなフローとなっています。
1個ずつ頼むんじゃなくて一気に頼めよとか、店員さんが袋に詰めているときにもう1個くださいと言えよと思いますよね。
ということで、解答としては『ウ:画像ファイルを一つずつ順番にサーバに要求し取得している。』と解答することができます。
設問4 (1)
先程の問題、設問3に関連した問題となっています。
図3にあるようにこれまでは画像ファイルを表示したいというリクエストを送り、画像ファイルの受信を待って、次の画像ファイルのリクエストを送っていました。
HTTP/2を用いることで複数のファイルを並行して受信可能になることで、前の画像ファイルの受信を待たずに次の画像ファイルのリクエストを送信することができるようになります。
よって回答例としては『前の画像ファイルの受信完了を待つ時間(18文字)』と解答することができます。
設問4 (2)
これまでは複数のTCPコネクションを用いて通信を行っていました。
計算すると1ユーザ(ブラウザ)あたり4つのTCPコネクションを使用していました。
HTTP/2を用いることで『HTTP/2では、一つのTCPコネクションを用いて、複数のファイルを並行して受信するストリームという仕組み』とあるように、1つのTCPコネクションになるとのことですので、ソケット数(TCPコネクション数)=ユーザ数になると考えることができます。
よって解答としては『128』と解答することができます。
公式解答例との比較・予想配点
出題テーマは『HTTP/2』でしたが、知識としては『HTTP/2』が問われずTCPに関する内容が問われる問題でした。
『HTTP/2』の表面に触れることができる良い問題だったと思いますし、TCPの知識および選択問題が多めでしたので、難易度は低かったと思います。
『HTTP/2』を用いることでWebの閲覧にかかる時間が少なからず短縮されますので、いちユーザとしては嬉しい限りです。
一方エンジニア目線ですと嬉しい限りとは言えません。
HTTP/1.1の1つリクエストをしてそのレスポンスを待って次のリクエストをするということは、シーケンスがわかりやすくトラブルシューティングがしやすいというメリットがあります。
HTTP/2はレスポンスを待たずにリクエストを送信することによりシーケンスを辿ることが困難になり、トラブルシューティングがしづらくなるというデメリットがあります。
Web周りは技術の進歩が早く、冒頭でも申し上げましたがすでに『HTTP/3』も登場しています。
ネットワークエンジニアとしてはHTTPの知識も少なからず求められますので、勉強して食らいついていくしかありません。。
配点 |
|||
設問1 (1) | イ | イ | 2点 |
設問1 (2) | 複数のTCPコネクションを確立する手法(19文字) | 同時に複数のTCPコネクションを確立する方法 | 3点 |
設問2 | b:ウ c:キ d:ク e:エ |
b:ウ c:キ d:ク e:エ |
各2点 |
設問3 | ウ | ウ | 2点 |
設問4 (1) | 前の画像の受信完了を待つ時間(14文字) | 前の画像ファイルの受信完了待ち | 3点 |
設問4 (2) | 128 | 128 | 2点 |
引用元
問題および解答例に関しては、独立行政法人 情報処理推進機構(IPA)より引用しています。