TCP 为什么需要 3 次握手, 为什么 2 次不行, 4 次呢?

1、TCP 为什么需要 3 次握手, 为什么 2 次不行, 4 次呢?

TCP 的三次握手是为了保证数据的可靠传输的,TCP 是全双工的协议,也就是说通过 TCP 协议发送的协议是要得到回复的,一来一回,所以说对于需要建立 TCP 连接的两端来说,每一端都需要进行一来一回的确认,这就进行三次握手。

1、A 给 B 发送需要建立连接的请求;

2、B 给 A 发送可以建立连接的回复;

3、A 给 B 发送确认收到回复的信息;

如果只进行二次握手:

1、A 给 B 发送需要建立连接的请求;

2、B 给 A 发送可以建立连接的回复;

这样看似没有什么问题,但是这样还是不行的,因为第二次握手的时候 B 不知道自己发送给 A 的应答包是否可以到达 A;B 只知道了 A 能发,并不知道 A 是否能收;所以这样的连接还是不可靠的。

如果进行四次握手:

1、A 给 B 发送需要建立连接的请求;

2、B 给 A 发送可以建立连接的回复;

3、A 给 B 发送确认收到回复的信息;

4、B 给 A 发送确认收到确认的信息;

当进行到第二步的时候 B 在等待 A 的确认信息,只有等到这个消息,B 才能确认建立连接,这样其实就够了,如果需要进行第四次确认也可以,进行 40 次握手也可以,400 次也可以,但是握手次数的增多并不能保证通信达到稳定。所以只需要达到了一个最基本的可以建立连接的条件(三次握手)就可以了,多次反而会浪费资源,三次握手是保证双方互相明确对端可以收发的最低值。

另外在通信的过程中,也会进行 TCP 包序号的确认:

1、A 发给 B 自己发送包的起始序号;

2、B 确认 A 的起始序号,发送 B 的起始序号;

3、A 确认 B 的起始序号;

起始序号是随机产生的,因为考虑到下面的场景,确认连接后如果 A 给 B 了三个包,其中一个包 3 丢了,A 进行重发 3 号包后,就断开了连接,过了一段时间后 AB 又重新建立连接并且 A 给 B 发送了两个包,这时候刚刚丢掉的 3 号包又突然跟着这两个包过来了,这个时候如果起始序号相同的话,B 就会连同 3 号包一起收了,这样 B 就收到了错误信息,所以起始序号往往是需要不同的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值