本稿ではIPA試験で必要とされる知識をまとめます。
トランスポート層
TCPの3ウェイハンドシェイクにおけるシーケンス番号と確認応答番号の違いを述べよ
シーケンス番号は,各端末が自分で管理しているパケットの通番でランダムな値から開始する。確認応答番号は,シーケンス番号に1を加えた値を利用する。例えば,以下のように設定する。
- SYN:シーケンス番号は1000で確認応答番号は0
- SYN+ACK:シーケンス番号は2000で確認応答番号は1001
- ACK:シーケンス番号は1001で確認応答番号は2001
TCPにおけるフロー制御(流量制御)を説明せよ
受信側がTCPヘッダでウィンドウサイズを指定する。
チェックサムの仕組みを「疑似ヘッダ」と「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回の通信が送信側に伝わっていることが担保されており,タイムアウトするほど混雑度が高くないことが予測されるからである。
ポート番号とディスクリプタの違いを説明せよ。
- ポート番号:対外的にソケットを識別するための番号
- ディスクリプタ:対内的にソケットを識別する番号
コメント