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