2关于tcp delayedack实践(二)http

使用netty(五)http服务中的服务代码

tcpdump -i eth0 tcp and port 8990  -s 0 -w traffic.pcap

 

三次握手+http+四次挥手,应证了——[专项]tcp状态机,为什么3次握手(很好)(done)

可以看到,断开连接时,本例中ack与fin放在一起了

 

问题一:为啥本例的server ack立即返回了?

根据关于tcp delayedack实践,在连接初始建立的时候,按照上面描述会进入quick ACK模式,所以http短链接不会deleyed ack

我们用一个连接多次http请求试试看,使用safari(curl会切断连接,每次都新开一个tcp连接)

 

可以看到:

1)从第三次请求12开始,触发deleyed ack,跟在返回报文中了

2)客户端mac环境从第一次开始就有delayed ack. 40ms

3)这个多次http的例子可以看到完整的四次挥手,被动关闭方对fin先发一个ack,再发一个fin

 

问题二:ack能否被禁用nagle强制发送?

禁用nagle算法强制发送不适用于tcp层面自行发送的ack,仅适用于自己write的包

 

附件:

短链接1次请求-http.pcap.zip

长连接4次请求-n_http.pcap.zip

 

 

总结:
1 本文通过抓包,应证了http请求的三次握手4次挥手——[专项]tcp状态机,为什么3次握手(很好)(done)
2 验证了http短链接由于quickack而不会delayed ack
3 对于http长连接,几次请求后,服务端开启delayed ack,不再单独秒回ack,而是等待10ms与response一起返回

 
 
 
 
 

posted on 2019-12-02 21:15  silyvin  阅读(224)  评论(0编辑  收藏  举报