ネットワークスペシャリスト合格に必要となる知識を一問一答形式で確認していきます。
トランスポート層
オートネゴシエーションを説明せよ
接続先ポートに対し,自動で最適な通信環境を設定する機能。例えば,全二重・半二重の自動判別や速度の自動判別などが設定できる。
FCoEではTCPとUDPのどちらを用いるか
どちらも用いられない。FCoEではIPによるルーティングは行われず,TCPやUDPは使用されない。FCは高品質の光ファイバを用いるため,基本的にはビット誤りはゼロであるという仮定がある。また,物理層ではイーサネットを拡張したプロトコルが利用され,以下の仕様が含まれている。
- IEEE 802.1Qbb:優先度ベースフロー制御(PFC)
- IEEE 802.1Qaz:トラフィックごとの帯域制御(ETS)
- IEEE 802.1DCBX:スイッチ間の情報交換プロトコル(DCB)
- IEEE 802.1Qau:輻輳通知
ただし,DCBはData Center Bridging Exchangeの略称である。
TCPヘッダ長とUDPヘッダ長を述べよ
- TCP:20byte
- UDP:8byte
TCPの3ウェイハンドシェイクにおけるシーケンス番号と確認応答番号の違いを述べよ
シーケンス番号は,各端末が自分で管理しているパケットの通番でランダムな値から開始する。確認応答番号は,シーケンス番号に1を加えた値を利用する。例えば,以下のように設定する。
- SYN:シーケンス番号は1000で確認応答番号は0
- SYN+ACK:シーケンス番号は2000で確認応答番号は1001
- ACK:シーケンス番号は1001で確認応答番号は2001
TCPにおけるフロー制御(流量制御)を説明せよ
受信側がTCPヘッダでウィンドウサイズを指定する。
Nagleアルゴリズムを説明せよ
ネットワークの利用効率を高めるために利用されるアルゴリズムで,次の状態のいずれかに該当する場合はTCPでパケットを送信し,該当しない場合は送信待ちを行うものである。
- 全ての送信済みデータが確認応答されている場合(=受信側はデータを受け取れるということ)
- 最大セグメント長であるMSSのデータを送信できる場合(=送信側は十分にデータを溜めたということ)
Nagleアルゴリズムはファイルの送受信等のユースケースで有効化し,イベントにより発火する通信等の時間的に間隔が空くユースケースでは無効化した方が,ネットワークの利用効率を向上させることができる。
チェックサムの仕組みを「疑似ヘッダ」と「1の補数表現」という言葉を用いて説明せよ
疑似ヘッダと呼ばれる仮想的なヘッダを含めたデータに対して,1の補数表現を用いた計算を行うことでデータの整合性をチェックする仕組み。TCP/UDPデータグラムに対して適用されるチェックサムはIPチェックサムとも呼ばれる。チェックサムの計算では,1の補数の前後を足すと全て1になるという性質を利用する。
具体的には,疑似ヘッダにはIPヘッダから抽出したIPアドレスの情報が格納されており,チェックサムを計算する前に全長が16bitの倍数となるように0をパディングする。その際,チェックサムフィールドの16bitは全て0を格納しておく。そのうえで,16bit単位で1の補数の和を求め,さらにその計算結果の1の補数を計算してチェックサムフィールドに格納する。受信側のホストはチェックサムフィールドを含む全てのデータの和を計算し,チェックサムフィールドに格納する。全てのデータを16bit単位で足すと,チェックサムフィールドにはチェックサムフィールド以外の和に対する1の補数値が格納されているため,16bit全てが1となれば正しい値と判断する。チェックサムの計算では「16bitのフィールドを足して1bitにする」と勘違いしやすいので注意が必要である。
1の補数表現を用いる理由は以下のとおりである。
- 桁があふれても一の位に戻るため情報の欠落がない
- 0の表現が+0を表す0x0000と-0を表す0xFFFFの二つある。
MSSとMTUを調整する主体を述べよ。
MSSは3wayハンドシェイク時にクライアントPCで設定されるが,途中でカプセル化されるとルータで上書きされる。MTUはルータで設定される。MSSだけ調整すればよい訳ではない理由は,MSSはTCPでしか利用されないから。例えばUDPではMTUを調整する必要がある。
TCPの重複確認応答とは何か。
ウィンドウサイズ中の一部データが喪失した場合に,受信側から連続して同一の確認応答番号が返される事象。TCPでは3回連続して重複確認応答を受け取った場合に,その重複確認応答に相当するシーケンス番号から再度ウィンドウを開始する。
輻輳ウィンドウとスロースタートについて説明せよ。
TCPでは輻輳を避けるために,送信量の幅を定義する輻輳ウィンドウを通信開始から徐々に広げていくスロースタートを採用している。代表的なルールは下記。
- 輻輳ウィンドウは指数関数的に広がっていく
- タイムアウトが起きた場合には,輻輳ウィンドウを0にして再度スロースタートする
- 重複確認応答を受信した場合には,輻輳ウィンドウを1/2にして再度スロースタートする
- 輻輳ウィンドウがスロースタート閾値を超えると線形的に広がっていく(=指数関数的よりも緩い増え方)
なお,重複確認応答で輻輳ウィンドウを0にせず1/2にする理由は,少なくとも3回の通信が送信側に伝わっていることが担保されており,タイムアウトするほど混雑度が高くないことが予測されるからである。
ポート番号とディスクリプタの違いを説明せよ。
- ポート番号:対外的にソケットを識別するための番号
- ディスクリプタ:対内的にソケットを識別する番号
コメント