TCP的状态迁移不复杂。
TCP有11个状态,这些状态在TCP的三次握手和四次挥手里面都牵涉到。这些状态之间的迁移就是三次握手和四次挥手的过程。
再回顾一下三次握手和四次挥手的过程吧http://blog.csdn.net/u010902721/article/details/45955681
然后对照着看。
先看图下方的图例,实线表示客户端的状态迁移图,虚线表示服务器的状态迁移图。先分开来看再与三次握手、四次挥手对照着看就清晰多了。
客户端:
连接
- client初始处于CLOSED状态,调用connect()函数向服务器发送连接请求(应用进程主动打开,发:SYN)后进入SYN_SENT。
- 收到来自服务器的确认报文(收:SYN,ACK)后,回复ack(发:ACK),然后进入ESTABLISHED状态。
- 如果收到的报文(收:SYN)只有SYN没有ACK,客户端就进入了SYN_RCV状态,如果再收到RST报文就进入了LISTEN状态;如果应用程序关闭,则进入FIN_WAIT_1状态。这些都是非正常的状态迁移。
断开
- 调用close()函数发送FIN报文,进入FIN_WAIT_1状态,此时有三个路径,根据收到的确