Skip to main content

Module reassembly

Module reassembly 

Source
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§

InsertOutcome
挿入結果。
ReassemblyError
引数が不正だった場合のエラー。

Constants§

MAX_BYTES
保持できる合計バイト数の上限。メモリ枯渇を防ぐ。
MAX_SEGMENTS
保持できる順序外セグメントの最大数。超えた分は破棄する (破棄しても RFC 上は正しく、相手の再送で回復する)。