tcp连接断开的一些面试常识

在三次握手阶段,主动连接方式依次经历: SYN_SENT ESTABLISHED状态,被动连接依次经历:SYN_RECEIVED   ESTABLISHED状态,主动连接放发送同步SYN报文后会进入STNC_SENT状态,被动连接方收到SYN报文后会发送SYN和 ACK报文并进入SYN_RECEIVED状态,等主动连接方收到这个SYNACK确认报文后会再次返回一个 ACK报文,使得双方建立起连接,这里面有一些面试中基本的问题

1.为什么需要第三次握手?

 如果两次握手,若有延时的SYN报文到达被动连接方后,被动连接方返回一个 SYNACK给主动连接方,但是主动连接方已经跟和被动连接端连接了,所以主动连接方会丢弃这个包,但是对于被动连接方来说,会保持这个连接(若只有两次握手,发送SYNACK后会立即进入ESTABLISHED状态),相当于浪费服务器的连接资源!


在断开连接的四次挥手中,主动断开方依次经历:FIN_WAIT1 FIN_WAIT2 WAIT_OUT CLOSE状态,被动断开方依次经历:CLOSE_WAIT LASC_ACK CLOSED状态,主动段开方断开时向被动断开方发送FIN报文并进入FIN_WAIT1状态,被动断开方收到FIN报文后回复ACK并进入CLOSE_WAIT状态,被动断开方再发送FIN给主动段开方并进入LAST_ACK状态,主动段开方收到FIN后发送最后的ACK并进入TIME_WAIT状态,被动断开方收到最后的 ACK报文后进入CLOSED状态

1.TIME_WAIT状态存在的意义

 网络是不可靠的,无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文,客户端发送的ACK在网路上丢失,这样服务器端收不到最后的ACK,重传定时器超时,将重传FIN到客户端,由于客户端关于该连接的所有资源都释放,收到重传的FIN后,它没有关于这个FIN的任何信息,所以向服务器端发送一个RST报文端,服务器端收到RST后,认为搞连接出现了异常(而非正常关闭)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值