2018年11月9日金曜日

[一次基礎]単純な計算問題を見極める

作成:2018年11月09日
一次試験の基礎科目(解析)において、見慣れない数式に出くわして面食らうことがあります。

が、冷静になって問題をよく見ると、単純な計算問題に帰着できるものがあります。

例えば、以下の問題。

【出典:平成23年度技術士第一次試験[基礎科目]I-3-5】

3次元直交座標系$(x,y,z)$におけるベクトル

${\bf V} = (V_{x}, V_{y}, V_{z})=(\sin(x+y+z), \cos(x+y+z), z)$

の$(2\pi, 0, 0)$での発散$\mathrm{div}{\bf V}=\dfrac {\partial V_{x}}{\partial x}+\dfrac {\partial V_{y}}{\partial y}+\dfrac {\partial V_{z}}{\partial z} $の値はどれか。

① 2  ② 1  ③ 0  ④ -1  ⑤ -2

「発散って何?」、「divって???」と慌ててはいけません(笑)。

問題文を見ると

$\mathrm{div}{\bf V}=\dfrac {\partial V_{x}}{\partial x}+\dfrac {\partial V_{y}}{\partial y}+\dfrac {\partial V_{z}}{\partial z}$

と、定義が記載されているので、このとおりに計算すれば良いだけです。

$\dfrac {\partial V_{x}}{\partial x}=\cos(x+y+z)$

$\dfrac {\partial V_{y}}{\partial y}=-\sin(x+y+z)$

$\dfrac {\partial V_{z}}{\partial z}=1$

となるので、

$\mathrm{div}{\bf V}=\cos(x+y+z)-\sin(x+y+z)+1$

よって、$(2\pi, 0, 0)$での発散は

$\mathrm{div}{\bf V}=\cos(2\pi)-\sin(2\pi)+1
=2$

以上より、解答は①となります。

この類の問題はラッキー問題として、確実に正解をゲットしましょう。

2018年11月6日火曜日

[一次専門]TCPのデータ転送量

作成:2018年11月06日
更新:2018年11月13日
前回の投稿で

確認応答(ACK)なしに一度で送信可能な最大のデータ量をウィンドウサイズと言います。

と書きました。

このウィンドウサイズに関連して、技術士一次試験ではデータ転送量の上限値を求める問題も出題されています。

【出典:平成28年度技術士第一次試験〔専門科目〕III-33】
【出典:平成24年度技術士第一次試験〔専門科目〕IV-19】

2点間でTCPを用いてデータを転送する。2Gbpsの帯域をもつ通信回線において往復の遅延が500マイクロ秒,TCPのウィンドウサイズを50kバイトとするとき,1秒当たりのデータ転送量の上限値に最も近い値はどれか。

① 20Mバイト
② 50Mバイト
③ 100Mバイト
④ 200Mバイト
⑤ 400Mバイト

問われているのはデータ転送量の上限値なので、最も転送効率が良いケースを考えます。

ここで、「ウィンドウサイズ」と「1回の送信あたりのデータ転送量」は必ずしも一致しないことは注意が必要です。

言い換えると、1回の送信でウィンドウサイズと同じデータ量を送信する場合もあれば、複数回に分割して送信する場合(合計値がウィンドウサイズと同じ)もあるということです。

それでは、1回で送信する場合と、複数回に分割して送信する場合のどちらが転送効率が良いでしょうか。

問題文に着目すると「往復の遅延」とあります。
送信するたびに送受信間のやり取りで遅延が発生するということですね。

つまり、送信回数が少ないほど遅延が小さくなるので、1回の送信でウィンドウサイズと同じデータ量を転送するのが最も転送効率が良いと言えます。


前置きが長くなりましたが、問題文に戻ると

「1回の送信(往復の遅延0.5マイクロ秒)で、ウィンドウサイズと同じデータ量(50kバイト)を転送する」

場合にデータ転送量が上限値となるので、1秒当たりの転送量は

50(kバイト)/0.5(マイクロ秒)
=50,000(バイト)/0.0005(秒)
=100,000,000(バイト/秒)
=100M(バイト/秒)

よって、答えは③となります。

2018年11月3日土曜日

[一次専門]TCPヘッダ

作成:2018年11月03日
技術士第一次試験(情報工学)では、通信プロトコルに関する問題もチラホラ出題されます。中でもTCPに関する問題が頻出です。

TCPヘッダのフォーマットは以下のとおりです(RFC793より引用)。

普段からパケット解析をバリバリやってる人はともかく、TCPヘッダの各フィールドの詳細まで覚えるのはしんどいですよね。

技術士一次試験対策の観点では、上記ヘッダフォーマットの横幅が32ビットで、だいたいこんなフィールドがあるんだなぁ程度を理解した上で、「3ウェイハンドシェイク」や「フロー制御」の概要を理解しておけば十分だと思います。

TCPパケットに関する問題は、平成30年度、平成26年度、および平成16年度で出題されています。
年度によっては適切なものを選んだり、不適切なものを選んだりといった違いがありますが、選択肢で問われている内容はほぼ同じです。

そこで、過去3年分の過去問をマージして、一問一答形式にしてみました。

【平成30年度、平成26年度、平成16年度の技術士第一次試験問題を基に作成】

IPv4のTCPパケットに関する次の記述のうち、正しいものは○、間違っているものは×を答えよ。

  1. TCPヘッダにはチェックサムフィールドがない
  2. TCPヘッダにはパケット長やデータ長を表すフィールドが存在する
  3. TCPヘッダのSYNビットは、3ウェイハンドシェイクにおける最初のパケットでは0になっている
  4. TCPヘッダのウィンドウの値を0に設定すると、送信側は送信を中断し、次に0以外の値が返されるまで待機する。
  5. TCPヘッダは送信ポート番号フィールドと受信ポート番号フィールドを含み、それぞれ32ビット長である。
  6. TCPパケットのデータフィールドは、IPパケットのヘッダ内容を含む

上のTCPヘッダフォーマットが頭に入っていれば、1,2,5,6はすぐにわかりますね。
1,2,5,6全て誤りです。

3については、3ウェイハンドシェイクの流れを理解しておく必要があります。
ざっくり書くと

① 通信要求側 → 通信相手: SYN
② 通信相手 → 通信要求側: SYN ACK
③ 通信要求側 → 通信相手: ACK (コネクション成立)

という流れとなります。

通信要求側が最初にSYNパケットを投げる際、SYNパケットであることを示すためTCPヘッダのSYNビットは1となるので、問題文の記述は誤りです。

4について。確認応答(ACK)なしに一度で送信可能な最大のデータ量をウィンドウサイズと言います。
ウィンドウサイズの値が0の場合、これ以上受信できないことを表しており、送信側は送信を中断します。
したがって、問題文の記述は正しいです。


解答:
1. ×  2.×  3.×  4.○  5.×  6.×