TCP 状态分析(一)

一,状态迁移的规律

从FIN_WAIT_1 进行状态迁移有三个条件

  • 接收FIN
  • 接收ACK
  • 发送ACK

三个条件顺序不一样,迁移的状态也不同,并且接收FIN必须在发送ACK之前,所以只有以下几种情况。

条件:FIN,recv ACK,sent ACK

迁移后状态:TIME_WAIT

条件:FIN,sent ACK,recv ACK

迁移后状态:CLOSING, TIME_WAIT

条件:recv ACK, FIN, sent ACK

迁移后状态:FIN_WAIT_2, TIME_WAIT

##二,具体分析迁移条件

FIN_WAIT_1 – > CLOSING

  1. 先收到对端FIN报文,
  2. 未收到对端发送的ACK
  3. 发送对端FIN报文的ACK。

FIN_WAIT_1 --> FIN_WAIT_2

  1. 未收到对端FIN报文
  2. 收到对方对我方发送FIN的ACK

FIN_WAIT_1 --> TIME_WAIT

  1. 先收到对端FIN报文,
  2. 也收到对端发送的ACK
  3. 最后发送对端FIN报文的ACK。

三,产生大量某种状态的原因

大量FIN_WAIT_1状态

无法从FIN_WAIT_1 到 CLOSING

  1. 已经发送FIN报文

  2. 未收到FIN报文

  3. 未收到对端ACK

无法从FIN_WAIT_1到 FIN_WAIT_2

  1. 已经发送FIN
  2. 未收到对端发送的ACK

无法从FIN_WAIT_1到TIME_WAIT

  1. 已经发送FIN
  2. 未收到对端发送的FIN
  3. 未收到对端发送的ACK

大量FIN_WAIT_2

无法从FIN_WAIT_2到TIME_WAIT

  1. 未收到对端发送的FIN

大量CLOSING

无法从CLOSING到TIME_WAIT

  1. 无法接收到对端发送的ACK

大量CLOSE_WAIT

无法从CLOSE_WAIT到LAST_ACK

  1. 收到对端发送的FIN并发送ACK
  2. 但是没有发送本端FIN,可能是没有调用close函数

大量LAST_ACK

无法从LAST_ACK到CLOSED

  1. 收到对端发送的FIN,并回复ACK
  2. 发送本端的FIN
  3. 未收到对端发送的ACK

四,建立连接状态迁移

非同时打开情况:

client:

SYN_SENT–> ESTABLISHED:

  1. 已经发送SYN,调用connect函数

  2. 收到SYN + ACK

  3. 发送ACK

Server:

LISTEN --> SYN_REVD:

  1. 监听端口,调用listen函数
  2. 收到SYN
  3. 发送SYN + ACK

SYN_REVD --> ESTABLISHED:

  1. 收到ACK

大量SYN_SENT:

无法从SYN_SENT到ESTABLISHED:

  1. 未收到server端的SYN+ACK

无法从SYN_REVD到ESTABLISHED:

  1. 未收到client发送的ACK

同时打开情况:没有server和client的区分了

SYN_SENT–> SYN_REVD:

  1. 已经发送SYN,调用connect函数
  2. 收到对端SYN

SYN_REVD --> ESTABLISHED:

  1. 发送 SYN +ACK
  2. 收到SYN + ACK

大量SYN_SENT:

无法从SYN_SENT到SYN_REVD:

  1. 未收到对端SYN

无法从SYN_REVD到ESTABLISHED:

  1. 未收到对端的SYN+ACK

参考:
https://www.jianshu.com/p/3c7a0771b67e
https://blog.csdn.net/wuji0447/article/details/78356875
https://blog.csdn.net/huoqubing/article/details/6126189

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值