TCP协议是TCP/IP参考模型中属于传输层协议,TCP是保证可靠地,有序的.TCP提供了多种机制保证这种服务,这里介绍下TCP建立连接和关闭连接的过程.
TCP建立连接三次握手:
服 SYN, client_seq 客
务 <----------------------------------------- 户(第一次握手)
器 端
[客户端发送完SYN包处于SYN_SENT状态, 此时服务器处于LISTENING状态]
服 SYN, ACK, client_seq+1, server_seq 客
务 -----------------------------------------> 户(第二次握手)
器 端
[服务器发送SYN,ACK包后处于SYN_RCVD状态]
服 ACK, server_seq+1 客
务 <----------------------------------------- 户(第三次握手)
器 端
[客户端发送ACK包后处于ESTABLISHED状态,服务器收到ACK包后处于ESTABLISHED状态]
TCP关闭连接四次握手:
服 FIN 客
务 <----------------------------------------- 户(第一次握手)
器 端
[客户端发送FIN包后处于FIN_WAIT_1状态]
服 FIN, ACK 客
务 -----------------------------------------> 户(第二次握手)
器 端
[服务器发送FIN, ACK包后处于CLOSE_WAIT状态, 客户端收到FIN, ACK包后处于FIN_WAIT_2状态]
服 FIN 客
务 -----------------------------------------> 户(第三次握手)
器 端
[服务器发送FIN后处于LAST_ACK状态]
服 FIN, ACK 客
务 <----------------------------------------- 户(第四次握手)
器 端
[服务器收到FIN, ACK后处于CLOSED状态, 客户端发送FIN, ACK后处于TIME_WAIT状态,等待2秒钟,变为CLOSED状态]
TCP为什么进行三次握手:
1)避免过期连接
2)防止陷入死锁
其实三次握手是让双方均知道发送的请求能够收到, 多了浪费, 少了达不到效果