1. TCP 状态机
TCP 协议太复杂了,连接的建立与终止在前面都已经有所介绍,所有的规则都可以用一张 TCP 状态变迁图来表示。
图1 TCP 状态机
这张图非常经典,网络上都可以找得到,但是这里我用彩色线条重新画了一遍。接下来就是关于图 1 的几点说明:
- 绿色粗实线和蓝色粗虚线表示正常的状态变迁。
- 红色细实线表示异常变迁。
- 顶层的 CLOSED 状态是一个假想的起点和终点,并不是一个真正的状态。
2. 连接建立和断开时序图
这里再次将三次握手和四次挥手的时序图画出来,同时标记上变迁的状态。如图 2 所示。
图2 TCP 正常连接建立和终止对应的状态
3. 状态机解读
图 1 中,可以看到有很多异常的状态变迁,其中有同时打开(两个服务器之间互相请求建立连接);还有同时关闭(进入 CLOSING 状态)。
并不是所有系统都能够实现同时打开的功能,比如早期的内核版本并不支持 LISTEN 到 SYN_SENT 的变迁。
SYN_RCVD 变迁到 LISTEN 状态是有条件的:只有正常的进入到 SYN_RCVD 状态时(即蓝色粗虚线,从 LISTEN 进入 SYN_RCVD),然后收到 RST 段,就又可以回到 LISTEN 状态。
4. 总结
- 掌握 TCP 的 11 种状态