To: end2end-interest@ISI.EDU cc: Bcc: Fcc: +sent From: Sally Floyd Subject: checking for Reno TCP in web servers, FYI Here is a procedure that I think would work for checking whether a particular web server is using Reno, Tahoe, NewReno, or SACK TCP. It requires the ability to configure the receiver's advertised window at the web client, and a mechanism (such as Dummynet) to drop specific arriving data packets: * Set the receiver's advertised window so that the maximum window is 5 packets. * Request some data that will require at least 25 packets. * After the congestion window has reached five packets, drop arriving data packets n and n+3. For example, drop the 16-th and 19-th arriving data packets (assuming that the data packets have been arriving in-order and without drops). Given a SACK-capable client, it is easy to check for SACK - just see if the SYN and SYN-ACK packets both advertised "SACK-permitted". So assume that we have a non-SACK connection. (1) If the server waits for a retransmit timer to expire before retransmitting packet n+3, then the server is using Reno. This can be detected, with tcpdump, by the long time interval before the second transmission of packet n+3. (2) If the server unnecessarily retransmits packet n+4, the the server is using Tahoe. (The Tahoe server will not have to wait for a retransmit timer to expire, however.) (3) If the server does not do (1) or (2), then it is some variant of NewReno or SACK. (I have not tried to do this myself, however.) The validation test "./test-all-testReno" in NS illustrates these four scenarios (and will be available in the nightly snapshot posted tonight). - Sally