您的位置:首页 > 理论基础 > 计算机网络

TCP服务器是否需要心跳包?

2011-12-13 12:31 246 查看
之前的测试都是,手动强制关闭客户端进程,然后查看服务器的情况,结果往往是,服务器收到了客户端关闭的事件。其实,我一直忽略了一个问题,我没有拔掉网线来测试!
上面的手动关闭客户端进程,事实上并不能测试出想要的结果,因为进程是在应用层的,所以,这种测试方法不能保证网络驱动层也不发送数据报文给服务器。经过测试发现,当应用层强制结束进程时,对于TCP连接,驱动层会发送reset数据包!而服务器收到这个数据包就可以正常关闭了!

那么,如果拔掉网线呢,服务器收不到这个数据包,就会导致死连接存在!

所以,心跳包是必要的,或者使用TCP协议本身的Keep-alive来设置。

之所以产生前面的误解,也是由于以前看书的时候,凭空想象,以为TCP连接如同一条绳子,一方断开了,另外一方必然会知道的。殊不知,TCP连接,这个“面向连接”的连接并不存在,它只是抽象出来的概念,对于物理层,对于网线、光纤而言,不存在连接不连接的概念,因为,对它们而言,无非就是一些电流脉冲而已。TCP的连接,不过是通过ACK、SEQ这些机制来模拟实现的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐