TCP三次握手
TCP三次握手是TCP/IP协议中,客户端和服务器建立TCP连接时的一个过程,它确保了双方都能够接收和发送数据。
- 第一次握手:客户端发送一个SYN(同步序列编号)报文给服务器,并在这个报文中包含自己的初始序列号X,表示客户端希望建立连接。
- 第二次握手:服务器收到客户端的SYN报文后,会以自己的SYN报文作为应答,这个报文中包含服务器的初始序列号Y,以及对客户端SYN报文的确认号X+1,表示服务器已经收到了客户端的SYN报文。
- 第三次握手:客户端收到服务器的SYN+ACK报文后,会发送一个ACK报文给服务器作为应答,这个报文中包含的确认号为Y+1,表示客户端已经收到了服务器的SYN报文。
至此,TCP连接成功建立,双方可以进行数据的传输。
TCP四次挥手
TCP四次挥手是TCP/IP协议中,终止TCP连接时的一个过程,它确保了双方都能够安全地关闭连接。
- 第一次挥手:客户端发送一个FIN报文给服务器,表示客户端希望关闭连接。
- 第二次挥手:服务器收到客户端的FIN报文后,发送一个ACK报文给客户端,表示服务器已经收到了客户端的FIN报文,但此时服务器可能还有数据需要发送给客户端,所以连接并未完全关闭。
- 第三次挥手(可能稍后发生):当服务器完成了数据的发送后,会发送一个FIN报文给客户端,表示服务器也想要关闭连接。
- 第四次挥手:客户端收到服务器的FIN报文后,会发送一个ACK报文给服务器作为应答,这个报文中包含的确认号为服务器FIN报文中的序列号加1,表示客户端已经收到了服务器的FIN报文。至此,TCP连接被完全关闭。
需要注意的是,TCP连接的关闭是一个全双工的过程,即客户端和服务器的数据发送和接收是独立的,所以任何一方都可以在数据发送完毕后主动关闭连接。在四次挥手中,第二次和第三次挥手之间的时间间隔取决于服务器完成数据传输所需的时间。
有个好记的方法:
握手SYN->ACK+SYN->ACK
挥手FIN->ACK->FIN->ACK
握手把中间的ACK+SYN一起返回来了这样是合理的,一次传输就可以了。
挥手由于服务端要保证正在发送的数据发送完毕再断开,所以他在ACK和FIN之间做了两次传输,中间的间隔时间就是在发送完剩余数据。