(学习笔记-TCP连接建立)TCP 为什么是三次握手?不是两次、四次?

TCP使用三次握手建立连接主要是为了避免历史连接、同步双方序列号以及避免资源浪费。两次握手无法阻止历史连接可能导致资源浪费,而四次握手并非必要。通过三次握手,TCP可以可靠地同步序列号并确保连接的有效性。

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

常规回答:“因为三次握手才能保证双方具有接收和发送的能力”


原因一:避免历史连接

三次握手的首要原因是为了防止旧的重复连接初始化造成混乱

假设:客户端先发送了SYN(seq=90)报文,然后客户端宕机了,而且这个SYN报文还被网络阻塞了,服务端并没有收到,接着客户端重启后,又重新向服务端建立连接,发送了SYN(seq=100)报文。(这里不是重传,而是重新发送请求)

三次握手避免历史连接

 客户端连续发送多次SYN(都是同一个四元组)建立连接的报文,在网络拥堵的情况下:

  • 一个[旧的SYN报文]比[最新的SYN]报文早到达了服务端,那么此时服务端就回一个SYN+ACK报文给客户端,此报文中的确认号是91(90+1)
  • 客户端收到后,发现自己期望收到的确认号应该是100+1,而不是90+1,于是就会回RST报文
  • 服务端收到RST报文后,就会释放连接。
  • 后续最新的SYN抵达了服务端,客户端与服务端就可以正常的完成三次握手了。

上述中的「旧 SYN 报文」称为历史连接,TCP 使用三次握手建立连接的最主要原因就是防止「历史连接」初始化了连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值