三次握手
三次握手发生在请求建立连接的阶段,
-
第一次握手:客户端的应用进程主动打开,并客户端发送请求到服务器,表明想要建立连接(SYN)
目的:
使服务器知道:客户端发送信息的能力,和服务器接收信息的能力,二者都没有问题
-
第二次握手:服务器应用进程被动打开,如果服务器同意客户端的请求,服务器则给客户端回应确认报文,表明收到了客户端的请求(SYN+ACK)
目的:
使客户端知道:客户端发送信息的能力,和服务器接收信息的能力,二者都没有问题 但是,如果我没有发送确认报文去服务器端的话,服务器不会知道服务器的发送信息的能力有没有问题
-
第三次握手:客户端收到确认报文之后,通知上层应用进程,连接已建立,客户端并再次向服务器发送确认报文,同时服务器在收到客户端的确认报文之后,也会通知上层应用进程连接已经建立(ACK)
目的:
使服务器知道:我们二者的发送和收信的能力都没有问题
四次挥手
四次挥手发生在请求释放资源 的阶段,目的就是断开连接
-
第一次挥手:客户端向服务器发送断开连接请求(FIN)
表明:我要关闭连接了
-
第二次挥手:服务器收到请求后,向客户端回应报文(ACK)
表明:服务器已收到请求,并且通知客户端自己可能还有一些数据需要处理
-
第三次挥手:服务器发送完所有报文后,向客户端发送断开连接请求报文(FIN)
表明:服务器要关闭连接了
-
第四次挥手:客户端收到服务器要断开连接的请求报文后,想服务器发送确认报文(ACK)
表明:客户端发送该报文时,也就将客户端的应用进程关闭了(CLOSED);当服务器收到确认报文后,服务器应用进程也关闭了(CLOSED)
为什么要进行三次握手和四次挥手?
三次握手:为了防止无效的连接请求报文到达服务器而引起错误。
TCP发起建立连接的一方不会一直等待对方的回复,如果超时,他再次发起这个请求,上一个作废。
四次挥手:确保数据能够完整传输。
|