local -> remote "SEQ=0, LEN=1500" (received)
remote -> local "ACK=1500, WND=0" (received - inbox is now empty, new writes are rejected)
remote -> local "ACK=1500, WND=1500" (lost)
Since we don't attempt to send anything when the window is full, we will deadlock. According to the TCP RFC, we should try to send probing packets even when the window is full to periodically check if the window has reopened.
Consider:
local -> remote "SEQ=0, LEN=1500" (received) remote -> local "ACK=1500, WND=0" (received - inbox is now empty, new writes are rejected) remote -> local "ACK=1500, WND=1500" (lost)
Since we don't attempt to send anything when the window is full, we will deadlock. According to the TCP RFC, we should try to send probing packets even when the window is full to periodically check if the window has reopened.