TCP的有限状态机用来管理一个连接,当第一次运行时,连接从一个初始状态CLOSED开始,当两个应用程序开始通信时,经过一系列的TCP段交换和状态变迁,直到成功建立连接,两端都处于ESTABLISHED状态,正常的数据发送和接收都发生在这一状态。TCP的大部分时间也处于这一状态,当发生错误或程序退出通信时,关闭连接,经历一系列相关的状态变迁,返回到最初的CLOSED状态。
标准给出了在TCP连接的各个状态中,发生某些事件要执行的动作和状态转移行为。下表对TCP各个状态进行简单的描述。
状态 | 描述 |
CLOSED | 连接的起始状态,这是一个“虚构”的状态,实际上此时还没有连接存在,也没有传输控制块(TCB) |
LISTEN | 等待客户端的连接请求,只有服务器才会处于这个状态 |
SYN-SENT | 主机已经发起了一个连接请求,发送了SYN报文,正在等待与之匹配的连接确认,即对方发来的SYN和ACK |
SYN-RECEIVED | 主机接收了对方的连接请求,带有SYN的报文,并向对方回应了SYN和ACK。正在等待对方的确认,一旦收到相应的ACK,连接就建立成功 |
ESTABLISHED | 成功建立连接,双方可以自由交换数据,收到的数据可以提交给应用程序 |
FIN-WAIT-1 | 应用程序主动关闭连接,发送了FIN,正在等待对方对FIN的确认或对方的终止连接请求FIN |
FIN-WAIT-2 | 收到了主机关闭连接请求FIN的确认ACK,正在等待对方终止连接请求FIN |
CLOSE-WAIT | 已经收到对方关闭连接的请求FIN,并发送了ACK,正在等待本地应用程序关闭连接 |
CLOSING | 已经发送了FIN,并且收到了对方发来的终止连接请求FIN,向对方发送ACK,双方同时关闭了连接,正在等待对方确认本机发送的连接关闭请求 |
LAST-ACK | 本地应用程序已经关闭了连接,发送了FIN,正在等待对方对FIN的ACK |
TIME-WAIT | 双方都已经关闭了连接,本机发送的最后一个报文是ACK,这个状态要等待2倍的MSL(Maximum Segment Lifetime)时间,确保对方收到了ACK,防止与新连接发生重叠 |
TCP的状态机比较复杂,它是整个TCP工作的基础,理解TCP的状态机,对掌握TCP协议很有用处。
【学习资料】 《Winsock网络编程经络》