TCP/IP 协议中的三次握手和四次挥手-----详解笔记
TCP/IP 协议中的三次握手和四次挥手
TCP/IP 协议中的三次握手和四次挥手是建立和终止连接的关键过程。
三次握手(Three-Way Handshake)
三次握手的目的是建立一个可靠的 TCP 连接,确保双方都准备好发送和接收数据。这个过程分为三个步骤:
客户端 | 服务端 |
---|---|
1. 客户端发送 SYN 请求: - 客户端向服务器发送一个 SYN(同步)包,表示请求建立连接。此时客户端进入 SYN_SENT 状态。 - 包含一个序列号(Seq= x),即客户端初步选择的序列号。 | |
2. 服务器响应 SYN-ACK: - 服务器收到客户端的 SYN 请求后,向客户端发送一个 SYN-ACK 包,表示同意建立连接,并且返回一个确认号。此时服务器进入 SYN_RCVD 状态。 - 服务器会选择一个序列号(Seq = y),并确认客户端的序列号(Ack = x + 1)。 | |
3. 客户端确认 ACK: - 客户端收到服务器的 SYN-ACK 包后,发送一个 ACK 包,确认连接建立成功。此时客户端进入 ESTABLISHED 状态。 - 客户端确认服务器的序列号(Ack = y + 1),并返回自己的序列号(Seq = x + 1)。 |
至此,客户端和服务器之间的连接建立成功,数据传输可以开始。
四次挥手(Four-Way Handshake)
四次挥手用于终止 TCP 连接,它的目的是确保双方都已完成数据传输,并且双方都同意断开连接。这个过程分为四个步骤:
客户端 | 服务端 |
---|---|
1. 客户端发送 FIN 请求: - 客户端发送一个 FIN(结束)包,表示客户端没有数据要发送了,但它仍然可以接收数据。此时客户端进入 FIN_WAIT_1 状态。 | |
2. 服务器响应 ACK: - 服务器收到客户端的 FIN 包后,发送一个 ACK 包,表示确认客户端的断开请求。此时服务器进入 CLOSE_WAIT 状态。 - 服务器会将 ACK 包的确认号设为客户端的序列号 + 1。 | |
3. 服务器发送 FIN 请求: - 服务器准备好关闭连接时,向客户端发送一个 FIN 包,表示服务器没有数据要发送了。此时服务器进入 LAST_ACK 状态。 | |
4. 客户端响应 ACK: - 客户端收到服务器的 FIN 包后,发送一个 ACK 包,确认连接已经断开。此时客户端进入 TIME_WAIT 状态,等待 2 倍的最大段生存时间(MSL)后彻底关闭连接。 - 客户端将确认号设为服务器的序列号 + 1。 |
当 TIME_WAIT 结束后,客户端进入 CLOSED 状态,连接完全关闭。
总结
- 三次握手是为了确保双方都能发送和接收数据,连接建立时双方都知道对方准备好了。
- 四次挥手是为了确保双方都同意断开连接,避免数据丢失。
更简单的解释
三次握手(建立连接)
你可以把三次握手理解为你和对方约定见面的过程。假设你和对方在手机上打电话,打算聊一聊,但在正式开始之前需要确保双方都准备好了。
- 第一次握手(你打电话给对方):
- 你先给对方打个电话,表示你准备好了,想和对方通话。你说:“嗨,我准备好聊了!”
- 这相当于你发送了一个 SYN(同步)信号,告诉对方你想建立连接。
- 第二次握手(对方接电话并回应):
- 对方接听了电话,并表示同意聊天,顺便告诉你:“我也准备好了,我们可以开始聊天了!”
- 这时候,对方不仅接听了电话,还发了个确认信号(ACK),告诉你他们已经准备好了。
- 第三次握手(你确认对方准备好):
- 你再确认一下:“好,太棒了!我们可以开始了!”
- 你确认了对方准备好,连接就正式建立了。
通过这三步,你和对方都确认了彼此都准备好了,双方可以开始聊天了。
四次挥手(断开连接)
当你们聊完了,想要挂电话时,得按照一定的顺序断开电话连接,这就是四次挥手的过程。
- 第一次挥手(你提出挂电话):
- 你说:“好了,我想结束通话了,挂电话吧!”
- 你发了一个 “FIN” 信号,表示你不再需要聊天了,准备挂电话。
- 第二次挥手(对方确认挂电话):
- 对方收到你的信号后,表示:“好,知道了,我也准备结束了,挂电话吧!”
- 对方发回了一个 “ACK” 确认信号,表示他们知道你要挂电话了。
- 第三次挥手(对方挂电话):
- 对方说:“我也说完了,挂掉电话!”
- 对方发了个 “FIN” 信号,告诉你他们也不再需要通话了。
- 第四次挥手(你确认对方挂电话):
- 你确认:“好的,我知道了。挂掉电话!”
- 你发回一个 “ACK” 信号,表示你确认对方挂掉电话了。然后你就可以彻底挂电话了。
总结
- 三次握手:就像你和对方确认好什么时候开始聊天的过程,确保你们都准备好。
- 四次挥手:就像你们聊完了,要按照步骤确认结束通话的过程,确保彼此都同意断开。