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

为什么是三次握手而不是两次或者四次:简单的说两次不可靠四次不高效。
具体说明一下为什么两次不可靠:服务器也发送syn到客户端,客户端收到回复ack。这个时候最多可以确定服务器即可以收也可以发,但是对于客户端来说,它并不知道服务器是否收到了自己的回应。
对于为什么不是四次握手,有的解释是1.这样的收发数据,其实是通过两个连接完成的,此时的连接是单工的。也有的认为2.把三步拆分成四步减慢了传输速率并且资源浪费,我个人认为这个解释更符合自己的理解
确保数据能够完整传输。
当被动方收到主动方的FIN报文通知时,它仅仅表示主动方没有数据再发送给被动方了。
但未必被动方所有的数据都完整的发送给了主动方,所以被动方不会马上关闭SOCKET,它可能还需要发送一些数据给主动方后,(按照常理的话,第二次和第三次挥手应该一起回复FIN=1和ACK=1的,但是因为服务器端可能有数据没发完,所以不能也立刻去主动申请关闭,所以要把ACK和FIN分开)再发送FIN报文给主动方,告诉主动方同意关闭连接,所以这里的ACK报文和FIN报文多数情况下都是分开发送的。
为什么是四次挥手

如tcp挥手是三次,fin,fin/ack,ack。现实中是存在的,有时候三次,有时候四次。为何呢?首先fin是用于关闭从本端到对端的连接,表示本端没有数据给对端了。对端收到该fin后,会回复ack,这是tcp确认机制的要求。这时候,本端是不能发送数据给对端,但对端仍然可以发数据给本端。等对端没数据给本端时,也发送给fin给本端,关闭从对端到本端的连接。本端收到对端的fin后,回复ack。到这里,经过四次挥手,双工的tcp连接才完全关闭。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值