[Top][All Lists]

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

Re: [lwip-devel] Question regarding calling tcp_output() from tcp_input(

From: address@hidden
Subject: Re: [lwip-devel] Question regarding calling tcp_output() from tcp_input() each time
Date: Tue, 8 Aug 2017 20:18:47 +0200
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0

Roy Shterman wrote:
I would like to understand if there is some hidden reason beyond calling tcp_output() at the end of tcp_input(). we are already calling tcp_output() from tcp_recved() in case it is needed
by window size and amount of data we need to ack.

You mix up left and right edge of the window:
- from tcp_input(), we ACK the data
- from tcp_recved(), we increase the window size

Since there is no way for the stack to know exactly when the application will call tcp_recved(), ACKs must be sent right away to prevent the peer thinking the segment got lost. And applications are free to not update the window for a very long time! Plus, keep in mind the minimum timer frequency is 250ms. Delaying an ACK for that long might reduce throughput.

this tcp_output() from tcp_input() is causing enormous amount of empty ack towards the other end point.

Of course that's not too good, but noone has provided a decent, working solution for this, yet. Feel free to provide one :-) One accepted improvement are "delayed ACKs" where we only send an empty ACK for every 2nd segment.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]