The retransmissions are, I suspect, the key. If TCP has to retransmit, it's because a packet or its acknowledgment got lost; TCP in turn interprets that as due to congestion and backs off. The question, then, is why packets are getting lost. Does 'netstat -i -d' show any drops on lo0?