为什么建立 TCP 连接是三次握手,而不是两次或者四次?


接下来,从以下三个方面逐一进行分析:

  • 三次握手才可以阻止历史连接(主要方面)
  • 三次握手才可以同步双方初始序列号
  • 三次握手才可以避免资源浪费

一、阻止历史连接

我们考虑一种场景,客户端发送 SYN(seq = 80)报文后宕机了,而且该报文还被网络阻塞了,服务端并没有收到,接着客户端重启后,又重新向服务端建立连接,发送了 SYN(seq = 100)报文(注意!不是重传 SYN,因为重传的 SYN 序列号是相同的
在这里插入图片描述
[抛个问题,如果新的 SYN 先于 RST 到达,服务端又该如何处理?]
如果是两次握手,就无法阻止历史连接,因为服务端没有中间状态用来给客户端阻止历史连接,导致服务端初始化一个历史连接,造成资源浪费
在这里插入图片描述

二、同步双方初始序列号

使用 TCP 协议通信的双方,都必须维护一个「序列号」,序列号是可靠传输的一个关键因素
在这里插入图片描述
四次握手也能同步双方初始序列号,但由于第二步和第三步可以优化成一步,所以就成了「三次握手」

两次握手只保证了一方的初始序列号能被对方成功接收,没办法保证双方的初始序列号都能被确认接收

三、避免资源浪费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值