TCP 3次握手 4次挥手

3次握手的目的

三次握手的目的:是为了确认双方都有收发数据的能力。

第一次: A->B,证明A有发消息的能力。

第二次: ->B && B->A,证明B有收消息,并且有发消息的能力。

第三次: A->B,证明A有收消息的能力。

二次握手达不到目的,四次多余。

需4次挥手原因

由于TCP的半关闭特性,TCP连接时双全工(即数据在两个方向上能同时传递),因此,每个方向必须单独的进行关闭。这个原则就是:当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向上的连接。当一端收到一个FIN后,它必须通知应用层另一端已经终止了那个方向的数据传送。即收到一个FIN意味着在这一方向上没有数据流动了。

目的:保证服务器与客户端都能完全的接收对方发送的数据。

经典的“两军通信”问题

假设场景是这样的:
在山的两头是红军1和红军2,山上是蓝军,红军1和2都不是蓝军的对手,想打败蓝军只有一起动手。那么红军1和2如何通信才能确定双方在同一个时间动手呢?

红军1的传令军成功偷偷越过大山告诉红军2,明天早上中午十二点一起动手;
红军2表示赞同,但是红军1并不确定红军2是否收到了消息,贸然动手必定失败,所以红军2的传令军越过大山告诉红军1收到了消息;

但是这时候红军2并不确定传令军是否成功到达红军1告诉红军1收到了消息,不敢独自动手,所以红军1只好再次派出传令军,告诉红军2我们知道你们收到消息了;

问题又来了,红军1不知道传令是否成功,只有等待红军2的确认并不敢动手,红军2也只能再次派出传令军。。。

最后陷入了一个死循环,那么根本问题就暴露了:永远都不能完美的达成协议,而这正是一个一个重要的通信道理:世界上不存在完全可靠的通信协议。

从通信时间成本空间成本以及可靠度来讲,选择了“三次握手”作为点对点通信的一般规则。

关于建立连接时的三次握手大家可能还有个问题:
三次握手真的可靠吗?
当然不可靠,任意次的握手都是不可靠的,握手成功只能说明握手时的通信是正常的,并不能保证握手后的通信是正常的,例如不稳定的网络环境,这些都是可能的。握手只能保证尽可能的可靠,而不可能保证理论上的绝对可靠。

本文整理自:
https://www.zhihu.com/question/24853633/answer/115379350

https://www.zhihu.com/question/24853633/answer/254420399?utm_source=wechat_session&utm_medium=social

个人微信公众号:
这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值