面试中常被问到的(22)TCP三次握手/四次挥手及问题

本文详细介绍了TCP的三次握手和四次挥手过程,解释了为何握手是三次、挥手是四次的原因。三次握手确保了连接的安全建立,防止了SYN泛洪攻击;四次挥手则确保了全双工通信中双方数据发送功能的彻底关闭,防止资源浪费。此外,还讨论了握手失败后的处理方法和TIME_WAIT状态的作用,以及大量TIME_WAIT和CLOSE_WAIT状态出现的原因及解决方案。
摘要由CSDN通过智能技术生成
  • TCP三次握手:

 

连接:

客户端:发送syn请求,收到服务端ack确认,连接建立

服务端:监听syn请求,收到客户端syn请求新建套接字进行ack回复,确认连接建立

状态:

客户端:SYN_SEND->EATABLISHED

服务端:LISTEN->SYN_RCVD->ESTABLISHED

  • TCP四次挥手

连接:

主动关闭方:发送FIN请求,关闭主动方发送数据功能(接收数据依然存在)并收到确认关闭,再次收到被动方FIN请求进行回复确认,等待一段之间后自动关闭

被动关闭方:接收到FIN请求,并确认回复,再次发起FIN请求,关闭被动方发送数据功能,再次收到主动方确认后直接关闭

状态:

主动关闭方:FIN_WAIT1->FIN_WAIT2->TIME_WAIT->CLOSED

被动关闭方:CLOSE_WAIT->LAST_ACK->CLOSED

核心问题:

  • 握手为什么是三次,挥手是四次?

首先,握手四次没有必要,两次不安全,三次最佳

tcp是全双工通信,通信建立连接的前提是必须保证通信双方都具备数据收发的能力

如果仅握手两次(客户端syn请求,服务端ack回复)是不安全的,容易遭受syn泛洪攻击,即黑客伪造大量syn请求发送给服务器,服务器收到请求后逐一回复建立连接,分配资源,但恶意攻击并无真实功能,只会造成大量资源浪费,阻碍正常客户端发起的连接。其次如果服务器返回给客户端的ack确认传输过程中丢失,客户端没有收到确认回复拒绝接受数据,造成服务端一直发送,客户端一直拒绝,形成死锁

如果握手四次,也没有必要。三次握手过程中,其中就包含了针对一个连接请求,双方都进行了确认回复,保证发送双方都在线保证数据可以正常收发

而四次挥手也是因为tcp是全双工通信,主动关闭方发送fin请求被动关闭方接收到之后进行回复确认,只能说明主动关闭方不再发送数据,但并不意味着被动关闭方不再发送数据。主动关闭方依然具备数据接收能力,此时如果被动关闭方依然存在尚未发送完成的数据,依然会发送数据。因此,只有等被动关闭方主动发起关闭请求后,才能说明双方都关闭了数据发送功能,彻底断开了连接。如果不是双方主动发起关闭请求,依然不能保证连接彻底断开。

  • 三次握手失败后如何处理?

当服务端向客户端发送syn+ack后,如果超时等不到客户端ack确认认为三次握手失败,此时客户端会发送rst重置连接报文,服务端释放新建套接字

  • TIME_WAIT有什么作用?

首先明确,TIME_WAIT状态是在主动关闭方接收到被动关闭方fin请求后最后一次进行回复后进入的状态

TIME_WAIT会延时一段时间(2mls=120s)在释放资源,保证能够对被关闭方重传的fin请求进行处理,避免本次通信请求对下一次新建连接造成影响

为什么会造成影响?如果最后一次的确认回复在传输过程中丢失,被动关闭方没有接收到最后一次的确认回复,会重新发起fin请求,此时如果主动关闭方没有TIME_WAIT等待一段时间,而是直接释放资源的话。有可能新建客户端连接依然绑定刚释放的ip地址,来自被关闭方重传的fin请求会导致新客户端受影响

  • 如果一台主机出现大量的TIME_WAIT是什么原因?

TIME_WAIT状态是在主动关闭方接收到被动关闭方fin请求后最后一次进行回复后进入的状态,大量TIME_WAIT出现是由于被动关闭方调用close/shutdown关闭大量socket套接字

j解决方法:

(1)减少TIME_WAIT时间 

(2)使用套接字选项setsockopt(SO_REUSEADDR):地址复用(进入TIME_WAIT状态的地址依然有效可以使用)

  • 如果一台主机出现大量的CLOSE_WAIT是什么原因?

首先,CLOSE_WAIT状态是被动关闭方接收到主动关闭方的fin请求,并进行回复后进入的状态,大量CLOSE_WAIT状态表明被动关闭方上层迟迟没有调用close/shutdown来关闭被动方发送数据的功能,导致被动关闭方收到多个请求关闭,一直等待上层调用进行主动关闭

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HT . WANG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值