[long ago, I questioned what happens with sack enabled] Bev Schwartz, Laura Ma and I (all of BBN) have found and fixed a SACK problem. I will send a patch as soon as I have a chance but I wanted to outline the problem quickly. When newreno (no sack) gets a triple duplicate ack, it halves cwnd, retransmits, and continues. When running in sack mode, the triple dupack causes cwnd to go to 1 instead. This is allowed by the specs, but the preferred option is to halve cwnd. The code is confusing because it sets cwnd to 1 to call tcp_output to retransmit a segment, but then it doesn't restore it. With this fixed, our TCP is competive with OS X; without it, we send less than OS X.
Attachment:
pgpbWkQEH0FZM.pgp
Description: PGP signature