TCP window size issues

Carl Mascott cmascott at att.net
Fri Oct 17 17:16:36 PDT 2003


Here's a case that your logic does not handle correctly.

1. Kernel default buffer size = 32 KB

2. Routing table buffer size = 48 KB

3. Application sets buffer size to 32 KB

4. tcp_mss() selects 48 KB buffer size, giving the routing
   table precedence over the application.

I found it necessary to add a new flag with meaning
"the application set my size" to struct sockbuf.

I'll e-mail you a copy of my document.  Note that I have
backed out the patch from PR 11966.  You may not want to
do this.  It depends upon the correct answer to Issue #3
(shrinking the receive window) in my original posting.

NOTE: AFAIK, 4.4BSD through FreeBSD 4.6-R seem to have done
alright without the PR 11966 patch, but if someone knows
different, please speak up.

Andre Oppermann wrote:
>
> The patch in PR11966 has already been applied. It does not fix it.
> I've fixed it by redoing this check in tcp_input.c::tcp_mss():
>
>  if ((bufsize = rt->rt_rmx.rmx_sendpipe) == 0)
> 	bufsize = so->sn_snd.sb_hiwat;
>
> to:
>
>  if ((so->so_snd.sb_hiwat == tcp_sendspace) && rt->rt_rmx.rmx_sendpipe)
> 	bufsize = rt->rt_rmx.rmx_sendpipe;
>  else
> 	bufsize = so->so_snd.sb_hiwat;
>
>
> The theory goes that with default buffers so_snd.sb_hiwat and
> tcp_sendspace have the same size. If that is actually the case,
> we use whatever we've got from the metrics. If not, the user
> did some changes and we take that and ignore the metrics value.
> This is not yet tested in reality... just theoretical ;-)
>
> Anyway, I'm interested in your solutions as well.
>
> Carl Mascott wrote:
> > 
> > Actually I have just fixed it in my copy of 4.8-R.  I have a document
> > that describes the problem and my solution.  I could send you that
> > and/or a set of patches.  You might want to sketch out your own
> > solution before you look at mine, though.  Also, I'm not done
> > testing mine yet.
> > > Carl Mascott wrote:
> > > >
> > > > 2. The 4.4BSD TCP implementation has never had the correct precedence
> > > >    rules for setting window sizes.  App-set values should take
> > > >    precedence over all others.  Routing table values should take
> > > >    precedence over kernel default values.  The fix for PR 11966
> > > >    alters the behavior but still doesn't implement these precedence
> > > >    rules.
> > >
> > > I'll fix this in my tcp_hostcache patch currently under review by
> > > Sam Leffler and Ruslan Ermilov (however that is for -CURRENT).


More information about the freebsd-net mailing list