浅浅理解TCP连接为什么是三次握手,两次就不行

例子

TCP三次握手就像和朋友打电话:

  1. 客户端: 喂, 你听到到我说话吗
  2. 服务器: 可以,你听到得到我吗
  3. 客户端: 我也听得到,开传!

为什么两次不行?

如果客户端第一次发送的请求,因为某些原因滞留了,没法给服务器。过了好久好久,才发到服务器。此时客户端早就重新发请求,建立好了连接(甚至已经结束会话了)。那么这时候服务器收到,会以为客户端发来了一个新的请求,于是回复客户端。但是客户端觉得自己并没有发消息(之前那个消息因为超时,已经del掉了),所以就不会理会服务器端。

因为两次握手,只要服务器回复,就算建立连接。所以服务器自以为已经建立了连接,就会一直等待客户端发消息。这样就占用了服务器的资源;

三次为啥就能避免?

还是上面的场景,服务器收到超时的请求,还是会照常回信;客户端收到服务器的这个回信,还是会扔掉,因为那个超时的请求已经删掉了。因为三次握手,必须要有客户端的回信才行,所以服务器因为收不到客户端的回信,就不会认为建立了连接,就不会傻等,浪费资源。

另一个角度理解为什么要三次?

对于通信双方来说,建立通信前,要分别确保自己能说能听,对方也能说能听。
即,A与B通信,那么
A这边要确认A能说能听;以及B能说能听
B这边也要确认A能说能听;以及B能说能听

A第一次发消息给B时,B收到了,那么B这边确定了:

  • A能说
  • B能听
    B给A回信,A收到了,那么A这边确定了:
  • A能说,能听
  • B能说,能听
    A再给B回信,B收到了,那么B这边确定了:
  • A能听
  • B能说

至此,两边分别确定了A和B的能听能说,从而可以建立连接。

所以两次不够,而四次及以上就多余了(因为没啥需要再确定的了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值