三次握手和四次挥手
三次握手(建立TCP连接):
1.建立新连接,客户端发送一个包到服务器,等待服务器确定。
2.服务器收到客户端的包,回应客户端这个包加上一个新的包。
3.客户端收到服务器的2个包,向服务端发送2个包的加密(1个包),客户端与服务器进入连接成功的状态
四次挥手(释放TCP连接):
1.客户端发出释放请求(FIN)
2.服务器收到客户端的释放请求(FIN),通知应用进程,进入半关闭状态,此时,服务器还是可以发送数据的,客户端还要接受,同时发送关闭确认请求(ACK),客户端收到服务器的确认请求(ACK)等待服务器发送最后的数据以及释放请求(FINI)
3.服务器把最后的数据发送完后,向客户端发送释放请求(FIN)
4.客户端收到服务器的释放请求(FIN),发送服务器确认请求(ACK),服务器收到确定关闭请求(ACK)后,关闭TCP,客户端等一段时间后关闭连接。
为什么要四次挥手,而不是三次?
答:根本原因是,一方发送FIN只表示自己发完了所有要发的数据,但还允许对方继续把没发完的数据发过来。
举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还会有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。
参考地址:https://www.cnblogs.com/zwhblog/p/9155999.html