On Oct 12, 2012, at 8:15 PM, George Neville-Neil wrote:
> 
> On Oct 12, 2012, at 12:13 , John Baldwin <j...@freebsd.org> wrote:
> 
>> Back in 2001 FreeBSD added a hack to strip TCP options from retransmitted 
>> SYNs 
>> starting with the 3rd SYN in this block in tcp_timer.c:
>> 
>>      /*
>>       * Disable rfc1323 if we haven't got any response to
>>       * our third SYN to work-around some broken terminal servers
>>       * (most of which have hopefully been retired) that have bad VJ
>>       * header compression code which trashes TCP segments containing
>>       * unknown-to-them TCP options.
>>       */
>>      if ((tp->t_state == TCPS_SYN_SENT) && (tp->t_rxtshift == 3))
>>              tp->t_flags &= ~(TF_REQ_SCALE|TF_REQ_TSTMP);
>> 
>> There is even a PR for the original bug report: kern/1689
>> 
>> However, there is an unintended consequence of this change that can be 
>> disastrous.  Specifically, suppose you have a FreeBSD client connecting to a 
>> server, and that the SYNs are arriving at the server successfully, but the 
>> first few return SYN/ACKs are dropped.  Eventually a SYN/ACK makes it 
>> through 
>> and the connection is established.
>> 
>> The server (based on the first SYN it saw) believes it has negotiated window 
>> scaling with the client.  The client, however, has broken what it promised 
>> in 
>> that first SYN and believes it is not using any window scaling at all.  This 
>> causes two forms of breakage:
>> 
>> 1) When the server advertises a scaled window (e.g. '8' for a 64k window
>>   scaled at 13), the client thinks it is an unscaled window ('8') and
>>   sends data to the server very slowly.
>> 
>> 2) When the client advertises an unscaled window (e.g. '65535' for a 64k
>>   window), the server thinks it has a huge window (65535 << 13 == 511MB)
>>   to send into.
>> 
>> I'm not sure that 2) is a problem per se, but I have definitely seen 
>> instances 
>> of 1) (and examined the 'struct tcpcb' in kgdb on both the server and client 
>> end of the connections to verify they disagreed on the scaling).
>> 
>> The original motivation of this change is to work around broken terminal 
>> servers that were old when this change was added in 2001.  Over 10 years 
>> later 
>> I think we should at least have an option to turn this work-around off, and 
>> possibly disable it by default.
>> 
>> Thoughts?
>> 
> 
> I'm all for taking that code out.
ACK.
> 
> Best,
> George
> 
> 
> _______________________________________________
> freebsd-net@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-net
> To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"
> 

_______________________________________________
freebsd-net@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-net
To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"

Reply via email to