Bug 195617

Summary: TCP may send small segments limited to initial window size
Product: Networking Reporter: Ambroz Bizjak (ambrop7)
Component: IPV4Assignee: Stephen Hemminger (stephen)
Status: NEW ---    
Severity: normal    
Priority: P1    
Hardware: All   
OS: Linux   
Kernel Version: 4.9.24 Subsystem:
Regression: No Bisected commit-id:
Attachments: packet trace

Description Ambroz Bizjak 2017-04-30 00:50:22 UTC
Created attachment 256141 [details]
packet trace

I am seeing what I believe is faulty behavior when a Linux client connects to a TCP/IPv4 server which advertises a very small initial window. After the client sends a small segment limited to this small window, the server ACKs the data and extends the window considerably, but the client proceeds to send very small segments.

Here is a summary of the packets:
- Client: SYN
- Server: SYN,ACK,Win=1
- Client: ACK
- Client: ACK,Data=1B
- Server: ACK,Win=49984
- Client: ACK,Data=47B
- Client: ACK,Data=48B
- Client: ACK,Data=48B
- Client: ACK,Data=48B
...

This example was with initially advertised window (WIN) equal to 1, but generally it appears that Linux will limit outgoing segments to no more than max(48,WIN).

I have tested the server with a Windows 10 client which does not have this problem, the client starts sending fully sized segments when the window is extended.