为什么TCP需要握手三次?为什么不是两次?为什么不是四次?

本文详细解析TCP的三次握手过程,重点阐述其为何能阻止历史重复链接的初始化,并同步双方的初始序列号,避免资源浪费。通过三次握手,确保了连接的可靠性和序列号的正确同步,从而保证数据包的有序传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小林coding<<图解网络>>专章详细解读:膜拜

1.最主要原因:只有三次握手才能阻止重复历史链接的初始化

情景:
由于网络环境的复杂化(路由选路,拥塞程度)可能会导致数据包的发送顺序和到达顺序不一致

状况: 旧的客户端--->服务器端的SYN包   比    新的客户端--->服务器端的SYN包
					     先到达

在这里插入图片描述

此图 注意 并没有超时重传,暨,可能一次发送多个包,所以seq不想等,所以可以推断出是历史重复链接

解读:

  1. 首先明确,客户端发送SYN包时,会自动记录seq
  2. 所以,发送多个SYN包后,客户端本地记录的是 最新的seq
  3. 第一次握手完成之后,服务器端发送SYN+ACK包 携带 seq+ack
  4. 客户端在完成第二次握手之后,会解包,拿出序列号进行对比
  5. 若果能够对应,则 客户端------->服务器连接建立(单向)
  6. 否则,则该单向连接就无法建立;
  7. 至此,第二次握手完成
  8. 第三次握手的主要目的就是告诉服务器端: 服务器端—>客户端单向连接是否建立
: 如果是历史链接:则发送RST包 (通知服务器断开此链接): 如果序列号匹配,则通过第三次握手,建立服务器-->客户端单向链接(两个单向链接都建立了,则是互通的)

2.只有三次握手才可以同步双方的初始序列号

在这里插入图片描述
由图可知:四次握手冗余,完全可以缩减成三次握手
序列号的作用:尚未施工

只有交换了双方的序列号,这样才知道,对方的数据从哪来,到哪去,这样才好排列

3.三次握手才可以避免资源浪费

在这里插入图片描述
此图 注意超时重传,所以多次的 seq相等,所以在第二次握手是根据ack可以推断出不是历史重复链接,就不会发送RST包
解释:

  1. 由于是SYN超时重传包,所以seq是会相等的
  2. 假如只有两次握手,则在第二次握手后,链接单方面建立(客户---->服务器)
  3. 所以服务器并不知道自己能不能到达对端—>服务器不知道自己的ack对端收到没有
  4. 只能是客户单方面发送数据课服务器
  5. 之后的每一个客户SYN,都会使服务器建立连接.
    如果客户端的 SYN 阻塞了,重复发送多次 SYN 报文,那么服务器在收到请求后就会建立多个冗余的无效链接,造成不必要的资源浪费
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值