当我们使用互联网浏览网页或者下载文件时,实际上是通过TCP协议进行数据传输的。TCP协议有一个重要的特点,就是在数据传输之前需要建立连接,而在结束数据传输后需要断开连接
TCP三次握手(Connection Establishment):
(建立数据连接)
第一次握手:
客户端对服务器说:“喂,我要和你通信,你准备好了吗?”。
客户端发送一个SYN包,表示请求建立连接。
这个包包含一个初始序列号,用于后续的数据传输。
第二次握手:
服务器对客户端说:“嗯,我准备好了,你也准备好了吗?”同时,服务器也告诉客户端:“你可以开始传输数据了。”
服务器收到客户端的请求后,发送一个SYN/ACK包,表示接受连接请求。
这个包中包含服务器的初始序列号,以及对客户端的请求的确认。
第三次握手:
客户端对服务器说:“好的,我也准备好了,我们可以开始传输数据了。”于是连接建立,双方可以开始互相发送数据。
客户端收到服务器的确认后,发送一个ACK包,表示连接已建立。
这个包不包含数据,只是确认连接。
这就好像打电话一样,你先拨通了对方的号码,对方接听后,你再确认一次是否可以开始通话,最后双方都准备好了,通话正式开始。
TCP的四次挥手(Connection Termination):
(断开数据连接)
第一次挥手:
客户端对服务器说:“我发送完了所有数据,可以关闭连接吗?”但客户端可能还有些数据未发送完,所以会等待一段时间。
客户端首先发送一个FIN(Finish)标志给服务器,表示它已经没有数据要发送了,但仍然可以接收数据。
第二次挥手:
服务器接收到客户端的请求后,告诉客户端:“我确认你的请求了,但我还有一些数据没有发送完,等我发送完再关闭连接。”
服务器接收到客户端的FIN后,发送一个ACK(Acknowledgment)确认标志给客户端,表示已经收到了客户端的关闭请求,并告诉客户端它还有一些数据需要发送。
第三次挥手:
服务器发送完所有数据后,对客户端说:“我数据都发送完了,可以关闭连接吗?”客户端确认后,进入等待状态。
服务器在发送完所有数据后,向客户端发送一个FIN标志,表示它也没有数据要发送了,可以开始关闭连接。
第四次挥手:
客户端确认服务器的请求后,告诉服务器:“好的,我们可以关闭连接了。”于是连接顺利关闭。
客户端接收到服务器的FIN后,发送一个ACK确认标志给服务器,表示客户端确认关闭连接。这时连接就彻底关闭了
这就好像结束一个电话通话,你先告诉对方你发完了,但还等一下对方的回应,对方也告诉你他发完了,最后双方都确认可以挂断电话。