TCP中的keep-alive:
为了避免对方网络程序意外下线或者断网断电,TCP会在间隔一段时间后发送数据给对方。(心跳检测机制)
对方可达:
- 程序正常运行,返回ACK,无恙
- 如果对方程序异常退出,返回RST
- 如果对方程序正常退出,返回FIN
对方可能不可达
- 不响应ack、rst,继续发送到超时,则撤销连接。
HTTP的keep-alive
复用之前的TCP连接,HTTP1.1之后都默认开启。
- 如何知道数据接收完了?
如果没有开启keep-alive,关闭连接的时候会返回EOF(-1)给客户端。
如果开启了keep-alive,那么
方法1:静态数据,根据Content-Length字段计算长度。
方法2:动态数据(Transfer-Encoding: chunk
)数据传输结束的时候,最后一个chunk长度是0。
网友评论