ウインドウ制御

ウインドウは、データの受信側がデータを一時的に保存しておくためのメモリ領域(バッファメモリ)のことです。
ここでは本に載っていた例「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度手間なような気が…。また調べてみます。