返回

一分钟动画带你了解TCP三次握手和四次挥手的过程

前端

动画演示
[动画]

三次握手过程

  1. 客户端发送SYN(Synchronize)包,其中包含客户端的初始序号(ISN)。
  2. 服务器端收到SYN包后,发送SYN/ACK(Synchronize/Acknowledge)包,其中包含服务器端的初始序号(ISN)和对客户端ISN+1的确认号(ACK)。
  3. 客户端收到SYN/ACK包后,发送ACK(Acknowledge)包,其中包含对服务器端ISN+1的确认号(ACK)。

三次握手完成后,客户端和服务器端建立连接,可以开始数据传输。

四次挥手过程

  1. 客户端发送FIN(Finish)包,表示客户端已完成数据发送,准备关闭连接。
  2. 服务器端收到FIN包后,发送ACK(Acknowledge)包,表示已收到客户端的FIN包。
  3. 服务器端发送FIN包,表示服务器端已完成数据发送,准备关闭连接。
  4. 客户端收到FIN包后,发送ACK(Acknowledge)包,表示已收到服务器端的FIN包。

四次挥手完成后,客户端和服务器端关闭连接。

动画解析

动画中,客户端和服务器端用两个方块表示,SYN、SYN/ACK、ACK、FIN、ACK包用箭头表示。

三次握手过程中,客户端先发送SYN包,表示想与服务器端建立连接。服务器端收到SYN包后,发送SYN/ACK包,表示同意建立连接。客户端收到SYN/ACK包后,发送ACK包,表示已收到服务器端的SYN/ACK包。三次握手完成后,客户端和服务器端建立连接,可以开始数据传输。

四次挥手过程中,客户端先发送FIN包,表示想关闭连接。服务器端收到FIN包后,发送ACK包,表示已收到客户端的FIN包。服务器端发送FIN包,表示想关闭连接。客户端收到FIN包后,发送ACK包,表示已收到服务器端的FIN包。四次挥手完成后,客户端和服务器端关闭连接。

常见问题

三次握手为什么需要三次?

三次握手是为了保证客户端和服务器端能够建立可靠的连接。第一次握手,客户端发送SYN包,表示想与服务器端建立连接。第二次握手,服务器端发送SYN/ACK包,表示同意建立连接。第三次握手,客户端发送ACK包,表示已收到服务器端的SYN/ACK包。三次握手完成后,客户端和服务器端才建立连接,可以开始数据传输。

四次挥手为什么需要四次?

四次挥手是为了保证客户端和服务器端能够安全地关闭连接。第一次挥手,客户端发送FIN包,表示想关闭连接。第二次挥手,服务器端发送ACK包,表示已收到客户端的FIN包。第三次挥手,服务器端发送FIN包,表示想关闭连接。第四次挥手,客户端发送ACK包,表示已收到服务器端的FIN包。四次挥手完成后,客户端和服务器端才关闭连接。

动画中为什么不用现实中的电脑来表示客户端和服务器端?

为了让动画更简洁、更易于理解,动画中使用两个方块来表示客户端和服务器端。如果使用现实中的电脑来表示客户端和服务器端,动画就会变得复杂,不容易理解。