☰
什么是连接(Connection)?长连接和短连接在TCP层面有什么区别?
2026/10/20 13:08:08 网站建设 项目流程

TCP连接:就是发送端和接收端之间,通过三次握手,临时搭建好的一条“逻辑水管通道”。
注意:不是真的在网线里单独拉一根实体管线,只是两端内核里记录了一套四元组(源IP、源端口、目标IP、目标端口),约定好收发数据、ACK确认、重传的规则。通道建好之后,双方就可以持续往里面传数据;通信结束用四次挥手拆掉这条逻辑水管。

短连接(TCP短连接)

流程:建连接 → 传一次数据 → 立刻挥手断开水管

  1. 客户端发起三次握手,建立TCP连接
  2. 收发一次请求响应(比如一次HTTP 1.0请求,PHP接口接收请求,返回JSON)
  3. 数据传输完毕,马上执行四次挥手,关闭连接,水管拆掉
  • 特点:每次要发数据,都要重新握手;传完就拆。
  • 开销:每次通信都要付出三次握手RTT、建立内核连接的资源成本。
  • PHP场景:传统HTTP1.0、普通浏览器单次请求,默认就是短连接。

长连接(TCP长连接)

流程:建连接 → 反复多次传输数据 → 通信空闲一段时间后,再关闭水管

  1. 三次握手建好TCP水管
  2. 连接不拆除,在同一个连接上,连续来回传多组请求和响应(不用反复握手)
  3. 长时间没数据,才触发关闭(或者保活探测判断连接失效)
  • 特点:握手只做一次,一条连接复用多次数据交互,省去反复握手耗时。
  • 额外机制:TCP Keepalive保活探测,定时发探测包,检查水管有没有半路断掉。
  • PHP场景:Swoole/WebSocket、HTTP1.1 keep-alive、gRPC都是长连接。

TCP层面核心区别

  1. 连接生命周期
    短连接:数据传输只是连接生命周期里很小一段,传完立刻释放连接资源。内核会销毁这个四元组记录。
    长连接:连接建立后长期保持,四元组在内核里持续保留,反复复用。

  2. 资源开销位置
    短连接:频繁创建、销毁TCP连接,会大量产生TIME_WAIT状态,占用服务器端口与内核资源。高并发场景大量短连接会把端口耗尽。
    长连接:一次握手多次复用,减少握手RTT延迟;代价是连接会持续占用服务器的文件描述符(fd),连接数上限受ulimit限制。

  3. 数据边界
    TCP本身是字节流,不管长短连接,都没有天然数据包边界。短连接靠连接关闭标记数据结束;长连接必须自己定义消息边界(比如包长度头、换行分隔,WebSocket自带帧),不然会出现粘包问题,这也是Swoole开发里高频踩坑点。

业务直观例子

短连接:每次写信,都新建一条快递路线,送完这一封信,路线直接废掉。下一封信重新开辟路线。
长连接:一次性建好路线,同一通道来回寄送多封信件,一段时间不寄东西,再关闭路线。

PHP后端工程提示

普通Web HTTP1.1的Keep-Alive属于HTTP层的长连接,底层仍然是TCP长连接。它和WebSocket长连接不一样:HTTP keep-alive仍然是一问一答;WebSocket是全双工,两边随时可以主动发数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询