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