以太网 TCP协议状态机的变化与TCP交互时状态变化介绍。

2.7.2 以太网 TCP协议(TCP报文交互后的状态机变化)

一、TCP状态机:

在这里插入图片描述

二、TCP状态机变化

1、TCP三次握手

  1. 客户端主动发起SYN置位TCP之后,状态变为SYN_SENT(请求发送状态)
  2. 服务器默认处于LISTEN(监听状态)。收到SYN报文之后,状态变为SYN_RCVD(请求回复状态 syn_received)。回复SYN、ACK置位TCP。
  3. 客户端收到服务器回复的SYN、ACK置位TCP,状态变为ESTABLISHED(建立连接状态)。回复服务器ACK置位TCP,表示客户端连接建立成功。
    • 当服务器收到客户端的ACK置位TCP后,也将成为ESTABLISHED状态

2、TCP四次挥手

  1. 客户端主动发送FIN、ACK置位的TCP之后,状态变为FIN_WAIT_1(结束等待状态1)
  2. 服务器收到FIN、ACK置位TCP,状态变为CLOSE_WAIT(关闭等待状态)。通知上层程序关闭相关TCP程序,同时回复ACK置位报文,表示收到断开连接信息。
    • 收到服务器回复的ACK置位TCP,状态变为FIN_WAIT_2(结束等待状态2,等待对方回复FIN、ACK报文)
  3. 服务器结束上层TCP程序之后,回复客户端FIN、ACK置位TCP,请求断开连接。状态变为LAST_ACK(最后确认状态)
  4. 客户端收到服务器FIN、ACK置位TCP后,状态变为TIME_WAIT(也称2MSL等待状态)。回复服务器ACK置位TCP,表示确认断开连接。
    • 服务器收到客户端ACK置位TCP之后,状态变为CLOSED,连接断开。

在这里插入图片描述

3、什么是2MSL?

  • RFC 793 [Postel 1981c] 指出MSL为2分钟。然而,实现中的常用值是30秒,1分钟,或2分钟。
  • TCP执行主动关闭的一端,收到FIN、ACK置位TCP发出最后一个ACK确认时所处状态。
  • 该连接必须在 TIME_WAIT状态停留的时间为 2倍的M S L。这样可防止最后的ACK在传输过程中丢失导致对端无法正常断开TCP:
    • 假设ACK丢失,对端因为没能及时接收到ack而超时进行重新发送FIN、ACK报文。
      • 如果不进行等待2MSL的时间,回复ACK之后就已经断开了连接。即使对端回复FIN、ACK也不会回复。
      • 如果进行等待2MSL的时间,此时连接仍然存在,收到FIN、ACK之后将再次回复ACK报文进行确认。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hades_Ling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值