ウインドウ制御
ウインドウは、データの受信側がデータを一時的に保存しておくためのメモリ領域(バッファメモリ)のことです。
ここでは本に載っていた例「Windows XPマシンがWindows Meマシンにコネクション確立要求を行う様子」でおさらい。
- Windows XPマシン:ウインドウサイズ初期値64240バイト
- Windows Meマシン:ウインドウサイズ初期値16384バイト
1.まず、XPマシンはTCPヘッダに自分の受信ウインドウサイズの64240を書き込み、さらにMSSの値1460を書き込みます。
MSS = イーサネットのMTU 1500バイト ー ヘッダ 40バイト
2.要求を受け取ったMeマシンは、通知されたMSSと自分のMSSを比較して、小さいほうをMSSとして決定します。(この場合は同じなので1460)
そして、このMSSから自分の受信ウインドウサイズを計算。
16384 ÷ 1460 = 11.2219… ≒ 12 (ウインドウサイズをMSSの整数倍にするために切り上げる) 1460 × 12 = 17520バイト(受信ウインドウサイズ)
つまり、12個のTCPセグメントが連続して受け取れることになります。
Meマシンは、自分の受信ウインドウサイズとMSSをXPマシンに通知します。
3.XPマシンは、通知されたMSSと自分のMSSを比較して、小さいほうをMSSとし、さらに受信ウインドウサイズを計算します。
64240 ÷ 1460 = 44 1460 × 44 = 64240バイト(受信ウインドウサイズ)
つまり、XPマシンは44個のTCPセグメントを連続で受け取れることになります。
そして、自分の受信ウインドウサイズをMeマシンに通知します。
少し気になるのが、MSSの通知が2度手間なような気が…。また調べてみます。