TCP 连接 三次握手原理

本文详细介绍了TCP连接的三次握手过程,包括各阶段的状态转换和ISN的动态生成,以及三次握手的作用,如确认双方接收与发送能力、交换初始化序列号。此外,文章还讨论了半连接队列、SYN-ACK重传、携带数据的可能性以及三次握手在HTTPS中的应用。同时,提到了四次挥手的完整过程和TIME_WAIT状态的重要性。

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

作者:JAVA烂猪皮
链接:https://zhuanlan.zhihu.com/p/73467254
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较多被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。

三次握手

当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次握手的时候,我想很多人会这样回答。

首先很多人会先讲下握手的过程:

  • 第一次握手:客户端给服务器发送一个 SYN 报文。
  • 第二次握手:服务器收到 SYN 报文之后,会应答一个 SYN+ACK 报文。
  • 第三次握手:客户端收到 SYN+ACK 报文之后,会回应一个 ACK 报文。
  • 服务器收到 ACK 报文之后,三次握手建立完成。

作用是为了确认双方的接收与发送能力是否正常。

这里我顺便解释一下为啥只有三次握手才能确认双方的接受与发送能力是否正常,而两次却不可以:

  • 第一次握手:客户端发送网络包,服务端收到了。

这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。

  • 第二次握手:服务端发包,客户端收到了。

这样客户端就能得出结论:服务端的接收、发送能力

TCP连接三次握手确实会涉及一些资源的浪费,尤其是在网络负载高或者连接频繁建立和关闭的情况下。 首先,三次握手需要在客户端和服务器之间进行三次来回的数据交换,每握手都需要发送特定的控制报文段。在这些报文段中,需要包含序列号、确认号、窗口大小等信息,以确保连接的可靠性和可用性。而这些数据交换和报文处理需要消耗一定的网络带宽和服务器资源。 其,由于TCP连接三次握手中,服务器需要创建并维护相应的状态表来跟踪每个连接的状态和参数,包括序列号、窗口大小等。这些状态表需要占用一定的内存空间,并且需要在连接建立和关闭时进行更新和释放。如果连接频繁建立和关闭,服务器需要不断地创建和删除这些状态表,导致资源的浪费。 此外,三次握手还可能引发一些不必要的超时重传。如果某个握手报文段在网络中丢失或延迟,TCP协议需要等待一定的时间后才会进行重传。这样的重传机制会耗费一定的时间和带宽,并且增加了网络延迟,影响连接的建立速度和性能。 尽管三次握手存在一定的资源浪费,但它是确保连接的可靠性和可用性的重要手段。通过三次握手TCP可以建立起双方之间的信任关系,并确保双方都能够满足建立连接的条件。虽然可能会浪费一些资源,但这是为了保证数据的可靠传输和网络的稳定性。因此,从整体来看,三次握手在保证连接质量的同时还是必要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值