connection

connections

图一:展示了 client 和 server 基于 TCP 协议的一次交互过程, 分为三个阶段: 三次握手, 数据交换和四次挥手。这个过程比较简单, 但是实际应用中存在一个问题。假如 server 处理请求过程非常耗时, 或者不幸突然宕机, 此时 client 会陷入无限等待的状态。为了解决这个问题, TCP 在具体的实现中加入了 keepalive

图二:展示了 TCP 协议 keepalive 的工作机制。当该机制开启之后, 系统会为每一个连接设置一个定时器, 不断地发送 ACK 包, 用来探测目标主机是否存活, 当对方主机宕机或者网络中断时, 便能及时的得到反馈并释放资源。

图一和图二虽然连接的持续时间不同, 但行为类似都是完成了一次数据交互后便断开了连接, 如果有更多的请求要发送, 就需要重新建立连接。这种行为模式称为短连接

图三:展示了 client 和 server 完成了一次数据交换后, client 通过 keepalive 机制保持该连接, 后面的请求会直接复用该连接,这种行为模式称为长连接

  1. TCP 连接本身并没有长短的区分, 长或短只是在描述我们使用它的方式

  2. 长 / 短是指多次数据交换能否复用同一个连接, 而不是指连接的持续时间

  3. TCP 的 keepalive 仅起到保活探测的作用, 和连接的长短并没有因果关系

Last updated