作为互联网通讯的基础,TCP/IP协议建立连接与断开连接的过程非常重要,但是平时写代码的时候很难去关注到这些知识,今天恰好想去整理一下相关知识,发现了下面两张图比较好的解释了三次握手和四次挥手的过程,以及客户端和服务端相应的状态切换过程。
TCP/IP协议建立连接的三次握手
- 客户端发送一个带SYN标志的TCP报文(报文1)到服务器端,表示希望建立一个TCP连接。
- 服务器发送一个带ACK标志和SYN标志的TCP报文(报文2)给客户端,ACK用于对报文1的回应,SYN用于询问客户端是否准备好进行数据传输。
- 客户端发送一个带ACK标志的TCP报文(报文3),作为报文2的回应。
断开连接的四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。原则是主动关闭的一方(如已传输完所有数据等原因)发送一个FIN报文来表示终止这个方向的连接,收到一个FIN意味着这个方向不再有数据流动,但另一个方向仍能继续发送数据,直到另一个方向也发送FIN报文。四次挥手的具体过程如下:
- 客户端发送一个FIN报文(报文4)给服务器,表示我将关闭客户端到服务器端这个方向的连接。
- 服务器收到报文4后,发送一个ACK报文(报文5)给客户端,序号为报文4的序号加1。
- 服务器发送一个FIN报文(报文6)给客户端,表示自己也将关