Chuck Swiger wrote:
On Mar 7, 2007, at 2:35 PM, Justin Robertson wrote:
The issue here is that no windows PC is compliant, and continues to
try and send SYN SACK packets until giving up entirely on the
connection - I've already tried this. I can't tell you why the bsd
stack doesn't have an issue with bare SYNs, but does on SYNs with
SACK set in the tcpoptions, but it apparently does.
Example - windows PC trying to connect to POP mailserver, sacks
blocked (being viewed from firewall)
14:31:54.632444 client.52985 > server.110: S [tcp sum ok]
3734795545:3734795545(0) win 8192 <mss 1460,nop,wscale
8,nop,nop,sackOK> (DF) (ttl 115, id 12030, len 52)
14:31:57.629151 client.52985 > server.110: S [tcp sum ok]
3734795545:3734795545(0) win 8192 <mss 1460,nop,wscale
8,nop,nop,sackOK> (DF) (ttl 115, id 12034, len 52)
14:32:03.635511 client.52985 > server.110: S [tcp sum ok]
3734795545:3734795545(0) win 8192 <mss 1460,nop,nop,sackOK> (DF) (ttl
115, id 12046, len 48)
You get three sack attempted retransmissions, then failure. It's not
sending selective acks, it's trying to establish that selective acks
are allowed for the rest of the communication between client/server.
Which flavor of Windows was the sender?
I seem to recall that Win2000/XP/2003 was willing to resend the SYN
without enabling the SACK option after a few retries, but it's been a
while since I've done that sort of testing...
I just want to strip the sack options from the packet and pass it on.
The "issue" is that BSD can't cope with a flood of syn/sack permitted
packets. All IP lags, and on 6.x stops all-together.
Is the machine you're testing against the destination of this traffic,
or are you wanting to change this on a firewall box which lies between
the sender and destination?
If the latter, I would agree that you'd need to hack the firewall
code. But if the former, take a look into
/usr/src/sys/netinet/tcp_input.c for the tcp_dooptions() function, and
try to #ifdef out the cases for TCPOPT_SACK_PERMITTED & TCPOPT_SACK?
---Chuck
All latest windows updated XP machines, as well as all new Vista
machines have this issue. And this is being done on a firewall box
between sender/destination. The firewall machine itself (even in a
transparent bridge) lags when passing SYN w/ SACK - hence the need to
hack up ipfw to strip TCP options.
--
Justin
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-ipfw
To unsubscribe, send any mail to "[EMAIL PROTECTED]"