[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [lwip-devel] Question regarding calling tcp_output() from tcp_input(
Re: [lwip-devel] Question regarding calling tcp_output() from tcp_input() each time
Tue, 8 Aug 2017 20:18:47 +0200
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
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.