精品文档---下载后可任意编辑一
TCP 状态转换图1、建立连接协议(三次握手) (1)客户端发送一个带 SYN 标志的 TCP 报文到服务器
这是三次握手过程中的报文 1
(2)服务器端回应客户端的,这是三次握手中的第 2 个报文,这个报文同时带 ACK 标志和 SYN 标志
因此它表示对刚才客户端 SYN 报文的回应;同时又标志 SYN 给客户端,询问客户端是否准备好进行数据通讯
(3)客户必须再次回应服务段一个 ACK 报文,这是报文段 3
2、连接终止协议(四次握手) 由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭
这原则是当一方完成它的数据发送任务后就能发送一个 FIN来终止这个方向的连接
收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个 FIN后仍能发送数据
首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭
(1) TCP 客户端发送一个 FIN,用来关闭客户到服务器的数据传送
(2)服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1
和 SYN 一样,一个 FIN 将占用一个序号
(3)服务器关闭客户端的连接,发送一个 FIN 给客户端
(4)客户段发回 ACK 报文确认,并将确认序号设置为收到序号加 1
3、连接状态说明CLOSED: 这个没什么好说的了,表示初始状态
LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个 SOCKET 处于监听状态,可以接受连接了
SYN_RCVD: 这个状态表示接受到了 SYN 报文,在正常情况下,这个状态是服务器端的 SOCKET 在建立TCP 连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用 netstat 你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次 TCP 握手过程中最后一个 ACK