Window size less than MSS

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I'm trying to connect to some old banking code, which has a limited
TCP implementation.  When trying to connect with stock 2.4 and 2.6
kernels it fails.  I want to know if there is a way of working around
the problem that doesn't break anything.

The server doesn't reassemble fragments, so I need to send 311 bytes
of data on a TCP stream, in one fragment.  Since the MSS is 1460
(Ethernet), this shouldn't be a problem.  However, the server sets
it's window size to 536 (with a MSS of 1460).  Again, I should be
able to do this, but I can't.

In net/ipv4/tcp_output.c there is a chunk of code:

        /* Bound mss with half of window */
        if (tp->max_window && mss_now > (tp->max_window>>1))
                mss_now = max((tp->max_window>>1), 68U - tp->tcp_header_len);

which means the first packet is half of 536, or 268 bytes.
If I change it, I can connect.

Why /2?  Why not run:

        /* Bound mss with window */
        if (tp->max_window && mss_now > (tp->max_window))
                mss_now = max((tp->max_window), 68U - tp->tcp_header_len);

-- 
Regards,
Berend
-
: send the line "unsubscribe linux-net" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux