Expand description
TCP 受信側の順序外セグメント再構成バッファ。
仕様・実測データ・優先順位は spec/tcp_receive.md を参照。
典拠: RFC 9293 §3.10.7.4(Segment Receive)。
§なぜ必要か
RFC 9293 は順序外セグメントの破棄を許容している(キューイングは実装の裁量)。
したがって現行の「破棄 + RCV.NXT を載せた ACK」は RFC 違反ではない。
しかし性能上は致命的で、実測では 660 セグメント中 33 個(5%)を破棄し、
ソケットが ESTABLISHED のまま rx_buf=0 で停止していた。
1 個の欠落で以降の到着分をすべて捨て、相手の再送を待つためである。
ここに保持しておけば、欠けた 1 個が再送で埋まった瞬間に まとめて上位へ渡せる。
グローバル状態にもハードウェアにも依存しない純粋ロジックのみで構成する。
Structs§
- Reassembler
- 順序外セグメントを seq 昇順で保持する。
Enums§
- Insert
Outcome - 挿入結果。
- Reassembly
Error - 引数が不正だった場合のエラー。
Constants§
- MAX_
BYTES - 保持できる合計バイト数の上限。メモリ枯渇を防ぐ。
- MAX_
SEGMENTS - 保持できる順序外セグメントの最大数。超えた分は破棄する (破棄しても RFC 上は正しく、相手の再送で回復する)。