ネットワークスペシャリスト - SE娘の剣 -

左門至峰によるネットワークスペシャリストの試験対策サイトです。勉強方法、合格体験談、合格のコツ、過去問解説、基礎知識などの紹介します。

HTTP(HyperText Transfer Protocol)

1.HTTP(HyperText Transfer Protocol)とは

❶WWWとWeb
webの英単語そのものの意味は「クモの巣」である。
WWW(World Wide Web)は世界中に張りめぐらされたクモの巣のようなネットワークである。WWWは仕組みや概念を表すものである。WWWサーバやWWWクライアント(主にブラウザ)、URLを利用することで、HTMLというと統一したフォーマットにて簡単に情報の発信と閲覧ができるようにする仕組みである。

❷HTTPとは
HTTP(HyperText Transfer Protocol)とは,インターネットの基本となるプロトコルです。Yahoo!などのWebサイトを閲覧する場合は、このHTTPというプロトコルが利用されます。
Web閲覧はHTTPと考えればいいのですが、URLを入力するときに、http://~ で始めることから、なじみ深いことでしょう。

HTTP(HyperText)の意味ですが、通常のテキスト文書よりすごい(super)だけでなく、とびぬけてすごいという意味のハイパー(Hyper)です。
基本的にはHTML(Hyper Text Markup Language)という言語でWebサーバのコンテンツは作られますが、確かにリンクや画像や動画なども記載できるので、ハイパーな言語であるとも感じます。

❸HTTPのバージョン
HTTPプロトコルにはいくつかのバージョンがあります。
主流はいまだにHTTP/1.1ですが、HTTP/2が2015年、HTTP/3が2018年にRFCとして文書化されています。

2と3については追々書くとして、http/1.0と1.1について。
http/1.0は一つのTCPコネクション(=3wayハンドシェーク)にて、1つのHTTP Requestしか送れません。
通常、Webページには複数の画像などもあるため、たくさんのRequestを送ります。その都度TCPコネクションをはるのは無駄です。
そこで、HTTP/1.1では、1つのTCPコネクションで複数のHTTP Requestが送れるようになりました。

❹HTTPSとは
https(HTTP over SSL/TLS)とは、そのフルスペルの通り、HTTPをSSLやTLSを使うことで、暗号化して安全に通信を行うことです。
最近ではGoogle検索もhttpsによる暗号化通信になりました。
オンラインバンキング使うと、https://~で始まるURLが表示され、バーの部分が緑色になったりします。また、証明書の確認もできます。
※以下は三菱東京UFJ銀行のオンラインバンキングのサイトを開いた画面です。
UFJ

❺【参考】HTTPのプロセス
HTTPの通信をパケットキャプチャしてみると、以下のような流れがわかる。
1)Client→Server GET /index.html HTTP/1.1 ←1.1はHTTPのバージョン。旧バージョンは1.0
2)Client←Server HTTP/1.1 200 Document follows ← 応答コード200(OK)
3)Client←Server HTMLデータ
2


あれ?
3way-handshakeは無いのですか?
いや。あるよ。厳密には、上記の1)~3)の前後にも、TCP/IPのオーバーヘッドが間に入る。
X)Client→Server 3way-handshake SYN
X)Client←Server 3way-handshake SYN,ACK
X)Client→Server 3way-handshake ACK
1)Client→Server GET /index.html HTTP/1.1
2)Client←Server HTTP/1.1 200 Document follows
X)Client→Server ACK
3)Client←Server HTMLデータ

2.httpのリクエストとレスポンス

(1)HTTPのリクエストとレスポンス

以下の図で考えます。PCのブラウザから、http://nw.seeeko.comというサイトを閲覧したとします。このとき、Webサーバに対して、「ページを表示してください」とお願いするのがHTTPリクエストです。それに対して、WebサーバからPCのブラウザに対し、実際のページの情報(文字や画像、動画など)を返すのが、HTTPレスポンスです。

過去問(H25SC秋午後Ⅱ問1)にリクエストとレスポンスの具体例があるので掲載する。
見てもらうと分かるが、リクエストはGETなどで情報を取得に行く。
レスポンスは、「200 OK」などの、HTTPのステータスコードからはじまる。

❶リクエスト

GET /javarhino/ HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg,
image/pjpeg, application/×-shockwave-flash., */*
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1; SVl)
Host: D.D.D.D
Connection: Keep-Alive

※後述しますが、1行目はHTTPリクエスト行です。HTTPリクエスト行には、GETやPOSTなどのメソッドが記載されます。また、/javarhino/はURLのパスになります。HOSTは接続先(Webサーバ)のIPアドレスです。本来は、IPアドレス:ポート番号の表記ですが、80の場合は省略されます。

❷レスポンス

HTTP/1.1 200 OK
Content-Type: text/html
Connection: Keep-Alive
Server: Apache
Content-Length: 12e
<html><head></head><body><appletarchiveR"exploit.jar"
code="exploit.class" width="1" height="1"></applet></body></html>
(2)実際のパケットを見てみましょう。

図で書いたようなhttp://nw.seeeko.comのサイトにアクセスした場合のリクエストとレスポンスです。
①HTTPリクエスト
GETの記載が確認できることでしょう。
HTTPリクエスト
②HTTPレスポンス
200 OKが見えることでしょう。
HTTPレスポンス

(3)Apacheのログ

参考として、Apacheのログを見てみましょう(正しくはProxyサーバのログ)。H30秋SC午後Ⅱ問2の記述です。

4:[04/Sep/2018:14:31:15+0900] "GET http://yyyy/dl/samplebun.zip HTTP/1.1" 200 89331

  "http://zzzz/2018/ne/bunrei.html" "▲▲"|

注記2 プロキシサーバが取得したログのうち,日時,リクエストのメソッド,リクエストのURL,リクエストのプロトコルとバージョン,要求元PCに送信したレスポンスのHTTPステータスコード,要求元PCに送信したレスポンスメッセージのサイズ,リクエストのRefererヘッダの値,及びリクエストのUser
Agentヘッダの値を示す。

 注記2に記載がありますが、補足します。
①日時:+0900は、世界の標準時刻GMT(実際にはUTC)と9時間のズレがあることを意味します。
②リクエストのメソッド:正確に説明すると長くなりますが、GETメソッドはデータを取得、POSTはデータを送信と考えてください。
③リクエストのURL:接続するURLです。
④リクエストのプロトコルとバージョン:HTTP/1.1はHTTPのバージョンです。HTTP2.0もありますが、最も普及しているのが1.1のバージョンです。
⑤要求元PCに送信したレスポンスのHTTPステーテスコード:HTTPのステータスコードで、200は通信が成功したことを意味します。
⑥要求元PCに送信したレスポンスメッセージのサイズ:データのバイト数です。今回の通信は89331バイトであることがわかります。
⑦リクエストのRefererヘッダの値:""の中のURLはリファラなので、アクセス元のURLが記載されます。直接アクセスした場合は、-の表記がされます。
⑧リクエストのUser-Agentヘッダの値:注記5にも記載があるユーザエージェントで、PCのOSやブラウザの情報が記載されます。PCごとに異なる情報が記載されます。

(4)HTTPリクエストやレスポンスの構成

では、このHTTPリクエストやレスポンスの構成はどうなっているでしょうか。分かりやすいHTTPレスポンスを例に記載します。
HTTP
このように、HTTPレスポンス行(またはHTTPリクエスト行)、HTTPヘッダ、1行の空白を空けてHTTPメッセージボディの3つの部分で構成されます。HTTPメッセージボディは、実際のHTMLファイルが入っています。
HTTPリクエスト行には、GETやPOSTなどのメソッドが記載されます。HTTPレスポンス行には、200OKなどのステータスコードが記載されます。
実際のパケットの例は以下です。
pcap

みなさんも時間があればみてほしい

(5)User-Agent

HTTPリクエストヘッダにはUser-Agentというフィールドががあります。これはブラウザのバージョンなどの情報が記載されていて、OSもわかります。このフィールドを見れば、接続した端末がPCなのかスマホ(たとえばiPhone)なのかがわかり、Webサーバ側でそれに基づいて最適なページを表示することができます。
Burp Suiteで、User-Agentを変えてみるといいだろう。→やってみると、意外に楽しい。

curlコマンド(Windowsでもたたける)に、-A, –user-agentでユーザエージェントを指定できる。たとえば、以下
curl -A "user1" http://xxxx

C&Cサーバなどでは、マルウェアに仕込んだUser-Agentでしか応答しないようになっている。これにより、調査目的でアクセスがあっても、悪意がある行動がばれない。

ではここで、情報処理安全確保支援士の試験の過去問(R1秋SC午後2問2)をみてみよう。

2.社内から社外への通信を中継するプロキシサーバに記録されたログから, PC-Sが,正体不明の宛先(以下,サイトUという)に,①User-Agentヘッダフィールドの値が"curl/7.64.0"のHTTPリクエストを繰り返し送信していることが確認された。

設問1(1)図3中の下線①について,ログに記録されたUser-Agentヘッダフイールドの値からはマルウェアによる通信であると判定するのが難しいケースがある。それはどのようなケースか。 50字以内で述べよ。






この問題にあるように、User-Agentヘッダフイールドの値は、ブラウザによって変化する。マルウェア(おそらくexeファイル)がC&Cサーバに通信する場合、exeファイルはブラウザではないので、特有なUser-Agentになることだろう。しかし、この会社と同じUser-Agentを使えば、Proxyサーバのログにて、User-Agentによって、マルウェアであることを判断するのは難しくなる。

解答例:User-Agentヘッダフイールドの値がA社で利用しているWebブラウザを示す値であるケース 

3.HTTPのステータスコード

ステータスコードは、HTTPサーバからの返信であるHTTPレスポンスに含まれる3桁の数字です。
このレスポンスコードを見ると、処理結果が分かります。
また、HTTPのステータスコードは、RFCで規定されている。

コード 意味
100番台 処理中  
200番台 正常終了 200 OK(正常終了)
300番台 さらに追加の処理が要求される状態 301 MOVED PREMANENTLY:恒久的なリダイレクト
302 Found (一時的な)リダイレクト
※301はPREMANENTLY(永遠に)とあるように、ドメイン移行などにより恒久的な転送の場合に使います。一方の302(302 Found)は、サーバの一時的な負荷上昇などによるリダイレクトの場合に使います。
400番台 クライアント側エラー 401 Unauthorized(認証に失敗)
404 Not Found(指定されたページが無い)
500番台 サーバ側エラー 503 Service Unavailable(サービス利用不可)

※CGIのスクリプトがエラーになるなど

過去問(H25SC秋午後Ⅱ問1)を見てみよう。

過去問(H25SC秋午後Ⅱ問1)
・IPアドレスC.C.C.Cに対して,MさんのPCは次の2種類のリクエストだけを送信していた。
 ―http://C.C.C.C/config.binへのGETリクエスト(9月26日12:28)
 ―http://C.C.C.C/gate.phpへのPOSTリクエスト(9月26日12:28以降,5分おき)
・上記のURL,及びIPアドレスC.C.C.Cの80番ポートに④ブラウザでアクセスを試行してみたところ,当該サーバは稼働していないようであった。

設問2(3) 図7中の[ a ]に入れる適切な数字を答えよ。また,図7中の下線④について,ブラウザでアクセスを試行した際の最も適切なレスポンスを解答群から選び,記号で答えよ。

解答群
 ア 204 No Content 
 イ 404 Not Found
 ウ 503 Service Unavailable 
 エ レスポンスなし






ネットワークスペシャリストを目指す女性SEえっとー 

結構迷いますね~
そうだね。正解は、エである。
サーバが稼働していないということは、応答メッセージを返すことができない。
利用者には「このページは表示できません」と、クライアントのブラウザが表示することになる。

■リダイレクト
また、リダイレクトに関しても、よく出題されるので覚えておきましょう。
リダイレクトとは,「(方向を)変える」という意味です。HTTPヘッダを見てください。

HTTPレスポンス

HTTP/1.1 302 Found
(中略)
Location: http://www.example.com/

HTTPステータスコードの「302 Found」はリダイレクトを意味します。
そして、Locationヘッダで指定されたURIに(方向を変えて=リダイレクトして)アクセスします。この仕組みにより,WEBサーバにアクセスすると,自動的に別のサーバの転送します。WebサイトのURLが変更した場合や、ネットワークスペシャリスト試験で問われるような、SSOにおいて、認証サーバに自動転送する際などに利用されます。

4.HTTPのメソッド

(1)メソッドについて

・HTTP1.1はRFC2616で規程され、Webを閲覧するためのGET、掲示板への書き込みのためのPOSTなど、合計8つのメソッドがある。
・メソッドは「OPTIONS」「GET」「HEAD」「POST」「PUT」「DELETE」「TRACE」「CONNECT」がある。
・GETは受信は文字通り「取得する」から、Webサーバから、コンテンツを取得します。Web閲覧がこれに値します。逆にWebサーバに送信するのがPUT。これとは別にPOSTというのがあり、過去問で問われています。
では、POSTとは何でしょう。
Webアプリケーションを作られた方は、METHOD="GET" あるいはPOSTなどの記載をされたこともあるでしょう。GETでもPOSTでも、どちらもできることはほぼ同じです。

(2)GETとPOSTの違い

1



なぜ2つあるのですか?
HTTPの昔のバージョン(HTTP/0.9)には、GETしかなかったとのことですよね。だったらGETだけで十分では?
それは、GETでは文字数制限などの問題があります。
POSTはその問題を改良したのです。
なので、掲示板にデータを書き込むなどの処理には、GETではなくPOSTがよく使われます。
違いとしてよく話をされるのは2つでしょう。

❶送信方法
 GETはURLに引数を記載します。
例えば、http://xxx.seeeko.com/index.asp?id=aaa
一方、POSTはURLに引数を記載せず、HTTPのデータの中に記載します。なのでURLは以下のようになる。
http://xxx.seeeko.com/index.asp

❷キャッシュされるか
 GETの応答はキャッシュされ、POSTの応答はキャッシュされません。(キャッシュには、ブラウザでキャッシュする場合や、プロキシサーバでキャッシュする場合があります)。ようは、POSTの場合、URLの情報以外にHTTPのデータの中に情報があって、同じURLでも応答が異なります。であるから、キャッシュすることは適切ではないのです。

多少乱暴な言い方ですが、分かりやすく考えてもらうと、以下になります。
・GETはデータを取得する。(WEBの閲覧)
・POSTはデータを送信する。(掲示板への書き込みなど)

・おさらいとして、H21NW午前2問10を解いてみましょう。

過去問(H21NW午前2問10)
 問10 HTTPのGETメソッドとPOSTメソッドに関する記述のうち,適切なものはどれか。

ア GETの実装は必須であるが,POSTはオプションである。
イ GETはサーバへの送信,POSTはサーバからの応答である。
ウ POSTの応答はキャッシュされるが,GETはキャッシュされない。
エ POSTはサーバのCGIを起動できるが,GETは起動できない。






アは正解である。必須はGETとHEADのみ。セキュリティの問題から、WebサーバではTRACEメソッドを無効にします。設定は、httpd.confで行います。必須のメソッドでは無いので、無効にできます。
イは、GETもPOSTもサーバへの送信で利用される
ウは逆
エどちらも起動できる。

・H21NW午後1問2では、プロキシに接続するためのメソッドであるCONNECTメソッドが穴埋めで問われた。

Webメールで利用するHTTPSでは、PCは[ オ ]メソッドを利用してプロキシサーバへ接続先を指定し、SSLセッションをASPサーバとの間で確立する。

以下のに当てはまる字句を答えよ。

過去問(H23AP問9設問1)
(2)特に,会員情報の登録処理や注文処理のような重要な処理を実行するページには[ a ]メソッドでアクセスするようにし,そのhiddenパラメタに秘密情報(ページトークン)が挿入されるように,前のページを自動生成する。実行ページでは,その値が正しい場合だけ処理を行う。もし[ a ]メソッドの代わりに[ b ]メソッドでアクセスすると,秘密情報をURLに付加して送信することになるので,ここでは利用を避けるべきである。また,HTMLフォームで<form>タグを用いる場合,メソッド属性の指定を省略すると[ a ]メソッドと解釈されるので,適切に指定する必要がある。

女性腕組み
さきほどの解説を見ていただくと、簡単に解けるかもしれません。
また、メソッドはいくつかありますが、基本的にはこの2つを覚え、テスト対策としましょう。






正解:a POST b GET

5.HTTP/2

❶HTTPによるWeb閲覧の復習
・HTTPで通信をするには、3wayハンドシェークを行った上でTCPコネクションを確立する必要がある。
・Webサイトは、1つのページであっても、index.htmlファイルなどページに加え、画像ファイルやCSSファイルなど、いくつものファイルで構成されている。それらを全て取得して、ページが表示される。

❷HTTP1.1の問題点
・1つのTCPコネクションで取得できるのは、1つのファイルのみ
(しかも、ファイルの取得が完了しないと、次のファイルを取得しない)
※過去問(R1秋AP午後問5)の図3が参考になります。HTTP1.1では、ファイルを順番に取得し、前のファイルの取得が終わらないと次を取得しない。
→これがHTTP通信の遅延の原因の一つです。
・(参考)GoogleChromeやIE8では1つのブラウザからのTCPコネクションの最大数は6に制限されています。
ネットワークスペシャリストを目指す女性SEあれ



そんな制限を無くしてしまえば、通信が高速化されるのでは?
このような制限は一般的です。それに、昔は2つだったので、6というのはとても増えたと言える。
そして、あまり増やしても、サーバへのTCPコネクション確立要求が増えすぎて、サーバエラー(503)になる。

❸HTTPパイプライン機能
上記の問題点を解決するために、HTTP1.1では、HTTPパイプライン機能があります。これは、複数のファイルを同時に取得することができます。
ですが、これも万能ではありません。リクエストの順番とレスポンスの順番が正しくないと、次のパケットが送られません(HoLブロッキング)。
という事情などもあり、多くのブラウザでは標準では機能が有効になっていません。

❹HTTP/2
・1つのTCPコネクションで複数のファイルを同時にやりとりできるようにしたのがHTTP/2です。HTTPパイプラインの課題であったHoLブロッキングも解消しています。
・注意点は、TLSが必須です。
※HTTP2の通信をパケットキャプチャで見せたいのですが、HTTP/2ではSSLが必須であり、複数のファイルをやりとりしている様子がわかりにくいと思います。

❺参考:用語解説   ソケット
HTTPなどのTCPの通信では3ウェイハンドシェークによりTCPコネクションを確立する。TCPコネクションは、送信元IPアドレス、宛先IPアドレス、送信元ポート番号、宛先ポート番号で管理され、この4つの組み合わせ情報をソケット(※この言葉は無理して覚える必要がない)と言う。
見方を変えると、ソケットという通信路(TCPコネクション)が確立されたら、その上をアプリケーションが通信していると思ってもらえばいい。たとえば、PCが2つのブラウザを立ちあげ、1つめのブラウザはGoogle,もう一つはYahooを見ていたとする。1つめのブラウザがGoogleを見たときに、その結果を2つめのブラウザに返さないのは、通信を(IPアドレスだけではなく、ポート番号を含めた)ソケットで管理しているからである。
socket
ネットワークスペシャリストを目指す女性SEあれ? 


TCPコネクションとソケットは同じものと考えていいですか?
1つのTCPコネクションに1つのソケットが対応するので、概念としては同じ。ただ、言葉の意味そのものは、厳密には別。TCPコネクションを”識別”するための情報がソケットだと思えばいいだろう。

❻過去問
R1秋AP午後問5の抜粋をみながらHTTP2を復習しましょう。

問5 HTTP/2に関する次の記述を読んで,設問1~4に答えよ。

 (中略)

〔性能テストの結果〕
 G君は,多数のWebブラウザ(以下,ブラウザという)からのアクセスをシミュレートする負荷テストツールを用いて,開発した新システムの性能テストを行った。
 性能テストの結果,同時アクセス数が,  32ユーザを超えるとアクセスエラーが発生した。ただし,エラー発生時のサーバのCPU,メモリ,ネットワーク回線の使用率は全て10%以下,ディスクのI/O負荷率は20%以下であった。また,レスポンスタイムは,写真を一覧表示するページ(以下,一覧ページという)の表示が最も長く3.0秒だったが,一枚の写真を拡大表示するページなどの他のページの表示は1.0秒であった。

[同時アクセス数改善に向けた調査]
 G君は,同時アクセス数の要件を満たせない原因を確認するために,ブラウザの開発者用ツールを用いて,ブラウザが一覧ページの表示に必要なファイルをどのように受信しているか調査した。G君が調査したファイルの受信状況(抜粋)を図2に示す。なお,ブラウザとサーバはHTTP/1.1 over TLS(HTTPS)で通信していた。

問5‗図2
図2 ファイルの受信状況(抜粋)


 次に,G君がサーバのログを調査したところ,TCPコネクションを確立できないという内容のログが多く残っていた。この結果からG君は,TCP/IPでサーバとブラウザが通信を行うために必要なサーバの[ a ]が枯渇し,新たなTCPコネクションを確立できなくなったと考えた。また,サーバの[ a ]の最大数は128に設定されていた。
 この二つの調査結果から,①ブラウザが採用する複数のファイルを並行して受信するための手法によって,同時アクセス数が制限されてしまっていることが分かった。

設問1 〔同時アクセス数改善に向けた調査〕について,(1),(2)に答えよ。
 (1)本文中の[ a ]に入れる適切な字句を解答群の中から選び,記号で答えよ。
   解答群
    ア IPアドレス   イ ソケット   ウ プロセス   エ ポート
 (2)本文中の下線①について,図2の調査で分かった,複数のファイルを並行して受信するための手法とは,どのような手法か。25字以内で述べよ。

さて、設問の前に。ここではサーバのソケットの最大数が128に設定されている。あまりたくさんにすると、サーバのスペック(メモリなど)がオーバし、サーバーエラーを繰り返してしまうからである。
通常で考えると、ポート番号が取り得る値は、2バイト(=16ビット)なので、かなりの数が受け入れられるはずであるが、制限が厳しいなあという印象。設問を簡単にするためにしている工夫であろう。





設問1(1)空欄aにはイのソケットが入る。ソケットの言葉は上で説明した通り。

(2)図2をみよう。これはあるブラウザでの調査ということであるから、1台のサーバがどのようにTCPコネクションを確立しているかがわかる。
この場合、4つのコネクションを同時に確立していることがわかる。具体的には、image001.jpg、image005.jpg、image009.jpg、image013.jpgのファイルを並行して受信している。

解答例:同時に複数のTCPコネクションを確立する手法

補足すると、 32ユーザを超えるとエラーになるのは、これが原因の一つということである。
もうお分かりだと思うが、1つのPCが4つのコネクションを接続し、32ユーザが同時に接続すると、ソケットの上限の128に達することから、それ以上の通信がアクセスエラーになる。

〔レスポンスタイム改善に向けた調査〕
 G君は,一つのTCPコネクション内における,ブラウザとサーバの間の通信を調査した。HTTP/1.1 over TLS を用いてブラウザとサーバが通信するとき,ブラウザからサーバの[ b ]番ポートに対して[ c ]を送信し,サーバから[ d ]を返信する,最後にブラウザから[ e ]を送信することでTCPコネクションが確立する。その後TLSハンドシェイクを行い,ブラウザはHTMLファイルや画像ファイルなどをサーバヘ要求し,サーバは要求に応じてブラウザヘファイルを送信している(図3)。また,G君が利用したブラウザでは,HTTPパイプライン機能はオフになっていた。
問5_図3
図3 G君が調査したブラウザとサーバ間の通信(抜粋)


 G君は,この結果から,②TCPコネクション内での画像ファイルの取得に掛かる時間が長くなり,多くの画像データを含む一覧ページではレスポンスタイムが長くなると考えた。

設問2 本文及び図3中の[ b ]~[ e ]に入れる適切な字句を解答群の中から選び,記号で答えよ。
   解答群
    ア 25        イ 110         ウ 443
    エ ACK       オ ACK/FIN        カ FIN
    キ SYN       ク SYN/ACK       ケ TCP

設問3 本文中の下線②について,  TCPコネクション内での画像ファイルの取得に時間が掛かる要因は何か。解答群の中から選び,記号で答えよ。
   解答群
    ア 画像ファイルの取得ごとにTCPコネクションを確立している。
    イ 画像ファイルを圧縮せずに取得している。
    ウ 画像ファイルを一つずつ順番にサーバに要求し取得している。
    エ 複数の画像ファイルをまとめて取得している。






設問2
b ウ:443 c キ:SYN d ク:SYN/ACK  e エ:ACK

設問3
問題文には、「②TCPコネクション内での画像ファイルの取得に掛かる時間が長くなり」とあります。この要因を考えます。正解は、ウの「画像ファイルを一つずつ順番にサーバに要求し取得している。」ことです。1つのソケットでファイルを順番に取得します。1つのファイルが正常に取得し終わったら、次のファイルを取得します。

ちなみにアですが、画像のファイルの取得ごとにTCPコネクションを確立しているわけではありません。図にあるように、1つのコネクション上で複数のファイルを取得できます。

〔HTTP/2を用いた新システムの開発〕
 G君が調査結果を上司のH課長に報告したところ “HTTP/2の利用を検討すること” とのアドバイスを得た。HTTP/2では,③一つのTCPコネクションを用いて,複数のファイルを並行して受信するストリームという仕組みなど,多くの新しい仕組みが追加されていることが分かった。
 そこで,  G君は新システムのWebサーバにHTTP/2の設定を行い,再度性能テストを実施した。その結果,新システムが図1の性能要件を満たしていることが確認できた。
 その後,新システムの開発は完了し,E社は写真のインターネット販売を開始した。

設問4 本文中の下線③について,(1),(2)に答えよ。
(1)複数のファイルを並行して受信可能となることで,ブラウザのどのような待ち時間がなくなるか。20字以内で答えよ。
(2)HTTP/2の採用によって,新システムが許容できる最大の同時アクセス数は幾つになるか答えよ。ここで,新システムにアクセスする全てのブラウザがHTTP/2を利用し,一つのTCPコネクションを用いてアクセスするものとする。






解答例
設問4
(1) 前の画像ファイルの受信完了待ち
(2) 128

1つのブラウザが1つのTCPコネクションを用いれば、ソケットが128なので、最大128の同時アクセスが可能である。

6.X-Forwarded-For

(1)XFFとは

ネットワークスペシャリストの過去問(R1NW午後Ⅰ問2)を見ましょう。

・WAFサービスは,アクセスを許可したHTTPリクエストの送信元IPアドレスを,HTTPヘッダのX-Forwarded-Forヘッダフィールド(以下,XFFヘッダという)に追加する。

ここで、HTTPヘッダが何だったかは、思い出してください。上の記事のHTTPリクエストやレスポンスの構成」に記載しています。
XFF(X-Forwarded-For)は,HTTPヘッダのフィールド(項目)の一つです。
XFFにより、接続元(クライアント)のIPアドレス情報を追加できます。たとえば、皆さんにも馴染み深いプロキシサーバ経由でインターネットに接続する構成で考えます。構成図は以下です。

192.168.1.11のPCから、Proxyサーバ経由でWebサーバに通信します。

 この場合、Proxyサーバが、PCからのHTTPリクエストのXFFヘッダにPCのIPアドレスを追加します。そして、WebサーバにHTTPリクエストを転送します。以下がそのHTTPヘッダの例です。PCのIPアドレス192.168.1.11が追記されていることが分かります。

GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ja
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1; SVl)
X-Forwarded-For: 192.168.1.11 ←Proxyサーバが追加したPCのIPアドレス
Host: nw.seeeko.com
Connection: keep-alive
(2)XFFの目的

LBやProxyサーバにて、このフィールドに、接続元(クライアント)のIPアドレス情報を追記することができます。
追記するかは設定次第なので、たとえばProxyサーバのsquidであれば、forwarded_for on と設定します。もちろんOFFにしてIPアドレスを追記しないことも可能です。
 
この点は、過去問(H24SC午後Ⅰ問4)にて、LBの機能として「また,HTTPヘッダフィールドとしてX-Forwarded-Forヘッダフィールドを追加可能であるが,現在は利用していない」とあります。
一般的にはどっちが多いと思いますか?
ネットワークスペシャリストを目指す女性SEあれ?



ログを取るためにはONですか?
企業側は取られたくないですよね。社内情報が漏えいしますから。通常は,PCのIPアドレスを見せないようにするため,OFFにすることが多いです。

過去に、X-Forwarded-Forに関する出題が何度かされています。
LBに限らずProxyサーバでもそうであるが、IPアドレスが変換される場合がある。たとえば、Proxyサーバからの通信であれば、送信元IPアドレスは全てProxyになり、実際に通信する端末のIPアドレスは分からない。LBもLBにて振り分けた場合に、送信元IPアドレスをLBにしてしまうと、サーバにはすべてLBからの通信に見える。
そこで、HTTPヘッダフィールどに、X-Forwarded-Forとして、IPアドレス変換をする前の端末のIPアドレスをセットするのである。

(3)過去問をみてみましょう。

過去問(H28SC秋午後1問3)を見てみましょう。もともとは多段プロキシの問題だったのですが、わかりにくいので私にて変更してあります。

過去問(H28SC秋午後1問3)
ある企業のネットワークは、プロキシサーバを経由し、FWからインターネットにアクセスします。しかし、①FWの通信ログだけでは送信元PCが特定できない。
そこで、プロキシでは、HTTPヘッダとして[ d ]ヘッダフィールドを追加するように設定し、FWでは、[ d ]ヘッダフィールドをログに出力するように設定した。

設問(1) 本文中の下線①について、FWのログだけでは送信元PCが特定できない理由を、30字以内で述べよ。
(2)本文中の[ d ]に入る適切な字句を答えよ。






(1)送信元IPアドレスがプロキシのIPアドレスとなるから
(2)X-Forwarded-For

実際にSquidによるプロキシサーバを使ってXFFを設定した様子は以下です。
プロキシサーバ(Squid)の設定

7.Webサーバを立ててみよう

「百聞は一見に如かず」です。まずはやってみましょう。
sef5



でも、サーバなんて持っていません。
今は便利になりました。VMwareなどで仮想サーバを立ててもいいのですが、今回はWindows8のOSの標準機能で作りましょう。従来はサーバに入っていたIISがクライアント端末にも入っています。
とても簡単にWebサーバが作れます。

▼IISのインストール
 コントロールパネル「プログラムと機能」「Windowsの機能の有効化または無効化」からIIS(インターネット インフォメーション サービス)をインストール。

再起動すれば、Webサービスなどが利用できる。

■WindowsでWebサーバ
Windows10の場合
検索などで、「Windowsの機能」>「インターネットインフォメーションサービス」
>「World Wide Webサービス」の「HTTP共通機能」
と「Web管理ツール」>「IIS管理コンソール」
にチェックを入れる。
もちろん、このあたりの一式をチェック入れてもいい。

再起動する。

http://127.0.0.1 で、MSのサイトが表示されれば、サーバ構築完了。
となりのPCからみてみよう。

※パーソナルFWや、ウイルス対策ソフトでブロックされる可能性があるので注意。

「管理ツール」(検索しましょう)の中に「インターネットインフォメーションサービス(IIS)マネージャがある。
ここで、Webサーバの起動、停止をしたり、コンテンツの配置場所の設定などができる。

●コンテンツの置き場所
デフォルトでは、C:\inetpub\wwwroot あたりにコンテンツが入っている。
「Hello」とでも記載したindex.htmlファイルを作成し、上記のフォルダに入れる。
http://127.0.0.1で 「Hello」の文字が見えるかを確認!

▼サイト構築
ためにしに、メモ帳で「こんにちは」と入力し、ファイル名をindex.htmlとしてみよう。
本当はHTMLのフォーマットで書くべきなんですが、ここはこれでよしとします。
拡張子はtxtではなく、htmlにしましょう。作成したファイルは、C:\inetpub\wwwrootに入れます。このフォルダがWebサーバのフォルダです。
memo
▼Webサーバにアクセスしてみよう。
ブラウザを使って、自分のIPアドレスにhttpでアクセスしてみましょう。
http://192.168.1.100/index.html
web
このように表示されます。とても簡単ですね。
是非とも、違うパソコンからやってみましょう。

8.WebDAV(Web Distributed Authoring and Versioning)

過去問では「HTTPを使って、Webサーバのコンテンツのアップロードや更新を可能にするプロトコル(H21NW午前 問12)」「HTTPを拡張したプロトコルを使って,サーバ上のファイルの参照や作成,削除及びバージョン管理が行える」とある。

Webサーバの代表的なソフトであるIISやApacheには、WebDAVの機能が組み込まれている。
1



これってFTPでできますよね。
わざわざHTTPでやるメリットはありますか?
確かにFTPでできる。でも、WebDAVを好む人が結構多い。
一つは、FWでHTTPは空いているが、FTPは閉じられている場合にも使える。
また、ブラウザベースで全てができて、ドラッグ&ドロップも使える。共有フォルダのような使い方ができるので、便利ではあります。

9.HTMLとXML

▼1.マークアップ(Markup Language)言語とは
HTML(HyperText Markup Language)とXML(eXtensible Markup Language)は、どちらもマークアップ言語です。
マークアップ言語に関して、過去問(H25年春IP問69)では「マークアップ言語では,画面表示や印刷などを目的に,文章の内容だけでなく,文書構造やレイアウト情報,文字のフォント及びサイズなどを指定する記述を直接埋め込むことができる」とあります。
HTMLがマークアップ言語の代表です。<font>などのタグを使うことで、色や文字の大きさなどを指定することができます。

▼2.HTMLとXMLの違い
Webのページ作成に利用されるHTMLとXMLの違いについてです。eXtensibleは拡張可能という意味ですから、XMLはHTMLの拡張であるとイメージしてもらえばいいでしょう。
XMLに関して、応用情報技術者試験のシラバスでは、「HTML の機能に加えて,独自にタグを定義することができる機能を備え,主にインターネットを介したデータ交換に利用されている」と述べられています。
また、過去問(H23秋AP午前問71)では、「インターネットを利用した企業間取引において,取引データをそのまま起票したり,社内文書に変換したりすることが容易にできる」とあります。XMLを使うと、EXCELなどへの変換が容易に行えるので便利ですね。

さて、両者の違いは何でしょうか。
次の過去問(H24春IP)を見ながら確認をしましょう。

過去問(H24春IP)
問67 HTMLに関する記述として,適切なものはどれか。
ア タグを使ってWebページの論理構造やレイアウトが指定できるマークアップ言語である。
イ ブラウザで動作する処理内容を記述するスクリプト言語である。
ウ ブラウザとWebサーバとの間で行う通信のプロトコルである。
エ 利用者が独自のタグを定義してデータの意味や構造を記述できるマークアップ言語である。






選択肢アがHTMLの説明で、HTMLは「タグを使ってWebページの論理構造やレイアウトが指定できるマークアップ言語」です。
選択肢エがXMLの説明で、XMLは「利用者が独自のタグを定義してデータの意味や構造を記述できるマークアップ言語」です。
ちなみに、選択肢イはJavaScriptです。

過去問(H19秋AD午前)
問45 HTMLによるハイパテキストの特徴として,適切なものはどれか。
ア 文書情報を扱うので,画像ファイルへのリンクはできない。
イ リンクは階層構造なので,別のテキストに移動する場合は一度最上位の階層まで戻らなければならない。
ウ リンクは双方向の情報をもつので,テキスト間を自由に行き来できる。
エ リンクをクリックすることによって,指定されたテキストに移動できる。






【正解】エ 

過去問(H19春AD午前)
問22 HTMLとXMLの特徴を比較した記述のうち,適切なものはどれか。
ア HTMLでは属性値をすべて二重引用符(")又は一重引用符(')で囲む必要があるが,XMLではその必要はない。
イ HTMLではユーザが独自に要素を定義できるが,XMLでは言語仕様で決められた要素だけが有効である。
ウ HTMLでは要素によっては終了タグを省略できるが,XMLでは開始タグと終了タグで内容を囲むか,空要素の形式で記述する必要がある。
エ HTMLでは要素名の大文字と小文字を区別するが,XMLでは区別しない。






【正解】ウ 

過去問(H24秋FE午前)
問8 XMLの特徴として,最も適切なものはどれか。
ア XMLでは,HTMLに,Webページの表示性能の向上を主な目的とした機能を追加している。
イ XMLでは,ネットワークを介した情報システム間のデータ交換を容易にするために,任意のタグを定義することができる。
ウ XMLで用いることができるスタイル言語は,HTMLと同じものである。
エ XMLは,SGMLを基に開発されたHTMLとは異なり,独自の仕様として開発された。






【正解】イ

過去問(H23秋AP午前)
問71 インターネットを利用した企業間取引において,取引データをそのまま起票したり,社内文書に変換したりすることが容易にできるマーク付け言語はどれか。
ア HTML   イ SGML   ウ UML   エ XML






正解はエのXMLです。
XMLは、問題文にあるような拡張性の高いマークアップ(マーク付け)言語です。

10.Ajax

・Ajax (Asynchronous JavaScript + XML)は、エイジャックス(またはアジャックス)と読む。Asynchronousは非同期という意味で、クライアント側とサーバ側が非同期。
リッチクライアントの技術の一つ。

たとえば、キーボード入力に合わせた検索候補を表示する場合を考えます。従来であれば、検索の候補を表示するのであれば、文字が入力された都度、サーバ側に通信をする必要がありました。毎回問い合わせていては、高速な処理が実現できません。
 Ajaxは、毎回サーバに通信をすることなく、非同期に通信する仕組みを使ってこれらの処理を実現できます。

・過去問(H24秋AP午前問32)えは、Ajaxについて、「JavaScript などのスクリプト言語を使って, Webブラウザに組み込まれているサーバとの非同期通信機能を利用する技術であり,地図の高速なスクロールや,キーボード入力に合わせた検索候補の逐次表示などを実現するもの」と述べられています。
AjaxがJavaScriptを活用している点は、Ajaxのフルスペルからも分かります。

・旧来のシステムは、クライアントサーバ(C/S)型のシステムが多かった。
クライアントにシステムをインストールし、クライアント側で多くの処理をする形態である。最近では、WEBアプリケーションが多く、クライアント側にはブラウザしかないというアプリケーションが増えていた。リッチクライアントは両者の中間に位置するものだ。WEBアプリケーションは、WEBであるためにソフトの配布がとても簡単である。しかし、操作性はC/Sシステムには到底及ばない。そこで、FlashやAjaxなどの最新のWEB技術を使って、操作性を高めたのがリッチクライアントである。

・H21NW午後1問2では、ajaxが穴埋めで問われた。

JavaScriptの非同期通信の機能による、画面遷移が起こらない動的なユーザインターフェースを実現する[ ア ]と呼ばれる技術を使ったWebメールの評判が高い。

ここで、非同期通信という言葉がひっかかってはいないか。Webアプリケーションは、処理するたびにサーバに接続にいくので、“同期”と考えられる。一方、JavaScriptでは、クライアント側でのみ処理をするので、都度サーバに問い合わせする必要がない。よって、“非同期”という見方ができる。

11.WebSocket

過去問(H28秋AP午前問7)では、「WebSocketによって実現できる」こととして、「クライアントのWebブラウザとサーバ間で双方向の通信をすること」と述べられています。
クライアントとサーバ間の通信は、双方向と言えど、クライアントからの接続要求があってできることがほとんどです。たとえば、サーバからのアクションで、クライアントのブラウザに情報を送ることは簡単ではありません。
WebSocketによって、両者に通信路を作り、双方向の通信を容易に実現することができます。

 WebSocketは専用のプロトコルを使用しますが、最初にWebサーバに通信をする際はHTTPを使ってハンドシェイクの要求を送ります。その後、WebSocketのプロトコルに切り替えます。

別の過去問をみてみましょう。

過去問(H28秋NW午前Ⅱ)
問15 チャットアプリケーションのようなWebブラウザとWebサーバ間でのリアルタイム性の高い双方向通信に利用されているWebSocketプロトコルの特徴はどれか。
ア WebブラウザとWebサーバ間で双方向通信を行うためのデータ形式はXMLを使って定義されている。
イ WebブラウザとWebサーバ間でリアルタイム性の高い通信を実現するためにRTPを使用する。
ウ WebブラウザとWebサーバとの非同期通信にはXMLHttpRequestオブジェクトを利用する。
エ Webブラウザは最初にHTTPを使ってWebサーバにハンドシェイクの要求を送る。






ア:XMLを使っていません。
イ:RTPではなく、専用プロトコルです。
ウ:WebSocketはリアルタイム通信に利用されます。
エ:正解選択肢です。

正解:エ

12.RSS

過去問(H26AP春午前問35)では、RSSに関して「Webページの見出しや要約などのデータについて,XMLを使って更新を通知するためのフォーマット」と述べられている。

たとえば、Yahoo!ニュースでは、以下のRSSがあり、登録することで、最新の更新情報をブラウザ上で確認することができる。
http://headlines.yahoo.co.jp/rss/list

RSSのフルスペルに関しては、RDF site summaryやRich Site summaryなどのいくつかがある。

13.【演習問題】PCがHTTPサーバと通信するときのフレーム

考えてもらうために、あえて漠然とした問題にしています。学習の理解を深めることを目的として、想像力を働かせて答えてください。

Q.LAN内にあるPC(10.1.1.101)からインターネットのWebサーバ(web.example.com)にアクセスするときに、PCから流れるフレームをパケットをすべて答えよ。PCは電源を入れた直後とする。

ネットワークスペシャリストを目指す女性SE待ってよ 

PCからインターネットへのHTTPパケットだけじゃないのですか?
PCが電源を入れたばかりと考えよう。





まず、WebサーバのIPアドレスを知らない。だから、DNSサーバに問い合わせに行く。
DNSサーバがLAN内にあると仮定して(外にあるなら別のパケットが必要になるが、ここでは説明は割愛)、PCのネットワーク設定を確認して、設定してDNSサーバ(10.1.1.53)にweb.example.comのIPアドレスを問い合わせようとする。

しかし、DNSサーバにアクセスするには、フレームレベルではMACアドレスが必要。であれば、ARPによってDNSサーバのMACアドレスを解決する(パケット①)。そうしてDNSサーバにアクセス(パケット②)し、サーバのIPが203.0.113.80であることがわかったとする。

次に、PCの動きであるが、203.0.113.80に通信しようとすると、自分の10.1.1.101/24とは別セグメントであるため、デフォルトゲートウェイ(10.1.1.254)に通信しようとする。そのためには、このデフォルトゲートウェイのMACアドレスを知る必要があり、ここでもARPパケットを送る(パケット③)。

そして、最後に、PCからインターネットへのHTTPパケットを送る(パケット④)。が、フレームレベルだと、宛先MACアドレスはデフォルトゲートウェイになる。
http

各種プロトコル

1.MQTT(Message Queuing Telemetry Transport)

MQTT(Message Queuing Telemetry Transport)について

■1.概要
・今の時代、PCとPCやサーバを通信するプロトコルはHTTP(HTTPS)が中心。FTPやSMTP、telnet、SNMP、SMBなど、本当はいくつかあるけどね。
・MQTTは、PCやスマホなどはなく、工場の機械やセンサーなどのIoT機器の通信に適したプロトコル。
・メッセージ(Message)を、送信者と受信者の溝を埋めるためにキューに蓄積(Queuing)しながら、 Telemetry(遠隔測定)をTransport(運搬)する。だが、実際にはQueueはしていない。IBM時代の名前の名残のようです。
http://mqtt.org/ にいろいろ書いてある。たとえば、MQTTは、M2MやIoTの接続に利用する軽量なプロトコルですと。
・HTTP(HTTPS)に比べてヘッダサイズが小さい(2バイトしかない)。でも、他のヘッダは同じだよ。
[イーサ][IP][TCP][HTTP][データ]
[イーサ][IP][TCP][MQTT][データ]
※HTTPヘッダが結構大きい。

・軽量(つまり、データ量が少なくてすむ)プロトコルなので、電池で動くIoTのセンサーなどにとって、電源容量が少ないのは望ましい。
・MQTTはセキュリティ機能(認証や暗号)もある→TLSを使う。
・Publisher(送信者)もSubscriber(受信者)もトピック名を設定してメッセージを送ったり、受け取ったりする。
・間にブローカが入ることで、1対1ではなく、1対多の通信が簡単に行える。
・仕組みはメルマガに似ている。該当のメルマガに登録した人だけがそのメルマガを読める
・MQTTの詳細な仕様は以下が参考になります。http://public.dhe.ibm.com/software/dw/jp/websphere/wmq/mqtt31_spec/mqtt-v3r1_ja.pdf

■2.登場人物
・ブローカー(サーバ)
・Publisher(送信者)
・Subscriber(受信者)

■3.通信の流れ
・送信者は受信者を意識することなく、好きな時にデータを送ることができる。受信者との仲介をするのがブローカー。
・MQTTの通信をする前段として、送信者と受信者はブローカーにアクセスする必要があります。
・以下に流れをまとめます。
(1)送信者
 ①ブローカに接続します(CONNECT)
 ②トピック名を指定して、ブローカに対してメッセージを送信します(PUBLISH) 
(2)受信者
 ①ブローカに接続します(CONNECT)
 ②購読したいトピックに関して、ブローカに対してメッセージを送信します。(SUBSCRIBE)
 ③送信者のPUBLISHメッセージが届くようになる。

■4、実際にやってみよう。
Windowsでも簡単にできます。
(1)ソフトのダウンロード
ソフトは以下からダウンロードします。ブローカーとクライアントソフトの両方が使えます。
https://mosquitto.org/

ダウンロードページは以下です。私は、Windowsの64bit版
mosquitto-1.6.2-install-windows-x64.exe をダウンロートしてインストール
https://mosquitto.org/download/

(2)コマンドプロンプトから実行
コマンドプロンプトで、インストールされたフォルダに移動します。
c:\Program Files\mosquitto>

(3)ブローカーの起動
>mosquitto -v 
で起動。-vは詳細という意味なので、省略可能

ただ、今回は、ネット上のブローカ(test.mosquitto.org)を使うので、起動は不要。

(4)クライアント(購読者)を起動
もう一つコマンドプロンプトを立ち上げる
購読要求の(SUBSCRIBE)を実行する。
>mosquitto_sub -h test.mosquitto.org -d -t msg/network
-h:ブローカーのサーバを指定
-d:デバックメッセージの表示
-t:購読するトピック名

--------結果はこんな感じ

c:\Program Files\mosquitto&gt;mosquitto_sub -h test.mosquitto.org -d -t msg/network

Client mosq/KydpkSJ1xV8n7irO7H sending CONNECT
Client mosq/KydpkSJ1xV8n7irO7H received CONNACK (0)
Client mosq/KydpkSJ1xV8n7irO7H sending SUBSCRIBE (Mid: 1, Topic: msg/network, Qo
S: 0, Options: 0x00)
Client mosq/KydpkSJ1xV8n7irO7H received SUBACK
Subscribed (mid: 1): 0

----------

このように、CONNECTとCONNACKによる接続と、msg/networkのTopiCを購読要求しています。

(5)クライアント(配信者)を起動
もう一つコマンドプロンプトを立ち上げる
メッセージの送信の(PUBLISH)を実行する。
mosquitto_pub -h test.mosquitto.org -d -t msg/network -m "I am a networkspecialist!"

-m:メッセージの内容

------------結果はこんな感じ

c:\Program Files\mosquitto&gt;mosquitto_pub -h test.mosquitto.org -d -t msg/network
 -m "I am a networkspecialist!"
Client mosq/DQwypOw3cVO3Cstcfi sending CONNECT
Client mosq/DQwypOw3cVO3Cstcfi received CONNACK (0)
Client mosq/DQwypOw3cVO3Cstcfi sending PUBLISH (d0, q0, r0, m1, 'msg/network', .
.. (25 bytes))
Client mosq/DQwypOw3cVO3Cstcfi sending DISCONNECT

----------

また、さきほどの購読したプロンプトには、以下が表示される。

----------

Client mosq/KydpkSJ1xV8n7irO7H received PUBLISH (d0, q0, r0, m0, 'msg/network',
... (25 bytes))
I am a networkspecialist!

----------

ここまでで、6384bitでした。とても小さいですね。

■6.上記のパケットのキャプチャ
(1)CONNECT
mqtt_connect

(2)PUBLISH Messeage
mqtt

2.NTP

1.NTPとは

NTP(Network Time Protocol)は、言葉の通り、ネットワーク(Network)上の機器の時刻(Time)を正確に維持するためのプロトコル(Protocol)です。 また、TCP/IPのプロトコルを使って、端末(NTPクライアント)に時刻を配信するサーバをNTPサーバと言います。
余談ですが、東京都小金井市にあるNICT(国立研究開発法人 情報通信研究機構)では、日本標準時を決定・維持しているとともに、NTPサーバ(ntp.nict.jp)にて標準時を配信しています。
余談ですが、企業でもNICTのNTPサーバを指定していいようです。申請などは不要ですが、少しだけ条件があるみたいですが・・・
http://jjy.nict.go.jp/tsp/PubNtp/qa.html#q0-1
まずは過去問(H25春SC午後Ⅱ問2)を見てみよう。

過去問(H25春SC午後Ⅱ問2)
外部DNSサーバは,インターネット上の時刻サーバとの間で,[ a ]を用いて時刻同期を行っている。FW及び情報システムの各サーバは,外部DNSサーバとの間で,[ a ]を用いて時刻同期を行っている。






NTP
空欄に当てはまるのがNTPである。

NTPに関しては、ネットワークスペシャリスト試験の過去問(H19NW午後1問3)で詳しく問われた。その問題を見てみよう。

NTPに関して(H19NW午後1問3より)
〔NTPの仕組み〕
ネットワーク上の機器の時刻を正確に維持するために,NTP(Network TimeProtocol)を使用する。NTPは,次の2点を前提に設計されている。
・ネットワーク上に正確な時刻情報を保持する機器がある。
・時刻を同期させる機器間の通信で,要求電文と応答電文がネットワーク内で遅延する時間が等しい。
 NTPは,stratumと呼ばれる階層構造をもち,最上位の機器が,原子時計や標準電波,[ a ]用人工衛星などの正確な時刻源から時刻を取得し,下位の機器に提供する。遅延時間にばらつきがあると,時刻の精度に影響するので,時刻を同期させる機器は①ネットワーク的に近い方がよい。

(中略)

〔タイムサーバ〕
インターネット上にはタイムサーバが公開されているので,そこから時刻を取得することが可能である。その場合,②時刻を取得する機器を限定し,その取得した時刻を組織内に展開する構成が推奨されている。このように,インターネット上のタイムサーバを利用したとしても,社内にタイムサーバを設置したり,FWの設定を変更したりしなければならないので,正確な時刻源と同期するタイムサーバを社内に設置した方がよい。この形態は,③可用性の面でも,インターネット上のタイムサーバを利用するより優れている。

設問1 本文中の[ a ]に入れる適切な字句を答えよ。
設問2 NTPで使用される標準時を解答群の中から選び,記号で答えよ。
 解答群
ア DST    イ GMT    ウ JST    エ TAI    オ UTC
設問3 NTPの動作について,(1)~(3)に答えよ。
(1)本文中の下線①に示す”ネットワーク的に近い”とは,どのような状態を意味するか。20字以内で具体的に述べよ。
(2)本文中の下線②に示す構成をとることで,どのような問題の発生を回避できるか。40字以内で述べよ。
(3)インターネット上のタイムサーバを利用する場合,本文中の下線③に示す可用性の面で,劣ってしまう点は何か。25字以内で述べよ。

この問題の採点講評を読むと,NTPの目的などが簡単に理解できるので引用する。

様々なアプリケーションでタイムスタンプが利用されているが,時刻がずれてしまうと,ファイルやデータベースを共有した場合に不具合が発生したり,システム管理で重要なログが活用できなくなったりする。そうしたことから,正確な時刻設定への要求が高まっている。
本問では,正確な時刻を維持するための仕組みであるNTP(Network Time Protocol)を題材として,ネットワークエンジニアに知っておいてほしい基本的な知識と,タイムサーバ導入を通じてネットワークを構築する能力について問う。






試験センターの解答例は以下である。
設問1  a:GPS
設問2  オ
設問3 
(1) ・経由するネットワーク機器が少ない状態
     ・伝送遅延時間が小さい状態
(2) 特定のサーバに負荷が集中し,確実に時刻を取得することが困難になってしまう問題
(3) タイムサーバヘの接続性が保証されない点

もう一つ、過去問(R3春SC午後2問1)をみてみよう。

過去問(R3春SC午後2問1)
N社が提供したログの大半は,記録されていた時刻情報の【 a 】が日本標準時であり,協定世界時に対し時刻情報が【 b 】時間進んだ値で記録されていた。しかし,協定世界時で記録されていたログ,【 a 】を示す情報が記録されていなかったログも存在した。
2.GMTとUTC

GMT(Greenwich Mean Time)は、グリニッジ標準時ですので、経度0であるイギリスのグリニッジ天文台の時刻を指します。
UTC(Coordinated universal time)は協定世界時と言われ、GMTの世界標準版です。GMTとはコンマ何秒のズレしかなく、ほぼ同じ時刻を指します。同じものとして考えてもいいでしょう。

3.Ciscoスイッチにおける、NTPによる時刻同期の設定

Ciscoスイッチにおける、NTPによる時刻同期の設定を紹介します。
(1)現在の時刻を見てみましょう。
Switch#sh clock
*00:08:26.235 UTC Mon Mar 1 1993
1993年って、いつの時代でしょうか。全然違う日付になっています。

(2)NTPプロトコルを用い、NTPサーバと時刻同期をします。
接続先は、社内のNTPサーバがあれば、そこを指定しましょう。
指定するNTPサーバが機器ごとに異なると、時刻がずれる
危険があります。
今回は、公のNTPサーバとして、情報通信研究機構(NICT)のNTPサーバ(ntp.nict.jp)に接続してみましょう。
http://jjy.nict.go.jp/ntp/

(3)その前に、IPアドレスの設定
NTPサーバと通信するので、IPアドレスを設定します。
デフォルトゲートウェイと、名前解決のためにDNSも設定しておきましょう。

Switch(config)#int vlan 1
Switch(config-if)#ip address 100.64.1.33 255.255.255.0
Switch(config-if)#no shutdown
Switch(config-if)#exit
Switch(config)#ip default-gateway 100.64.1.1
Switch(config)#ip name-server 8.8.8.8

(4)NTPサーバの指定
NTPサーバとして、NICTのサーバを指定します。

Switch(config)#ntp server ntp.nict.jp
Switch(config)#end

しばらくして、時刻を確認すると、正しい時間に設定されています。

Switch#sh clock
00:04:31: %SYS-5-CONFIG_I: Configured from console by console
00:04:41.571 UTC Sun Jul 14 2019

3.RADIUSやLDAP

1.認証サーバで利用するプロトコル

認証サーバで利用するプロトコルには、RadiusとLDAP、ActiveDirectoryで使うプロトコルなどが主である。
ネットワークスペシャリストを目指す女性SEあれ?

RadiusサーバもADサーバも、どちらもユーザ情報を持った認証サーバですよね。
LDAPも同じですか?
はい、そう考えてください。Radiusにしてもそうですが、Radiusはプロトコルであり、認証サーバはRadiusサーバと呼ばれます。LDAPも同じで、LDAPはプロトコルですが、LDAPサーバというと、ユーザ情報を持った認証サーバを指します。
※ADに関しては、プロトコルはNTLMv2などを使います。
ネットワークスペシャリストを目指す女性SEハテナ

RADIUSサーバとLDAPサーバの使い分けはどうするのですか?
外部からのリモートアクセスや無線LANの認証などのユーザ認証ではRADIUSが利用されます。一方、LDAPサーバは、ディレクトリサービスで利用されます。ディレクトリサービスですから、階層構造で管理される社員の情報および部署やアクセス権など、多くの情報を管理できます。それらの複雑な社員の属性情報を管理する場合に、LDAPサーバおよびLDAPのプロトコルが利用されます。

以下、簡単に図にした。ADだけはプロトコルが異なるが、試験に出るのはネットワークスペシャリストではRadiusがメイン(とはいってもほとんど出ない)、情報処理安全確保支援士であればLDAPであろう。

2.RADIUS

RADIUS(Remote Authentication Dial In User Service)とは、認証サーバに認証情報を問い合わせるときに利用するプロトコルです。利用シーンとしては、Remote Authentication Dial Inというフルスペルにあるように、ダイヤルアップの認証、無線LANの認証サーバ、SSL-VPN装置、などがあります。

(1)構成例

登場人物は以下の3つである。
❶利用者
❷RADIUSクライアント
❸RADIUSサーバ

例として、以下のようになる
PC ----→ SSLVPN装置 ----→ RADIUSサーバ
PC ----→ AP -----→ RADIUSサーバ

SSL-VPN装置やAPはNAS(Network Access Server)と呼ばれる。
また、RADIUSサーバに対してRADIUSクライアントとして働く。
つまり、RADIUSサーバに対して、IDやパスワード情報を送信する。

(2)そもそも、なぜRADIUSが必要なのか

たとえば、SSL-VPN装置において、RADIUSを使わなくても認証はできる。SSL-VPN装置にユーザ情報を登録すればいからです。
1 

なぜRADIUSが必要なんですか?
目的は以下である。
①ユーザの一元管理のため。複数の認証をする場合、それぞれの装置でユーザを管理する必要がある。
②上記に関連するが、管理の容易性。一元管理なのでログの集約、利用状況の管理などが行いやすい。
③高度な機能を持つことが多い。たとえば、EAP-TLS対応など

(3)過去問(H25SC春午前2問7)を解いてみよう

過去問(H25SC春午前2問7)
問7 無線LAN環境に複数台のPC,複数のアクセスポイント及び利用者認証情報を管理する1台のサーバがある。利用者認証とアクセス制御にIEEE 802.1XとRADIUSを利用する場合の実装方法はどれか。

ア PCにはIEEE 802.1Xのサプリカントを実装し, RADIUSクライアントの機能をもたせる。
イ アクセスポイントにはIEEE 802.1Xのオーセンティケータを実装し,RADIUSクライアントの機能をもたせる。
ウ アクセスポイントにはIEEE 802.1Xのサプリカントを実装し,RADIUSサーバの機能をもたせる。
エ サーバにはIEEE 802.1Xのオーセンティケータを実装し, RADIUSサーバの機能をもたせる。|





正解はイである。

3.LDAP

LDAP(Lightweight Directory Access Protocol)は、すでに述べた通り、ディレクトリサービスである。階層構造で管理される社員の情報および部署やアクセス権など、多くの情報を管理できる。

過去問(R2SC午後1問2)に、ディレクトリサーバの機能例があるので紹介する。空欄も答えてほしい。

ディレクトリサーバの機能例(R2SC午後1問2より)
f:id:seeeko:20210425183849p:plain






正解はもちろんLDAPである。

別の過去問(H22秋SC午後Ⅱ問2)をみてみましょう。

過去問(H22秋SC午後Ⅱ問2)
LDAPのアカウント情報では, inetOrgPersonといったオブジエクトクラスによって組織の利用者の情報を管理する標準的な[ b ]を用いている。例えば,製品開発部のスズキタロウ氏が社内で利用するLDAP用のアカウント情報を[ c ]によってテキスト形式で示すと,図7となる。
---------- 図7 ここから ----------
dn: uid=suzuki,ou=seihin-kaihatsu,dc=a-companyen: Taro Suzuki
sn: Suzuki
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
ou:製品開発部
teleDhonenumber:03-XXXX-5555
c=com
  図7 LDAPにおけるスズキタロウ氏のアカウント情報(抜粋)
---------- 図7 ここまで ----------






さて、空欄ですが、以下が入ります。
b スキーマ
c LDIF
ネットワークスペシャリストを目指す女性SEあれ?

LDAPの通信は暗号化されていますか?
いえ、は暗号化されていないので、暗号化するにはLDAP over TLSを使います。

過去問(H21春SC午前Ⅱ)をみてみましょう。

過去問(H21春SC午前Ⅱ)
問10 通信の暗号化に関する記述のうち,適切なものはどれか。
ア IPsecのトランスポートモードでは,ゲートウェイ間の通信経路上だけではなく,発信ホストと受信ホストとの間の全経路上でメッセージが暗号化される。
イ LDAP クライアントがLDAPサーバに接統するとき,その通信内容は暗号化することができない。
ウ S/MMEで暗号化した電子メールは,受信側のメールサーバ内に格納されている間は,メール管理者が平文として見ることができる。
エ SSLを使用すると,暗号化されたHTML文書はブラウザでキャッシュの有無が設定できず,ディスク内に必ず保存される。






⇒正解はア
イに関しては、LDAP over TLSを使うことで通信内容を暗号化することができます。

4.STUN

H28年秋NW午後Ⅱ問1では、STUN(Session Traversal Utilities for NAT) の仕組みについて問われました。
STUNはビデオチャットなどのWebRTC(Web Real-Time Communication)などで利用される技術です。
インターネットに出るときはグローバルIPアドレスを使いますが、通信をしようとするPCは、自分のグローバルIPアドレスが何かを知らないものです。でも、通信相手と通信をするためにはプライベートIPアドレスでは通信できません。そこで、自分のグローバルIPアドレスを知る仕組みが必要で、それがSTUNの仕組みです。具体的には、STUNサーバに、教えてもらいます。

以下は、過去問です。これをいきなり読むと、難しいですよね。

図4の例では,ブラウザ2上のAPがSTUNプロトコルを用いてSTUNサーバ1,2から〈g2〉を得て,それをブラウザ1上のAPに通知する。
 STUNプロトコルの概要は次のとおりである。
・STUNクライアントは, STUNサーバヘBindingリクエストを送る。
・ STUNサーバは,受け取ったIPパケットのヘッダから送信元のIPアドレスとポート番号を取り出し,Bindingレスポンス中のデータに格納して返す。