tcp不同场景下的关闭分析

tcp的关闭可以分为两大类场景

一、socket主动close,或在socket没有close的情况下进程exit退出,或kill -9强制关掉进程( kill掉进程时,内核会清理掉文件描述符(包括socket描述符 ))

这3种场景都可以看做同一种情况。具体又可以分为两种情况

  1. 如果发送缓冲区或接收缓冲区任然有数据未发送或未接收,则会发rst包给对端,对端收到后不回应直接关闭连接
  2. 如果缓冲区没有数据,则正常4次握手关闭连接

二、断网,或断电

  • 这种情况下,对端感知不到。如果应用层开发人员自己做了心跳检测,则心跳超时达到预设次数后就可以关闭。
  • 如果应用层没有开发心跳功能。则依赖于tcp的保活机制(keepalive),原理和心跳一样,超时重发,直到达到重发次数上限,关闭连接。
posted @ 2016-09-07 20:30  黑暗遊侠  阅读(227)  评论(0编辑  收藏  举报