Date: Tue, 18 Jun 2002 18:27:39 +0800 From: "ef90b7323131bdf05e" <lguohan00@mails.tsinghua.edu.cn> To: freebsd-net@freebsd.org Subject: How cwnd is set after a loss in FreeBSD TCP? Message-ID: <20020618102912.DAA3237B40D@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
Hi, I use freebsd 4.5, and find a really unexplainable behavior of TCP. If there is no loss, TCP grows its cwnd and finally reaches the maximum window size advertised by the receiver, for example 12 packets, after a while a packet is lost. When the loss is recovered, TCP will begin its another windows increase cycle. As I thought, TCP should enter congestion avoidance when its cwnd reaches 7 (7=12/2+1). However, I found that TCP may still in slow start even when the cwnd is 8 or even greater. And it seems that the longer TCP stays in rcv_wnd before the loss, the larger beginning cwnd of AI is. For example: 31680 is the max rcv_wnd <- 139.817066 . 5385601:5387040(1440) ack 1 win 65535 owin 31680 then detect a loss... then slow start... until <- 143.046655 . 5444641:5446080(1440) ack 1 win 65535 owin 24480 TCP enters congestion avoidance, where 24480 >> 31680/2 = 15840 My explanation to this is that the ssthresh is not exactly half of the cwnd after detecting the loss. However, the explanation seems contradicts with RFC2581, which say ssthresh must be no more than max( FlightSize /2, 2*SMSS). The behavior puzzled me for a while. Is it a bug or just the right behavior? Can anyone help to explain it? I have dump file the the figure of this behavior, if anyone want, I will email it. ************************************** Lu Guohan Department of Electronical Engineering Tsinghua University, P.R. China lguohan00@mails.tsinghua.edu.cn ************************************** To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020618102912.DAA3237B40D>