Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-control-00.txt)
Andi Kleen <ak@muc.de> Wed, 12 August 1998 18:43 UTC
Return-Path: <owner-tcp-impl@relay.engr.sgi.com>
To: David Borman <dab@bsdi.com>
Cc: tcp-impl@cthulhu.engr.sgi.com, mathis@psc.edu
Subject: Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-control-00.txt)
References: <199808121840.NAA10344@frantic.bsdi.com>
From: Andi Kleen <ak@muc.de>
Date: Wed, 12 Aug 1998 20:43:20 +0200
In-Reply-To: David Borman's message of "Wed, 12 Aug 1998 13:40:37 -0500 (CDT)"
Message-ID: <k2pve62g8n.fsf@zero.aec.at>
X-Mailer: Gnus v5.6.30/Emacs 20.2
Sender: owner-tcp-impl@relay.engr.sgi.com
Precedence: bulk
Status: RO
Content-Length: 2195
Lines: 49
In article <199808121840.NAA10344@frantic.bsdi.com>, David Borman <dab@bsdi.com> writes: > Matt, >> MSS is better described as a sender state variable, which may or may >> not agree with the other end of the connection. >> >> As a consequence, algorithms that require the receiver to know the >> senders segment size can not, in general, be implemented correctly. >> >> In the draft, the sentence "Specifically, an ACK MUST be generated for >> every second full-sized segment.", is not sufficient to assure correct >> operation because the receiver can not identify segments which the >> sender considers to be full sized. > Yes you can. In the receiver, you implement a local state variable that > keeps track of the largest packet ever received from the peer, and use > that in determining how many full size packets you have received, instead > of the sending MSS. I implemented this in UNICOS years ago, and it worked > fine for most cases. What happens when the routing changes and path mtu discovery on the sender lowers the MSS effectively? Then after the routing shift this variable will contain a too big value and the receiver will not send enough acks. In Linux 2.1 this problem came up and got fixed with the following algorithm: Initialize rcv_mss with the mss the other end announced. If a packet arrives with len > rcv_mss set rcv_mss to len. If two packets with SS >= 536 arrive in a row set rcv_mss to this length. Send an ack at least for every rcv_mss*2 data bytes. The reason of the 536 rule is to make sure that delayed acks still work with interactive traffic. For paths with MTUs < 576 [some packet radio links] it will break, but it is assumed that those fragment/defragment at a lower layer. So far this algorithm seems to work well to adapt to changing MSS. The original reason for its implementation was the fact that a well-known workstation OS announces 64k MSS on a HIPPI interface, but effectively only sends 48k packets - the result was that Linux already got into delayed ack mode and the data transfer was very slow. So far this algorithm seems to work well, but I would be interested in a discussion about any shortcommings it may have. -Andi
- revision RFC 2001 (draft-ietf-tcpimpl-cong-contro… Vern Paxson
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Kacheong Poon
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Mark Allman
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Matt Mathis
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… David Borman
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Kacheong Poon
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Andi Kleen
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Andi Kleen
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Andi Kleen
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Kacheong.Poon
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Kevin M. Lahey
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Andi Kleen
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Vern Paxson
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Vern Paxson
- Re: revision RFC 2001 (draft-ietf-tcpimpl-cong-co… Vern Paxson