三次握手:
假设你是一只鸟,你要与另一只鸟进行交流。(你是客户端)
1.首先你会问候:“你好,我是一只鸟,你可以听到我说话吗?”(一次会话)
2.另一只鸟回答:“是的,我可以听到你说话,我也是一只鸟。”(两次会话)
3.你再说:“非常好,我想我们可以开始交流了。”(三次会话)
正式的回答:
计算机网络中三次握手是利用TCP协议确保通信双方建立可靠连接的过程。它的具体步骤如下:
第一次握手(SYN发送):客户端向服务端发送一个SYN(Synchronize Sequence Numbers,同步序列号)标志位,要求建立连接并告知服务端自己的初始序列号(ISN)。
第二次握手(SYN-ACK回应):服务端接收到客户端的SYN标志位后,返回一个SYN-ACK(Synchronize-Acknowledgment,同步确认)标志位,表示同意建立连接并告知自己的初始序列号。
第三次握手(ACK发送):客户端接收到服务端的SYN-ACK标志位后,向服务端发送一个ACK(Acknowledgement,确认)标志位,表示已经接收到服务端的SYN-ACK,连接成功建立。
这样,在第三次握手的过程中,客户端和服务端之间就可以互相确认对方的状态,建立起可靠的连接,从而进行数据传输和通信。如果任何一方在这个三次握手过程中出错,连接就会失败,双方需要重新发起握手连接。
四次挥手:
类比男女分手,男生说要分手(第一次挥手),女生同意并表示自己也要分手(第二次挥手),男生收到女生的消息后表示自己也接受分手(第三次挥手),女生收到消息后双方分手结束(第四次挥手)。
1. 初始状态:Client和Server建立连接,Client发送FIN报文,表示要关闭连接。
2. 第一次挥手:Server收到FIN报文后,发送ACK报文,表示已经收到Client的请求,并告诉Client自己也要关闭连接。
3. 第二次挥手:Server发送FIN报文,表示自己也准备好关闭连接了。
4. 第三次挥手:Client收到Server的FIN报文后,发送ACK报文,表示已经收到Server的请求,并告诉Server自己也准备好关闭连接。
5. 状态结束:Server收到ACK报文后,双方断开连接。
为什么 TIME_WAIT 等待的时间是 2MSL?
主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。
屏幕前的你学会了吗?