Subject: Re: Limiting the advertised MSS, again.
To: NetBSD Networking Technical Discussion List <tech-net@NetBSD.ORG>
From: Greg A. Woods <woods@weird.com>
List: tech-net
Date: 12/07/2001 00:01:15
[ On Thursday, December 6, 2001 at 22:02:11 (-0500), Rick Byers wrote: ]
> Subject: Limiting the advertised MSS, again.
>
> Someone mentioned that lowering the MTU on a route should cause the
> TCP MSS to get lowered correspondingly.  I thought it was working, but I
> must have been drunk or something, because the per-route MTU doesn't seem
> to affect the advertised MSS at all (which I should have known since I've
> was staring at the tcp_mss_to_advertise code).

Hmmm.... isn't Path-MTU Discovery implemented in NetBSD by simply
adding a host route with a per-route MTU?  Path-MTU-discovery certainly
seemed to work the last time I needed it....   Hmmm.... or does that
only need to lower the MSS of outgoing packets, leaving the peer to deal
with it on its own...

> So, other than the patch I recently posted, there doesn't appear to be
> any way to convince NetBSD to lower the advertised MSS without lowering
> the interface MTU.  I consider being able to lower the advertised MSS a
> handy feature, especially considering all the broken networks.  Its
> conceivable that someone might want to use NetBSD behind a reduced-mtu
> gateway which they have no control over, and which doesn't implement TCP
> MSS clamping.  In that scenario, the only way to cope with blackholed
> sites is to convince NetBSD to lower the MSS it advertises.

If you're behind such a reduced-MTU gateway then it might be simpler to
just the MTU on your interface and be done with it.  Of course if you've
got a lot of local traffic to consider then you might try to find a way
to subnet and multi-home your machine so that you only have to reduce
the MTU on the interface connected to the gateway.

> Anyway, I know some people belive we shouldn't provide an option to cope
> with broken networks, but I believe the situation is already desperate
> enough that there is nothing to be gained by holding this feature back.
> Does anyone else think there should be a sysctl for lowering the MSS, or
> is there some better way?  Perhaps a per-route MRU or something to that
> effect?

Is there any reason why the setting of a per-route MTU cannot be made to
work?  If per-route MTUs don't affect the MSS does that mean the current
Path-MTU discovery code assumes the peer is also doing the same?

You could also just try setting net.inet.tcp.mssdflt to some smaller
value.  Back when I was using a GIF tunnel for my default route I was
experimenting with the following settings in /etc/sysctl.conf:

	# the GIF tunnel needs some bytes for the GIF header...
	#
	# somehow or another the GIF still has to fragments packets
	# sometimes, even when mssdflt is set way low
	#
	net.inet.tcp.mssdflt=1024

	# on the other hand since we know what we are doing at this end
	# it maybe does make sense to use Path-MTU-discovery.
	# 
	net.inet.ip.mtudisc=1

	# This seems like a very good idea regardless....
	#
	net.inet.tcp.mss_ifmtu=1

As you can see from my comments I wasn't 100% successful with
controlling packet sizes, and at the time I was having trouble resolving
differences between what I read in Stevens' books and the NetBSD code.

Maybe all we need is a 'net.inet.tcp.mss_rtmtu' flag.... ;-)

-- 
								Greg A. Woods

+1 416 218-0098;  <gwoods@acm.org>;  <g.a.woods@ieee.org>;  <woods@robohack.ca>
Planix, Inc. <woods@planix.com>; VE3TCP; Secrets of the Weird <woods@weird.com>