1. 丢包场景概述

各位好,我是老张。做网络这行十几年了,今天咱们聊聊丢包。

丢包这事儿,说白了就是数据包从A点发到B点,半路上没了。你想想看,你寄了个快递,结果物流显示「运输中丢失」——这就是丢包。在网络世界里,这太常见了。

我刚开始做运维那会儿,遇到一个客户投诉视频会议卡顿。查了半天,发现丢包率高达5%。当时我还不以为然,觉得才5%嘛。结果自己体验了一下,画面直接成了马赛克拼图。嗯,从那以后我再也不敢小看丢包了。

1.1 什么是网络丢包

网络丢包,就是数据包在传输过程中,因为各种原因没能到达目的地。TCP/IP协议栈里,每个数据包都像一封信,从源地址寄往目的地址。如果信在半路被扔了、撕了、或者送错了门,那就是丢包。

丢包率通常用百分比表示。比如你发了1000个包,丢了3个,丢包率就是0.3%。这个数字看着小,但对某些应用来说,已经是灾难了。

关键指标:

  • 0% – 0.1%:理想状态,绝大多数应用无感知
  • 0.1% – 1%:轻度丢包,实时音视频可能开始卡顿
  • 1% – 5%:中度丢包,TCP吞吐量明显下降
  • >5%:重度丢包,应用基本不可用

1.2 丢包产生的原因

丢包的原因很多,我习惯从OSI模型的分层角度来分析。这样排查起来思路清晰,不会乱。

物理层丢包

物理层的问题,说白了就是硬件不行。我在一个数据中心项目里遇到过,某条光纤链路经常间歇性丢包。查了三天,最后发现是光纤接头被老鼠咬了个小口子。光信号衰减严重,接收端就认不出信号了。

常见的物理层丢包原因:

  • 信号衰减:线缆太长、接头松动、光纤弯曲半径过小
  • 电磁干扰:网线旁边走高压电缆、电机设备干扰
  • 硬件故障:网卡老化、光模块损坏、交换机端口故障
  • 链路质量差:无线信号弱、多径干扰、信噪比低

我的经验:排查物理层丢包,先看接口的CRC错误计数。如果CRC错误在持续增长,基本可以断定是物理层问题。别急着换设备,先检查线缆和接头。

链路层丢包

链路层的问题,主要出在帧的传输和交换过程。我记得有一次,一个客户的网络每隔几分钟就断一下。查了所有物理链路都没问题,最后发现是两台交换机之间的STP(生成树协议)在反复收敛。端口状态在转发和阻塞之间来回切换,数据帧自然就丢了。

链路层丢包的典型场景:

  • MAC地址表溢出:交换机MAC表满了,新来的帧直接丢弃
  • 环路导致广播风暴:STP配置错误,广播帧在环路里无限循环
  • 帧校验错误:FCS校验失败,接收端直接丢弃
  • 端口缓冲区溢出:瞬间流量过大,端口缓存不够

避坑指南:我曾经在配置Trunk链路时,忘了允许VLAN通过。结果那个VLAN的所有流量全部被交换机丢弃。查了两天才发现,就因为少敲了一条 switchport trunk allowed vlan add 100。所以,链路层的问题往往是最隐蔽的。

网络层丢包

网络层丢包,核心就是IP层的路由和转发问题。这是我最常遇到的丢包类型。

常见的网络层丢包原因:

原因 说明 典型场景
路由黑洞 路由表中没有到达目的地的路径 静态路由配置错误、路由协议未收敛
TTL超时 数据包的TTL值减到0 路由环路、跳数过多
MTU不匹配 数据包超过链路MTU且不允许分片 VPN隧道、MPLS网络
ACL/QoS丢弃 访问控制列表或服务质量策略主动丢弃 安全策略限制、带宽限速
路由震荡 路由频繁变化导致转发不稳定 BGP邻居不稳定、链路抖动

这里我要特别说一下MTU问题。有一次客户反馈,访问某个网站时大文件下载总是失败,但小文件没问题。我一看,典型的MTU问题。路径上某个链路的MTU是1500,但服务器发出的包是1600字节,而且设置了DF(不分片)标志。路由器没法分片,只能丢包。后来调整了路径MTU,问题就解决了。

1.3 丢包对应用的影响

丢包对不同应用的影响差别很大。我整理了一张表,方便大家对照:

应用类型 丢包敏感度 典型表现 可容忍丢包率
实时音视频 极高 画面卡顿、声音断续、马赛克 <0.5%
在线游戏 高 操作延迟、角色瞬移、掉线 <1%
Web浏览 中 页面加载慢、图片加载失败 <2%
文件传输 低 传输速度下降、重传增加 <5%
邮件/消息 极低 发送延迟、偶尔失败 <10%

为什么会这样?因为不同应用使用的传输协议不同。实时音视频通常用UDP,丢了就丢了,没有重传机制。所以丢包直接体现在用户体验上。而文件传输用TCP,丢包后会触发重传,虽然速度慢了点,但数据不会丢。

我记得有一次帮一个直播平台做优化。他们的主播端丢包率只有0.8%,但观众反馈卡得不行。我抓包一看,UDP流里丢了将近1%的包,视频解码器直接崩溃了。后来我们加了FEC(前向纠错)机制,丢包率对画质的影响才降下来。

核心结论:

  • 丢包不可避免,但可以管理和恢复
  • 不同应用对丢包的容忍度差异巨大
  • 理解丢包原因,才能对症下药
  • 恢复策略要因「应用」制宜

好了,这一章我们搞清楚了丢包是什么、为什么丢、丢了会怎样。下一章开始,我会带大家深入具体的恢复策略。咱们一步步来。

丢包场景知识体系 丢包场景知识体系 网络丢包 物理层丢包 链路层丢包 网络层丢包 信号衰减 电磁干扰 硬件故障 链路质量差 MAC表溢出 广播风暴 FCS校验错 缓冲区溢出 路由黑洞 TTL超时 MTU不匹配 ACL/QoS丢弃 丢包恢复策略 重传 · FEC · 路径冗余 · 拥塞控制 · 应用层容错