![](https://cos-cdn.shuashuati.com/pipixue-wap/2020-1230-1107-53/ti_inject-812ce.png)
TCP的状态: CLOSED There is no connection LISTEN The server is waiting for calls from the client SYN-SENT A connection request is sent; waiting for acknowledgment SYN-RCVD A connection request is received ESTABLISHED Connection is established FIN-WAIT-1 The application has requested the closing of the connection FIN-WAIT-2 The other side has accepted the closing of the connection CLOSING Both sides have decided to close simultaneously TIME-WAIT Waiting for retransmitted segments to die CLOSE-WAIT The server is waiting for the application to close LAST-ACK The server is waiting for the last acknowledgment 请完成TCP主模块处理流程 接收:TCP报,或来自应用程序的报文,或超时事件 1、查找TCB表 2、若(相应的TCP未找到) 创建TCB,其状态为CLOSED 3、找到TCP表中的项目的状态 4、case (状态) CLOSED: (1)若(收到来自应用程序的“被动打开”报文) 将状态改变为LISTEN (2)若(收到来自应用程序的“主动打开”报文) 1发送SYN报 2将状态改变为 (1) (3)若(收到任何报)发送RST报 (4)返回 LISTEN: (1)若(收到来自应用程序的“发送数据”报文) 1发送SYN报 2将状态改变为SYN-SENT (2)若(收到SYN报) 1发送SYN+ACK报2将状态改变为 (2) (3)若(收到任何其它报或报文) 发出差错报文 (4)返回 SYN-SENT: (1)若(超时) 将状态改变为CLOSED (2)若(收到SYN报) 1发送SYN+ACK报 2将状态改变为 (3) (3)若(收到SYN+ACK报) 1发送ACK报 2将状态改变为 (4) (4)若(收到任何其它报或报文)发出差错报文 (5)返回 SYN-RECVD: (1)若(收到SYN报) 将状态改变为ESTABLISHED (2)若(超时) 1发送RST报 2将状态改变为 (5) (3)若(收到来自应用程序的“关闭”报文) 1发送FIN报 2将状态改变为 (6) (4)若(收到RST报)将状态改变为LISTEN (5)若(收到任何其它报或报文)发出差错报文 (6)返回 ESTABLISHED: (1)若收到FIN报 1发送 (7) 报文 2将状态改变为 (8) (2)若(收到来自应用程序的“关闭”报文) 1发送FIN报 2将状态改变为FIN-WAIT-1 (3)若(收到RST或SYN报) 发送差错报文 (4)若(收到数据或ACK报)调用输入模块 (5)若(收到来自应用程序的“发送数据”报文) 调用输出模块 (6)返回 FIN-WAIT-1: (1)若(收到FIN报) 1发送ACK报 2将状态改变为 (9) . (2)若(收到FIN+ACK报) 1发送ACK报 2将状态改变为TIME-WAIT (3)若(收到ACK报)将状态改变为 (10) (4)若(收到任何其他报或报文) 发出差错报文 (5)返回 FIN-WAIT-2 (1)若(收到FIN报) 1发送ACK报 2将状态改变为 (11) (2)返回 CLOSING: (1)若(收到ACK报)将状态改变为 (12) (2)若(收到任何其他报或报文)发出差错报文 (3)返回 TIME-WAIT: (1)若(超时)将状态改变为 (13) (2)若(收到任何其他报或报文)发出差错报文 (3)返回 CLOSE-WAIT: (1)若(收到来自应用程序的“关闭”报文) 1发送FIN报2将状态改变为 (14) (2)若(收到任何其他报或报文)发出差错报文 (3)返回 LAST-ACK: (1)若(收到ACK报)将状态改变为 (15) (2)若(收到任何其他报或报文)发出差错报文 (3)返回