您的位置:首页 > 职场人生

面试题目整理 关于服务器TIME_WAIT和CLOSE_WAIT

2017-03-15 18:50 1041 查看
关于TCP 三次握手和四次挥手下面这个图已经很清晰了(盗图)



我之前用asio碰到过 大量连接 CLOSE_WAIT 状态

现在想想是没调用 socket_.shutdown(tcp::socket::shutdown::shutdown_both,ec);就直接析构了socket_

具体原因是客户端请求关闭连接的时候 服务器在收到 FIN M 之后 没发送 ack M+1 和 FIN N

正确的关闭连接是:

boost::system::error_code ec;

socket_.cancel(ec);

socket_.shutdown(tcp::socket::shutdown_both,ec);

socket_.close(ec);

而 TIME_WAIT状态出现在服务器接受了大量连接 主动关闭连接的时候(一般是web服务器)

这时候就要考虑是不是被攻击了

这里有篇文章讲解的比较详细
http://www.cnblogs.com/sunxucool/p/3449068.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux socket tcp