我们先来回顾一下TCP的完整协议,通过上面两张图我们就能知道,首先是创建连接传送数据。
三次握手
- 发起连接的是客户端
- 接收连接的是服务端
- 服务端处于监听状态,当有连接过来,状态就变为SYN_RCVD
- 回复一个SYN、ACK消息,客户端收到消息后状态变为ESTABLISHED
- 再回复一个ACK消息,服务端接收到消息后服务端也处于ESTABLISHED
- 在这之后客户端与服务器直接就可以进行消息的收发了。
消息收发
- 客户端通过write()进行向服务器发送数据
- 服务器通过read()进行数据的读取。
四次挥手
- 断开连接的一方称为客户端
- 被断开的一方称为服务端
- 客户端调用close(),发送FIN到服务端
- 服务端收到FIN后,调用close(),状态变为Close_WAIT,同时发送ACK消息到客户端。
- 客户端收到FIN消息后,状态变为FIN_WAIT_2,状态变为WAIT_TIME
- 客户端再回复ack给服务端,等待2倍的2msl </