ipv4 connection problems

Noritoshi Demizu demizu at dd.iij4u.or.jp
Sun Mar 13 23:00:34 PST 2005


This post is not directly related to Peter Avalos's bug.

> Here's a tcpdump output of a 'telnet 0 80':

There are two patterns of TCP options in this trace as following.

 1st seg: <mss 16344,nop,wscale 0,nop,nop,sackOK,nop,nop,timestamp 251468000 0>
 2nd seg: <mss 16344,nop,wscale 0,nop,nop,sackOK,nop,nop,timestamp 251468000 0>
 3rd seg: <mss 16344,nop,wscale 0,nop,nop,sackOK,nop,nop,timestamp 251468000 0>
 4th seg: <mss 16344,nop,nop,sackOK>
 5th seg: <mss 16344,nop,nop,sackOK>
 6th seg: <mss 16344,nop,nop,sackOK>
 7th seg: <mss 16344,nop,nop,sackOK>
 8th seg: <mss 16344,nop,nop,sackOK>
 9th seg: <mss 16344,nop,nop,sackOK>

I think the TCP Window Scale option and the TCP Timestamps options are
switched off by the following code fragment.  By considering its
purpose written in the comment, I think the TCP SACK-PERMITTED option
should also be disabled.

The easiest way would be to add (tp->t_rxtshift < 3) to the if-condition
at line 497 of tcp_input.c rev 1.25.  Another way would be to add
the TF_REQ_SACK_PERMITTED flag around (three places + one declaration ?).

=========================================================================
Line 490 - 498 of tcp_timer.c rev 1.13

	/*
	 * Disable rfc1323 and rfc1644 if we havn'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|TF_REQ_CC);

=========================================================================

Regards,
Noritoshi Demizu





More information about the Bugs mailing list