12读缓冲区(滑动窗口)耗尽与write阻塞、拆包、延迟(二)窗口唤醒

读缓冲区(滑动窗口)耗尽与write阻塞、拆包、延迟(一)上一篇中,我们让服务端不读,这一篇中,让她等12s再读,看看滑动窗口变化通信

代码不变,server 启动时 +参数12 

 

结论:

1 为什么sleep 12s,因为要与客户端阻塞后每5s发送一次的询问区分开

2 到25号报文,服务端告诉客户端我这边只有52个字节缓冲了,客户端写入100字节,阻塞,经过5s未收到服务端的Tcp Window Update,无奈之下拆包先发送52个字节,又等了5s,等不及了,主动询问服务端有没有空间(len=1),被告知没有(报文28-29),这一段,与读缓冲区(滑动窗口)耗尽与write阻塞、拆包、延迟(一)

3 经过sleep 12s,服务端终于读了所有缓冲区的内容,空出1072个字节,并主动告诉客户端,我有空间了,来来来(Tcp WIndow Update)

4 请注意,此时31号报文,客户端接到服务端电话,好先把之前发送缓冲区的48个字节(未在图中标红31报文)发出去,在此期间并未唤醒write先填满剩余的52个字节

5 从33号报文开始,正常推送100字节直至程序结束

 

 

窗口耗尽阻塞再唤醒.pcap.zip

posted on 2019-12-14 00:23  silyvin  阅读(239)  评论(0编辑  收藏  举报