TCP的十一种状态

Connect主动发起连接,此时的状态为SYN_SENT,aceept接收到SYN信号后,进入到SYN_RCVD状态,然后发送一个SYN信号和应答信号,并且消耗一个序列号,然后客户端返回一个应答信号,此时双方都进入ESTABLISHID,这就是三次握手。
假设客户端主动关闭,此时客户端发送一个FIN信号,此时服务器端返回为0,然后发送一个确认信号,服务器端进入CLOSE_WAIT状态,客户端进FIN_WAIT2状态,服务器端发送一个FIN关系信号,进入LAST_ACK状态,客户端接收到该信号后进入TIME_WAIT状态,该状态保留2MSL时间,并且发送一个确定信号,服务器接收到进入CLOSED状态,客户端经过2MSL状态进入CLOSED状态。

为什么要三次握手?

主要是为了防止已经失效的连接诶请求报文突然重传个服务器,从而发生错误。正常情况:客户端发送一个请求连接,但是因为连接请求报文丢失而未收到确认,越是客户端重新发送一次请求连接,后来收到了确认,简历了连接,数据传输完毕后,就释放了连接,客户端发送了两个请求连接报文,其中一个丢失,一个达到,没有已失效的连接请求报文。现在假设有一种情况,A发送的第一请求报文并没有丢失,而是在网络中滞留了,以致延误到连接释放后的某个时间到达了服务器,本来这是一个失效的报文,但是服务器收到后,如果没有三次握手,将会认为是一个新的连接请求,于是双方就建立了连接,使用三次规则后,接收到延误的客户端请求,发小客户端没有后续的确认动作,因此并不会建立连接。

为什么要等2MSL才进入CLOSED状态?

(1)为了保证客户端发送的最后一个ACK报文能够达到服务器。这个ACK报文可能丢失,因而使处于LAST_ACK状态的服务器不能收到FIN+ACK报文的确认。此时,服务器会超时重传这个FIN+ACK报文段,而客户端能够在2MSL时间内收到这个重传信号,接着A重传一次确认,重新启动2MSL计时器,直到双方都进入正常关闭状态。
(2)防止已失效的连接报文请求报文段出现在此连接中。客户端发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的报文段。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值