为什么是三次握手?为什么是四次挥手?_一个博客id_新浪博客

一切为了服务器可以高效的提高服务和运转;


为什么是三次握手而不是俩次呢?


在这里我们假设是俩次握手:
客户端第一次向服务器发送一个请求,由于网络阻塞服务器没有收到该请求。
客户端大哥等不及了,又向服务器发送了一次请求,这次网络不阻塞了,双方经过俩次握手成功建立了一次对话。
与此同时,客户端第一次发送的请求到达了服务器,服务器又向客户端发送一个请求,但是此时客户端不认账了,不回去理会这个请求报文,而服务器以为已经建立好了链接,傻傻的等待客户端发送数据过来,这样的链接如果太多,使得服务器性能大大降低。

总结一句话:俩次握手不能阻止客户端失效的请求链接到达服务器,而且造成服务器以为建立好链接的假象,造成系统的性能降低;三次握手就不会,因为他最后会进行一次确认,这样就不会给服务器带来已经将链接建立好的假象。

四次握手行不行?
可以。但是没必要,浪费网络资源。



为什么是四次挥手而不是三次:

在三次握手的过程中,SYN和ACK是一起发送的但是在四次挥手的时候FIN和ACK却不是一起发送的而是分开发送的,为什么呢???那是因为啊,TCP连接是全双工的也就是说接收到FIN只是说没有数据再发过来但是还是可以发送数据的,也就是接受到一个FIN只是关闭了一个方向的数据传输,另一个方向还可以继续发送数据。在四次挥手的时候也是这样前两次挥手只是确认关闭了一个方向的数据,加上后面两次挥手才真正的关闭了整个全双工连接。

       当socket在ESTABISHED状态时,他想主动关闭连接于是向对方发送FIN请求,发送完FIN请求后它处于FIN_WAIT_1状态,当对方确认ACK报文后则处于FIN_WAIT_2状态。FIN_WAIT_2表示半连接,也就是有一方要求关闭连接,另一方收到请求但是告诉她我还有一些数据要发送稍后会关闭。TIME_WAIT状态表示收到对方的FIN并发送出ACK.如果三次挥手可能在关闭后还有一个方向没有关。

1.前俩次挥手:结束一个方向上的链接

2.后俩次挥手:结束另外一个方向上的链接

为什么是三次握手?为什么是四次挥手?
是不是有点像男女朋友分手似的。哈哈哈哈

保TCP的俩个方向上的通信链路全都关闭,恰好完成多一次没必要,少一次不行。


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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值