面试问答:TCP协议中的三开四断,三次握手四次挥手
"三次握手"和"四次挥手"是指 TCP(传输控制协议) 中的 连接建立 和 连接终止 的过程。它们分别描述了在建立连接和关闭连接时,客户端和服务器之间如何进行通信。
1. 三次握手(TCP三次握手):建立连接
TCP 是一种面向连接的协议,因此在通信开始之前,客户端和服务器需要进行连接的建立,通常被称为 三次握手。这个过程保证了客户端和服务器双方的接收和发送能力已经准备好,可以开始数据传输。
三次握手的步骤:
-
客户端 -> 服务器:SYN(同步信号)
- 客户端向服务器发送一个 SYN 报文段,表示客户端希望建立连接。
- 同时,客户端生成一个初始的序列号(Sequence Number),通常叫做 seq=x,并将这个序列号传递给服务器。
-
服务器 -> 客户端:SYN+ACK(同步确认)
- 服务器收到客户端的 SYN 包后,响应一个 SYN+ACK 报文段,表示接受连接请求。
- 服务器也会为这次连接生成自己的序列号(seq=y),并将客户端的序列号加1作为 ack=x+1 发送回客户端,表示确认收到客户端的连接请求。
-
客户端 -> 服务器:ACK(确认)
- 客户端收到服务器的 SYN+ACK 后,再发送一个 ACK 报文段,表示确认连接已经建立。
- 客户端会将服务器的序列号加1作为 ack=y+1,然后发送给服务器。
这样,连接建立完成,双方都确认了对方的序列号和接收能力,数据传输可以开始。
三次握手的作用:
- 确保双方的发送和接收能力准备好。
- 确保双方都能够处理数据。
- 确保双方使用同步的序列号,防止数据乱序。
2. 四次挥手(TCP四次挥手):断开连接
当客户端或服务器完成数据传输后,连接需要关闭。在 TCP 中,连接的断开过程由 四次挥手 来完成。四次挥手的目的是确保双方都能有序地关闭连接,保证数据的完整性。
四次挥手的步骤:
-
客户端 -> 服务器:FIN(终止连接)
- 客户端发送一个 FIN 包(即 Finish,结束标志),表示客户端已经没有数据要发送了。
- 同时,客户端生成一个序列号(seq=u),并将其发送给服务器。
-
服务器 -> 客户端:ACK(确认)
- 服务器收到客户端的 FIN 包后,发送一个 ACK 包给客户端,确认连接的断开。
- 服务器的 ack=u+1,表示已收到客户端的 FIN 包。
- 此时,连接的半关闭状态,服务器仍然可以继续发送数据,但客户端已经不再向服务器发送数据了。
-
服务器 -> 客户端:FIN(终止连接)
- 服务器准备好关闭连接后,会向客户端发送一个 FIN 包,表示服务器端也没有数据要发送了,准备关闭连接。
- 服务器生成一个序列号(seq=v)并发送给客户端。
-
客户端 -> 服务器:ACK(确认)
- 客户端收到服务器的 FIN 包后,发送一个 ACK 包给服务器,确认服务器的连接终止请求。
- 客户端将服务器的序列号加1作为 ack=v+1,然后发送给服务器。
- 此时,客户端也正式关闭连接。
通过这四步,TCP 连接被优雅地断开,保证双方都完成了数据传输并安全关闭了连接。
四次挥手的作用:
- 确保双方都能够完成最后的数据传输。
- 确保双方在连接断开时能够确认对方已经没有数据传输需求。
- 确保连接的关闭是有序和完整的,避免出现数据丢失或资源浪费。
总结
- 三次握手:用来建立 TCP 连接,确保双方可以进行数据传输。
- 四次挥手:用来优雅地断开 TCP 连接,确保双方都能完成数据传输并正确关闭连接。
这两个过程保证了 TCP 连接的可靠性,确保数据的完整性和准确性。
原文地址:https://blog.csdn.net/m0_73940847/article/details/143694931
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!