I am playing with various TCP algorithms using Netkit.
There are two machines, c1 and c2, connected by a router with forced 200ms delay. Program on c1 is sending 100-byte packets to c2 each 1ms (TCP_NODELAY is turned on). Reno is used as congestion control on both machines.
According to tcpdump, only first 2 packets are sent immediately (200 bytes), then c1 stops sending and waits for ACK. Receiver's window is about 2MSS (MSS=1460), so I guess it's CWND that prevents c1 from sending further packets.
According to Reno specification, initial CWND is 1MSS. Am i missing something there?.. Even sending 1-byte packets gives same picture, 2 packets are sent and then sender waits for ACK. May it be that initial CWND size is determined by initial segment size, not MSS?
ip route show cache
shows something like
cache mtu 1500 rtt 361ms rttvar 360ms cwnd 5 advmss 1460 hoplimit 64
I wonder if it means that CWND=5MSS?