TCP连接通信握手为什么三次,挥手为什么四次

TCP三次握手四次挥手的一些问题:

Tcp建立连接和断开连接

(1)握手为什么三次,挥手为什么四次
  • 握手三次:①TCP双向通信需要双方同时保持在现状态,因此客户端,服务端都会向彼此发送SYN请求,防止延迟SYN或是发送了SYN后退出。服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。②例如:假如说是两次握手,客服端会向服务端发送连接请求SYN,但是在服务器滞留了,此时客户端变为了closed状态,而服务器认为client想要建立一个新的连接,于是向客户端发送确认报文段,而客户端是closed状态,无论收到什么报文都会被丢弃。而如果是两次握手的话,此时就已经建立连接了,显然建立连接出错。
  • 挥手四次:①发送FIN只能说明不在发送数据,但不能说明不在接收数据,被动关闭方依然可能继续发送数据,只有等到自己不再发送数据的时候才会发送FIN。②服务端也未必全部数据都发送给对方了,所以服务端不可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,服务端的ACK和FIN一般都会分开发送。
(2)握手失败后服务器会如何处理:
  • 若服务器回复ACK+SYN后迟迟没有收到客户端的回应,则服务端会发送RST重置连接报文,然后销毁socket。
  • SYN泛洪攻击:恶意主机不断发送SYN给服务端,却不给服务端进行最后一次的ACK发送。
(3)TIME_WAIT状态有什么用:
  • 假设没有TIM_WAIT状态,主动关闭方直接释放socket,意味着端口和地址可以直接被使用。若最后一次主动关闭方发送ACK丢失,被动关闭方在等待 ACK超时后会重新发送FIN包;
  • 假设主动关闭方立即使用而刚才套接字的端口和地址信息重新启动程序:
    ①新的进程使用原先的地址信息进行通信,有可能会收到对方新传的FIN包。
    ②假设新的程序使用原先的地址信息连接相同的服务器,而这个时候服务器有可能正在等待最后一次ACK。
    这都是属于上次连接没有清空完毕,导致对新的连接造成影响。
(4)出现大量的close_wait和time_wait的原因:
  • close_wait的原因:连接关闭后,没有释放套接字。close_wait状态是被动关闭方收到FIN进行回复后的状态,等待用户确认关闭套接字不在给对方发送数据。
  • time_wait的原因:time_wait 主要是保护客户端的,是主动关闭方才会有的状态,大量主动关闭连接才会形成大量的time_wait。地址重用/缩短time_wait等待时间。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值