When sending approximately 24 KB of TCP data,
Despite the partner's window size of up to 49640 Byte (checked by Wireshark)
8KB transmission → 8KB transmission → 3KB response confirmation → +4KB response confirmation → +5KB response confirmation → 8KB transmission
It looks like this.
No other communication occurred during this time.
What are the possible reasons for not sending approximately 24 KB at once?
tcp
TCP performs a control called TCP Slow Start to avoid congestion in the communication band.At first, it sends slowly, increasing the amount of data that is sent at once while the other party successfully receives the response confirmation, and decreasing the transmission when the response confirmation is not received.
If the data size is larger and hundreds of KB, the size of the 16KB transmission is doubled to 32KB after receipt of the response confirmation, and then doubled to 64KB at once.
How about around?
8KB transmission → 8KB transmission → 3KB response confirmation → +4KB response confirmation → +5KB response confirmation → 8KB transmission
As far as this movement is concerned, isn't the Nagle algorithm working?
The Nagle algorithm behaves as follows:
■Nagle Algorithm Transmission Occurs (Excerpt from Wiki)
Case 1. Unsent data is greater than or equal to the maximum segment size
Case 2. No past transmitted packets have received an ACK (note TCP delay ACK)
Case 3. Timeout
The first 2 consecutive 8KB transmissions are configured with a maximum segment size of 8KB and
I think it's because it's beyond that.
After that, I think it is because the unsent data is not more than the maximum segment size (waiting for an ACK response).
Regarding the transmit buffer, if you send() 24KB and its return value is 24KB,
Accepted as TCP transmission (not out of transmit buffers).
We recommend using TCP_NODELAY if you want to execute the data that should be sent immediately.
As a supplement, Nagle algorithm is very incompatible with delay ACK, so there are often problems such as loss of communication and delay.
© 2024 OneMinuteCode. All rights reserved.