通俗易懂的方式理解tcp为什么需要3次握手,4次挥手

环境

前端知识

前言

在知乎上看到的,非常的形象,就记录下

为什么3次握手

建立连接

理想情况下:

 Client:"我要开始了"
 Server:"好的"

然后Client开始发送信息.

第二种情况:

Client:"我要开始了"  但是`Server`没有收到
Client:发现半天Server都没有反馈, 又发了一遍:"我要开始了"
Server:"好的"

如果Client发送的请求没有被Server收到, 那么长时间没有收到Server的回复后, 重新发送请求既可。

第三种情况:

Client:"我要开始了" 这个请求堵在路上了,Server没有收到
Client:"我要开始了"【重新发送的】
Server:"好的"
Client:开始发送信息

但是在发送信息的过程中, Server收到了之前堵在路上的请求. Server只能重新建立连接. 这并不是我们希望的。

为了避免Client本该失效的请求被Server接收, 必须要多一次握手, 即三次握手。

Client:"我要开始了"

Server:"好的"

Client:"那我真的开始了"

结束连接

和建立连接一样的考虑, 需要3次握手.如下:

Client:"我要结束啦"

Server:"好的"

Client:"那我真的结束了"

但是结束和建立的一个区别在于, Client想建立的时候, Server能够随时准备建立.而Client想结束的时候, Server得先确保手中的数据发送完才能够结束。

所以中间的一次握手要拆分为两步.如下:

Client:"我要结束啦"

Server:"好的, 等我把数据发完"

Server:"我发完啦"

Client:"那我真的结束啦"

然后Client结束连接

Server收到后也结束连接.

再考虑一种情况, 假如Server没有收到Client发送的"那我真的结束啦"呢?超时重传吗?Client都已经关闭连接了.

所以解决办法是:

Client在发完"那我真的结束啦"后, 等待一段时间, 如果这段时间内没有收到Server的重传, 证明Server已经确实收到了. 所以Client可以放心的结束了。

所以最终流程如下:

client:"我要结束啦"

server:"好的, 等我把数据发完"

server:"我发完啦"

client:"那我真结束啦"

ClientServer没有收到, 就等了一会儿, 如果这段时间内没有收到Server的重传, 就放心的关闭连接啦.

Server这边接到"那我真的结束啦"后, 就直接关闭连接了。

总结

真的非常形象

参考地址:
https://www.zhihu.com/question/67772889/answer/495905873

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

山鬼谣me

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

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

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

打赏作者

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

抵扣说明:

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

余额充值