RFC 908 - Reliable Data Protocolにある間違い
20年以上も前に書かれたRFCを実装していたところ,間違いを見つけたのでメモっておく.
問題の箇所は,24ページにある以下の記述となる.本記述は,アクティブオープンを行う際の擬似コードとなる.
If active Open If remote port not specified Return "Error - remote port not specified" Endif Generate SND.ISS Set SND.NXT = SND.ISS + 1 SND.UNA = SND.ISS Fill in SND.MAX, RMAX.BUF from Open parameters If local port not specified Allocate a local port Endif Send <SEQ=SND.ISS><MAX=SND.MAX><MAXBUF=RMAX.BUF><SYN> Set State = SYN-SENT Return (local port, connection identifier) Endif
この擬似コードは以下の間違いがあるように思われる.
- RMAX.BUFという記述はドキュメント中には出てきていない.これは,RBUF.MAXの間違いであると考えられる.
- SND.MAXは送信可能なセグメント数を示すものであり,これは対向ホストから知らされるはずである.しかしながら,前述した擬似コードでは,この値をコネクション作成時に初期化して対向ホストに知らせており,これはどう考えても逆である.したがって,正しくは,RCV.MAXを初期化して,その値を送信するのが正しいと考えられる.
- 他の記述に合わせると,MAXBUFではなくてBUFMAX
これを修正した擬似コードは以下のようになる.赤字は修正箇所.
If active Open If remote port not specified Return "Error - remote port not specified" Endif Generate SND.ISS Set SND.NXT = SND.ISS + 1 SND.UNA = SND.ISS Fill in RCV.MAX, RBUF.MAX from Open parameters If local port not specified Allocate a local port Endif Send <SEQ=SND.ISS><MAX=RCV.MAX><BUFMAX=RBUF.MAX><SYN> Set State = SYN-SENT Return (local port, connection identifier) Endif