首页/网络/网络排障速查/四层与七层负载均衡的差异排查

四层与七层负载均衡的差异排查

四层只转发 TCP/UDP 不改包,七层解析 HTTP 可改写头部:这决定了源 IP 可见性、超时语义与日志能力的差异,排查方式随之不同。

网络排障速查网络更新于 2026-10-13

四层与七层的本质差别

四层负载均衡只转发 TCP 或 UDP 连接,不改动载荷,性能高但看不到 HTTP 语义;七层负载均衡理解 HTTP,可以按路径、头部或 Cookie 路由,也能改写头部、做缓冲与鉴权。这个差别直接决定了几件事:后端看到的源地址是谁、超时发生在哪一层、日志里能记录什么、健康检查能查多深。排查前先确认手上是哪一层,否则会用错误的前提去找原因。

基本信息

四层TCP/UDP 透传,性能高,无 HTTP 语义;源地址取决于转发模式
七层可路由、可改写、可鉴权;引入转发头、超时与缓冲策略
会话保持四层按源地址或五元组,七层按 Cookie 或头部
健康检查四层只查端口,七层可查具体 URL 与期望状态码
常见实现云厂商的四层与七层监听、Nginx、HAProxy、LVS 等

典型使用场景

  • 后端日志里全是负载均衡器地址:确认是否需要透传真实源地址
  • 按路径分流不生效:确认用的是七层监听而非四层
  • 出现 504:区分是负载均衡器等待上游超时还是后端自己超时
  • 排查会话保持失效:区分按源地址保持和按 Cookie 保持的差异
  • 评估健康检查误摘:检查深度是否足够、阈值是否过敏感

典型验证

典型验证
# 后端看到的源地址是谁:
ss -tn state established '( sport = :8080 )' | head -10
# 七层是否透传真实地址:
curl -sS -H 'X-Forwarded-For: 203.0.113.9' http://10.0.0.5/header | head -5
# 对比直连后端与经负载均衡的响应差异:
curl -sS -o /dev/null -w 'direct %{http_code} %{time_total}\n' http://10.0.0.5:8080/health
curl -sS -o /dev/null -w 'slb    %{http_code} %{time_total}\n' https://www.example.com/health
# 读负载均衡器访问日志里的上游耗时字段,切开两侧责任:
tail -50 /var/log/nginx/access.log | awk '{print $NF}' | sort -n | tail

差异对照

维度四层七层
转发依据地址与端口路径、头部、Cookie
源地址可见性后端看到负载均衡器可透传真实地址或携带转发头
超时语义连接级超时连接、读取与空闲多级超时
日志能力只有连接级指标可记录 URL、状态码与上游耗时
健康检查深度端口可用性业务路径与内容校验
四层转发时后端看到的源地址是负载均衡器:要拿到真实源地址需要七层透传,或启用代理协议标记并由后端解析,两者都必须两端配置配合才生效。

易错点

  • 在四层负载均衡后端去找转发头:该头部字段根本不会被生成
  • 七层超时与后端应用超时错配,出现 504 与重复执行并存
  • 把健康检查配置得过深又过敏感:后端偶发抖动就会被摘除,表现为间歇性不可用
  • 只看负载均衡器指标不看后端:错误码相同但根因分别在两侧,需要日志切开责任

数据来源与参考

  • RFC 7239:Forwarded 头
  • nginx 文档:stream 模块(四层)与 http 模块(七层)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌