TCP状态机

TCP客户端与服务器端连接过程和断开过程及各自的状态变化,如下图所示:
TCP三次握手建立连接、四次挥手断开连接

  • TCP三次握手方可建立连接:
  1. 客户端发出SYN SeqA;
  2. 服务器端收到SYN请求后发出SYN SeqB请求后确认客户端收到SYN请求;
  3. 客户端收到服务器SYN请求并确认该同步的请求,此刻客户端就建立起客户端至服务器端的连接进入ESTABLISHED状态;
  4. 服务器端收到SYN请求的ACK包时便建立服务器端至客户端的连接并进入ESTABLISHED状态。
  • TCP四次挥手断开连接:
  1. 客户端请求断开连接(FIN seq=M)并进入FIN_WAIT1状态;
  2. 服务器端响应客户端的请求(ACK M+1)进入CLOSE_WAIT状态;
  3. 客户端收到FIN请求的确认包后进入FIN_WAIT2状态;
  4. 服务器端发起断开请求FIN N(LAST_ACK),客户端收到该请求后等待2MSL时间(Max Segment Life,报文段最大生存时间)确认该请求关闭连接。

FIN_WAIT1状态

RTT(往返时间)和RTO,等待服务器端确认断开请求。一个TCP端一旦发起了建立连接请求,暂不考虑同时打开同时关闭的情况,就一定要到其中一方的TIME_WAIT超时而结束。 如何避免TCP状态机进入死锁状态:①如果客户端和服务器处于ESTABLISHED状态,则可以通过Keepalive机制避免;②如果他们处于其他状态则可以通过设置retries方式避免。
TCP重试参数设置

CLOSE_WAIT状态

当服务器收到客户端FIN请求并确认后就会进入CLOSE_WAIT状态,等待应用层做出断开连接的操作。CLOSE_WAIT状态与LAST_ACK状态统称为服务器端被动关闭阶段。

FIN_WAIT2状态

当客户端发出断开连接请求并收到服务器端的确认,客户端就会进入FIN_WAIT2状态,同时服务器端亦会进入CLOSE_WAIT状态。原则上客户端会一直等待服务器端断开连接的请求,除非是客户端在进行半关闭行为,否则客户端和服务器端均保持现有状态,等待应用层决定是否关闭当前连接实际上为了避免出现客户端在FIN_WAIT2状态无限等待,客户端进行全关闭时会设置一个定时器,如果这个连接空闲10分57秒TCP将会进入CLOSED状态

TIME_WAIT状态(等待2MSL时间)

MSL时间(报文段最大生存时间,MAX Segment Life Time),即报文段被丢弃前在网络内的最长时间,这个时间受IP数据报的TTL(Time To Live)限制,规范中要求的是2分钟,实现中常用值是30秒,1分钟或2分钟。MSL时间设置的原则:①当TCP执行一个主动关闭时,并发回最后一个ACK,该连接必须在TIME_WAIT状态等待2MSL时间,如此可以让TCP在此发送最后的这个ACK以防止服务器FIN请求的ACK丢失(服务器端超时并重发最后的FIN);②TCP原则上避免使用处于2MSL等待时间的插口(客户端IP地址和端口号,服务器端IP地址和端口号)被使用,只能等2MSL时间结束后方可使用该插口-旧的连接可能会有迟到的报文到达,新的连接极有可能曲解旧连接的报文。IP地址和端口号唯一确定一个插口资源,建立在该插口上的连接被称为替身。 The only thing that can arrive in this state is a retransmission of the remote FIN. Acknowledge it, and restart the 2 MSL timeout.

平静时间

指的是如果在TIME_WAIT状态客户端突然挂掉并立即重启,TCP在MSL时间内不允许建立新的连接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Teamo.Q

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

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

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

打赏作者

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

抵扣说明:

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

余额充值