TCP的三次握手和四次挥手常见面试题

1.为什么连接时是三次握手,而关闭时是四次挥手?

因为客户端在和服务器端连接时发送请求报文段,可以直接发送SYN+ACK报文(其中ACK是确认应答报文,SYN是同步状态报文),而在关闭连接时,当服务器端收到客户端FIN报文时,很有可能会因为自身数据没有发送完毕,而先发送给客户端一个ACK报文表示自己收到了,只有等到服务器端将数据传输完毕后才会向客户端回复FIN报文,因此不能一起发送ACK报文和FIN报文,所以需要四次挥手。

2.为什么服务器端在TIME-WAIT状态需要2MSL(最大报文段生存时间)才能进入CLOSED状态?

在断开连接式发送了四次报文,发送完毕后本应该直接进入CLOSED状态,但是网络是不可靠的,在最后客户端发送给服务端的ACK确认报文有可能是会丢失的,如果客户端没有等待2MSL时间,直接在发送确认报文后直接进入CLOSED,而服务器端实际上是没有收到确认报文,则会不断的重发确认报文段,此时的A已经关闭并不会有理睬,这就会导致服务器端关闭异常,所以客户端不能在发送ACK报文段后立即关闭,需要再发送后进入TIME-WAIT状态,客户端设置一个计时器,等待2MSL时间,如果在此事件内收到重发的FIN报文,客户端会重新发送ACK报文与服务器端进行确认在此等待2MSL,而等待的MSL时间就是在网络中一个报文段生存的最长时间,2MSL就是一次发送一次回复所需的最大时间,直到在2MSL时间断内没有收到重发的报文才会进入CLOSED状态,结束TCP连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值