TCP 三次握手和四次挥手:面试全解析
文章目录
- 概念解释
- TCP三次握手
- 学到这会有一个疑问????️ 为什么TCP是三次握手而不是两次呢
- TCP四次挥手
传输控制协议(TCP,Transmission Control Protocol)是互联网协议族中的核心协议之一,属于传输层。它的主要功能是在网络中提供可靠、面向连接的字节流服务。TCP确保数据在网络中的完整性、顺序性和有效性,是大多数互联网应用的基础。
概念解释
- seq(sequencenumber)序列号是TCP连接中每个字节流的唯一标识,通常在连接建立时随机生成。这一序列号用于确保数据包的顺序和完整性。
- ack(acknowledgement number)确认号是用来指示下一个期望接收的序列号。如果客户端发送的序列号为
seq
,则服务器的确认号为ack = seq + 1
,表示服务器已经成功接收到seq
号的数据,并期待接收到seq + 1
号的数据。 - ACK(acknowledgement)这是一个标志位,用于指示确认号有效。当ACK位被设置时,表明该报文段是对之前数据的确认。TCP使用这个机制来确认数据的接收,确保可靠传输。
- SYN(Synchronize) 这是用于发起新连接的标志位。当客户端希望与服务器建立连接时,会发送带有SYN标志的报文段。SYN用于同步序列号,以便双方能够在连接建立后进行数据传输。
- FIN(Finish):完成标志用于优雅地终止TCP连接。当一方发送带有FIN标志的报文段时,表示它已经完成数据传输,并希望关闭连接。接收方在确认后也会发送一个FIN来完成连接的关闭过程。
TCP三次握手
三次握手是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个报文。
第一次握手: 在吗?我要和你建立连接(发送SYN)。客户端向服务器发出连接请求,附带客户端序列号seq,然后进入 SYN_SENT(同步已发送) 状态,等待服务器的确认。
第二次握手: 我在,来吧,确认要连接吗(发送SYN+ACK) 服务器收到连接请求,同意建立连接,然后向客户段发送确认连接信息,附带向客户端连接请求,此时服务器进入 SYN_RCVD(同步收到) 状态。
第三次握手:确认!咱们建立连接吧(发送ACK)客户端收到服务器的确认连接信息,向服务器发送确认连接,此时TCP连接已经建立,客户端进入ESTABLISHED 状态。当服务器收到客户端发送的确认报文后也会进入 ESTABLISHED 状态,完成三次握手。
学到这会有一个疑问????️ 为什么TCP是三次握手而不是两次呢
客户端发送连接请求(SYN)给服务器。如果由于网络延迟,这个请求没有到达服务器,客户端可能会因为没有收到确认而重新发送请求。
假设服务器收到第二个请求并发送确认(SYN-ACK)。如果之前的请求由于网络恢复而到达服务器,服务器会再次发送确认,并认为这是一个新的连接请求,从而建立多条连接,这可能导致资源浪费和数据混乱。
三次握手可以防止旧的连接请求干扰新的连接,确保在网络不稳定的情况下,连接建立过程的清晰性。
TCP四次挥手
四次挥手是指断开一个TCP连接时,需要客户端和服务端总共发送4个报文以确认连接的断开。
客户端和服务器都可主动断开链接 所以这里分为主动方和被动方
这里将客户端作为主动方
第一次挥手(发送FIN):我的数据已经传完了,我想和你断开连接。 当通信的一方完成数据发送任务,需要关闭连接时,它会发送一个FIN(结束)报文段,进入FIN_WAIT_1 状态。
第二次挥手(发送ACK):==我知道了,但是我这边还有数据给你,你先不要和我断开。==服务端收到FIN报文段后,发送一个ACK报文段作为回应,并进入CLOSE-WAIT状态。客户端收到ACK后,进入FIN-WAIT-2状态。这时候已经断开了客户端与服务端的连接,服务端依然可以继续向客户端发送数据。
第三次挥手(发送FIN):==我的数据已经传完了,你可以和我断开连接了!==服务器端完成数据传输后,发送一个FIN报文段,请求关闭连接,进入LAST-ACK状态。
第四次挥手(发送ACK):收到让我断开连接的信息了,可以断开了客户端收到服务器的 FIN 包后,发送ACK报文段作为回应,并进入TIME-WAIT状态。经过 2MSL 后,客户端才进入 CLOSED 状态。服务器端收到客户端的确认包 ACK 后进入CLOSED 状态,连接被最终关闭。
本篇文章如果对你有所帮助,可以点下关注,会持续更新技术文章
推荐阅读
-
TCP 三次握手和四次挥手:面试全解析
-
35 张图解:被问千百遍的 TCP 三次握手和四次挥手面试题
-
为什么TCP要采用三次握手而非两次或四次?以及深入理解TCP的四次挥手过程
-
TCP/IP协议介绍——三次握手四次挥手
-
如何理解三次握手和四次挥手
-
给面试官上一课:HTTPS 的 TCP 握手三次,TLS 握手四次--如果在 TCP 快速开放场景中基于 TLSv1.3 0-RTT 会话恢复过程,不仅 TLS 和 TCP 握手可以同时进行,HTTP 请求也可以同时完成。
-
HTTP1.0、HTTP1.1、持久连接、非持久连接、TCP、UDP、三次和四次握手、HTTP 与 HTTPS、对称和非对称加密、状态码
-
搞定面试:深入理解三次握手和四次挥手
-
理解 TCP 连接的建立与断开:三次握手与四次挥手
-
理解TCP连接的建立和断开过程:三次握手与四次挥手