Wireshark-dev: Re: [Wireshark-dev] About window scale option
From: John Sullivan <jsethdev@xxxxxxxxxxxxxxxxxxxx>
Date: Thu, 30 Oct 2014 06:07:49 +0000
On Wednesday, October 29, 2014, 6:42:00 PM, Jeff Morriss wrote: > On 10/28/14 11:12, ?? wrote: >> Hi , >> >> If the server does not support 'Window Scale' option, even the >> client send one packet with WS=256, I thought the real window size >> should be consider small than 64K. But I can see the 'Calculated >> window size' is larger that 64K on Wireshark1.12.1, is there something >> wrong ? the trace file is attached. > Well remember that on a given TCP connection there are 2 window sizes: > that of the client and that of the server. Technically 6, 3 in each direction. The effective window is the minimum of the 3 which apply in a particular direction. There is the receiver's advertised window, which itself is determined by (according to implementation) the minimum of the receiver's buffer and its own congestion implementation. (There are receivers that will open their window wide open to the full buffer from the outset, others, including current Linux under default but changeable configuration, which will only open their window to a little more than they expect the sender's congestion control to be able to exploit. I guess you could interpret that as 8 (4 in each direction) separate windows if the receiver is doing that.) The sender is not allowed to exceed the advertised window, however that is determined by the receiver. Then there is the sender's physical window, which doesn't appear on the wire but is determined by the maximum buffer space the sender is prepared to allocate. Since it must be prepared to retransmit any data within the window it must hold all in-flight data in memory until ACKed. Then there is the sender's congestion window, to which TCP slow start applies. Old-style, 3*MSS initially, new-style generally larger, 10*MSS as the current Linux default, other systems may have other initial defaults (and some local configurations raise it *much* higher to optimise early thoughput), rising each round-trip by the amount of ACKed data (so under ideal conditions, doubling each RTT until it hits one of the other limits or detects packet loss.) > In this trace the client supports scaling but the server does not. > Wireshark (at least the development version I just tried) correctly > applied scaling to the client's window but not to the server's window: If the server doesn't send a Window Scale option, not even with a scale factor of 1 (indicating it understands, but is not using it on its own advertised receive windows), then it doesn't understand the option and the client should assume it doesn't apply. Not that it *really* matters since the server will simply not be using all of the client's allowed receive window and the client never had any expectation that it ought to be receiving a certain amount of data at any point anyway. (The one place it might matter is a boundary error condition: if the server doesn't SYN/ACK the Window Scale option, but nevertheless puts more data on the wire than the client's window scaled by 1, but less than the client's window scaled by its own advertised Window Scale option, the server is technically in error and the client is entitled (probably even mandated) to drop that data regardless of local buffer availability.) Note that an old installation I have here on that attached pcap file, running Win32 WS 1.2.1 (29141), correctly decodes the client's Window Scale option but then not seeing a corresponding server option, uses the raw window for the client from then on. I haven't checked a more recent (less ancient!) build on that capture specifically (since pretty much everything does scaling these days it's not something I've noticed), but if it's now assuming unidirectional scaling it is almost certainly wrong. (Note the client initially advertises scale=8 (256), raw window=8192, which would be 2MB if accepted. Subsequently it advertises nearly the full 64k raw. Under scale=8 (256), that's 16MB, which is somewhat unlikely so the client presumably is acting in accordance with a scale of 1 from then on. Also, at the end, the client's raw window value has decreased by almost exactly the amount of data the server transmitted, also indicating no scaling.) >> > ./tshark -Y "ip.src==192.168.1.200" -Vr /tmp/window_scale_neg.pcapng |grep -i "window size" >> Window size value: 8192 >> [Calculated window size: 8192] >> Window size value: 64952 >> [Calculated window size: 16627712] <<< Scaling applied >> [Window size scaling factor: 256] >> Window size value: 64952 >> [Calculated window size: 16627712] >> [Window size scaling factor: 256] >> Window size value: 64222 >> [Calculated window size: 16440832] >> [Window size scaling factor: 256] >> Window size value: 64222 >> [Calculated window size: 16440832] >> [Window size scaling factor: 256] >> > ./tshark -Y "ip.dst==192.168.1.200" -Vr /tmp/window_scale_neg.pcapng |grep -i "window size" >> Window size value: 14600 >> [Calculated window size: 14600] >> Window size value: 11256 >> [Calculated window size: 11256] <<< No Scaling applied >> [Window size scaling factor: -2 (no window scaling used)] >> Window size value: 11256 >> [Calculated window size: 11256] >> [Window size scaling factor: -2 (no window scaling used)] >> Window size value: 11256 >> [Calculated window size: 11256] >> [Window size scaling factor: -2 (no window scaling used)] >> Window size value: 11256 >> [Calculated window size: 11256] >> [Window size scaling factor: -2 (no window scaling used)] > ___________________________________________________________________________ > Sent via: Wireshark-dev mailing list <wireshark-dev@xxxxxxxxxxxxx> > Archives: http://www.wireshark.org/lists/wireshark-dev > Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev > mailto:wireshark-dev-request@xxxxxxxxxxxxx?subject=unsubscribe John -- Dead stars still burn
- Follow-Ups:
- Re: [Wireshark-dev] About window scale option
- From: Jeff Morriss
- Re: [Wireshark-dev] About window scale option
- References:
- [Wireshark-dev] About window scale option
- From: 徐鸿
- Re: [Wireshark-dev] About window scale option
- From: Jeff Morriss
- [Wireshark-dev] About window scale option
- Prev by Date: Re: [Wireshark-dev] About window scale option
- Next by Date: Re: [Wireshark-dev] TCP: Retrieving connection initiator as well as looping through connections
- Previous by thread: Re: [Wireshark-dev] About window scale option
- Next by thread: Re: [Wireshark-dev] About window scale option
- Index(es):