TCP状态

摘抄自《Linux/UNIX系统编程手册》

维护一个TCP连接需要同步协调这个连接的两端。为了减小这项任务的复杂度,TCP节点以状态机的方式来建模。这意味着TCP节点可以处于一组固定状态中的其中一种,并且根据对事件的响应来从一种状态迁移到另一种状态。比如可根据TCP上层的应用程序所执行的系统调用,又或者是从对端TCP节点接收到了TCP报文。TCP的状态有如下几种:

  1. LISTEN:TCP正等待从对端TCP节点发来的连接请求
  2. SYN_SENT:TCP发送了一个SYN报文,代表应用程序执行了一个主动打开的操作,并等待对端回应以此完成连接的建立
  3. SYNC_RECV:之前处于LISTEN状态的TCP节点收到了对端发送的SYN报文,并已经通过发送SYN/ACK报文做出了响应(即,这个TCP报文同时设置了SYN和ACK位),正等待对端TCP节点发送一个ACK以此完成连接的建立
  4. ESTABLISHED:与对端TCP节点间的连接建立完成。数据报文此时可以在两个TCP节点间双向交换。
  5. FIN_WAIT1:应用程序关闭了连接。TCP节点发送一个FIN报文到对端,以此终止本端的连接,并等待对端发来的ACK。这个状态以及接下来的3种状态都与应用程序执行主动关闭有关---也就是,首先关闭本端连接的应用程序
  6. FIN_WAIT2:之前处于FIN_WAIT1状态的TCP节点现在已经收到了对端TCP节点发来的ACK。
  7. CLOSING:之前处于FIN_WAIT1状态的TCP节点正在等待对端发送ACK,但却收到了FIN这表示对端也正在尝试执行一个主动关闭。(换句话说,这两个TCP节点几乎在同一时刻发送了FIN报文。这种情况非常罕见)
  8. TIME_WAIT:完成主动关闭后,TCP节点接收到了FIN报文。这表示对端执行了一个被动关闭。此时这个TCP节点将在TIME_WAIT状态中等待一段固定的时间,这是为了确保TCP连接能够可靠的终止,同时也是为了确保任何老的重复报文在重新建立同样的连接之前在网络中超时消失。当这个固定的时间段超时后,连接就关闭了,相关的内核资源都得到释放
  9. CLOSE_WAIT:TCP节点从对端收到FIN报文后将处于CLOSE_WAIT状态。该状态以及接下来的一个状态都同应用程序执行的被动关闭有关,也就是第二个执行关闭操作的应用。
  10. LAST_ACK:应用程序执行被动关闭,而之前处于CLOSE_WAIT状态的TCP节点发送一个FIN报文给对端,并等待对端的确认。当收到对端发来的确认ACK报文时,连接关闭,相关的内核资源都会得到释放。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值