「よく聞くMTU、RWINってなんのこと?」では、MTUとRWINがそれぞれ「一度に扱うパケットサイズの最大値」「確認しないで受け取れるデータ量の最大値」ということを学んだ。また、「MTUの最適値をコマンドプロンプトを使って見つけよう」では、MTUの最適値を計算できた。

 では続いて、今回はRWINの最適値を求める基本的な考え方を説明しよう。RWIN値は、MTUの最適値から算出することができる。計算式は次の通りだ。

 なぜMTU値から40バイトを引くのかというと、TCP/IPで運んだ純粋なデータサイズを算出するためだ。パケットにはTCPヘッダー、IPヘッダーと呼ばれる制御情報がくっついていて、それぞれが20バイトずつある。「MTU値」から 40バイトを引いた、純粋なデータサイズを「MSS(Maximum Segment Size)」と呼ぶ。覚えておこう。

 さて、今回実験したCATV10Mbpsの環境で、断片化するギリギリの値が「1472」であった。この値から、MTU、MSSそれぞれを計算してみよう。

MTU = 1472 + 28 = 1500
MSS = 1500 - 40 = 1460

 となる。ここで「なぜ28を足すのか?」と疑問に思った人も多いだろう。「MTUの最適値をコマンドプロンプトを使って見つけよう」の2ページ目でも述べているように、pingコマンドでは、IPのエラーや制御メッセージをやり取りするために、ICMPというプロトコルを使って通信をする。その場合のヘッダーサイズが28バイトなのだ。従って断片化しないギリギリのデータサイズに、28バイトを足した1500バイトがMTUの値となる。

 MSSについては、先ほど述べたとおり。インターネットも含め、TCP/IP通信で送られるデータの先頭(ヘッダ)にくっついているデータが40バイトあるので、1500バイトから40バイトを引いた1460バイトが最適のデータサイズとなる。そして、一度に受け取る最大のデータサイズRWINは、この値を整数倍化したものとなるのだ。

 次回は具体的な計算方法を見ていく。