万兆网卡传文件速度上不去,先检查巨型帧开关
搞IT的人多少都碰到过这种场景:内网明明是万兆环境,交换机是万兆的,网卡也是万兆的,结果从服务器拉个压缩包,速度居然只有300MB/s左右,甚至更低,按带宽算,万兆理论跑满应该有1.1GB/s左右,这中间差了好几倍。
行业共识认为,大带宽传输速度慢怎么解决,第一步永远是先看一眼MTU。MTU即最大传输单元,默认1500字节,这个数值对千兆环境没什么问题,但放到万兆甚至更高带宽的链路上,就成了实打实的瓶颈,原因不复杂:数据包越大,单位数据摊薄的开销越少,传输效率越高,1500字节的小包在万兆链路上跑,CPU中断频繁,网卡处理能力被白白消耗,带宽再大也使不出来。
巨型帧就是把MTU从1500调到9000字节,9000字节是行业常用值,不是拍脑袋定的,而是大部分网卡和交换机支持的通用标准,它能让同等带宽下传输层的有效数据载荷大幅提升,CPU占用率明显下降,很多万兆环境下传不动文件的案例,排查到最后就是巨型帧没开,或者链路中某一端没开,导致整个传输链路降级回1500。
怎么判断要不要开巨型帧
判断方法很简单,先做一次大文件传输测试,比如拷一个10GB以上的文件,观察速度曲线,如果速度始终上不去,甚至出现断崖式下跌,同时网卡CPU占用率很高,那就值得怀疑MTU配置。
另一个直观信号是,用ping命令测大包丢包,在Windows的CMD里执行:
ping -f -l 8972 目标IP
这条命令的含义是发送一个8972字节的数据包,加上28字节的ICMP头部,正好凑满9000字节,如果返回“需要拆分数据包”或者超时,说明路径上必然有设备不支持巨型帧,要注意,ping -f参数是禁止分片,如果这个包能通,说明这一跳的MTU至少是9000;如果不通,再把长度往下降,比如8000、6000,逐级测试,就能找出实际支持的MTU上限。
巨型帧怎么设置?从网卡到交换机一步不落
巨型帧设置是典型的全链路协作配置,缺一环都不行,很多人只在服务器上开了,忽略了交换机端口和存储设备的MTU设置,结果反而更卡。
先看服务器端的操作路径,Windows Server环境,打开设备管理器,找到网络适配器,双击网卡进入属性,切换到“高级”选项卡,找“Jumbo Frame”或“巨型帧”,把值从“禁用”改为“9000字节”或“9KB”,注意不同网卡厂商的命名略有区别,Intel网卡叫“Jumbo Packet”,Mellanox网卡叫“MTU”,Broadcom网卡叫“Jumbo Frame”,改完后在网卡属性里确认“MTU”确实变成了9000,然后用ipconfig命令验证一下实际生效值。

Linux服务器用ifconfig或ip命令:
ip link set dev eth0 mtu 9000
改完用ip addr show eth0确认,别忘了把配置写入持久化文件,否则重启就丢。
然后是交换机端,登录交换机Web管理界面或命令行,找到对应端口,把MTU从1518改为9216字节,不同品牌的位置不同,华为在“端口-链路类型”里修改,H3C在“端口-基础设置”里改,思科则是system mtu 9216这条全局命令,改完保存配置,最好把所有涉及传输的端口统一设置,别只改服务器直连的那个口。
存储设备端,如果走的是NFS或SMB协议,还需要在文件共享服务里确认支持大帧,NFS默认支持,但要确认客户端和服务端的mount选项没有加“rsize=32768”这类限制参数,SMB3.0以上协议对巨型帧的支持已经很成熟,但Windows自带的SMB客户端在某些补丁版本下会对9000字节的包做额外校验,这属于已知情况,遇到问题时可以暂时关闭SMB的“Large MTU”再测。
内网传输速度慢什么原因?流控和TCP窗口也在捣乱
巨型帧搞定之后,速度可能还是没跑到理想值,这时就要看另外两个设置:流控(Flow Control)和TCP窗口,这两个东西是网卡和协议层的“阀门”,阀门拧不紧,带宽再大也是白搭。
流控是网卡的一种拥塞反馈机制,当接收端处理不过来时,会向发送端发一个暂停帧(Pause Frame),让发送端等一等,听起来很合理,但在大带宽环形链路中,流控反而经常引发蝴蝶效应,发送端停一下,接收端等一会,一来一回之间,吞吐量就掉下来了,尤其是在做存储网络或大数据传输的场景下,相当一部分性能问题就是流控开启导致的“假拥塞”。
把网卡高级属性里的“Flow Control”设置为“Disabled”(关闭),是很多性能调优文档里的标准动作。关闭后,网卡不再发送暂停帧,接收端处理不过来时直接丢包,由TCP层负责重传,听起来丢包很可怕,但实际上在正常负载下,关闭流控后的整体吞吐量远高于开启流控时的抖动式下跌,需要说明的是,这个操作更适合服务器和交换机端口同时修改,否则一端关闭一端开启,反而会引发更多控制帧交互。
TCP窗口自动调优要不要动
Windows系统默认开启了TCP窗口自动调优(TCP Auto-Tuning),正常情况下这是个好东西,能根据网络延迟动态调整接收窗口大小,但在某些内网场景下,自动调优会出现误判,把窗口压得特别小,导致有效吞吐量被限制。
可以先执行下面的命令查看当前状态:
netsh interface tcp show global
接收窗口自动调优级别”不是“正常”,就把它改回来:

netsh interface tcp set global autotuninglevel=normal
有人建议直接改成disabled来获得绝对稳定的传输速度,但这是极端做法,禁用自动调优会让高延迟链路反而变慢,内网低延迟环境下影响不大,但一旦跨网段传输,问题就会暴露,正常环境下保持“normal”就好,系统自带的默认值经过多年优化,比盲目关闭靠谱得多。
年轻网卡还有个中断调节问题
网卡的中断调节(Interrupt Moderation)也是个容易被忽视的设置,它把多个网络数据包合并成一个中断通知CPU处理,减少CPU负载,但代价是增加了延迟,延迟对普通网页访问毫无影响,但对大文件传输来说,延迟增加意味着TCP的拥塞窗口扩展变慢,带宽利用率会因此下降。
这个设置的位置在网卡高级属性的“中断节流率”或“Interrupt Moderation”里,想要极限传输速度,可以考虑把中断节流调到最低或直接关闭,但这会明显抬高CPU占用率,实际调优时建议逐步尝试,不要一步到位全关,否则CPU先成了瓶颈。
千兆局域网传输速度只有10MB/s,问题出在哪
前文说的都是万兆环境,但现实中还有大量千兆局域网场景也传不动文件,千兆理论速度是125MB/s左右,实际上能跑到110MB/s就算正常,可有些人遇到的情况是千兆网卡拷文件只有10MB/s,这个速度连百兆都不如,问题往往不是网络设备,而是更隐蔽的设置。
最常见的元凶是网卡协商到了错误的速率,网线线序不对、水晶头接触不良、网线质量太差,都会让千兆网口自动降级到百兆甚至十兆,查看方法很简单,Windows系统在网卡状态里直接看“速度”,如果显示的是100Mbps而不是1.0Gbps,那就先换根网线试试,多数情况下问题立刻解决。
还有一种情况是网卡和交换机之间的EEE(节能以太网)在捣乱。E EE是绿色节能技术,当链路空闲时自动降低功耗,但它的唤醒机制偶尔会失灵,导致链路长时间处于低功耗状态,传输速度肉眼可见地暴跌,关闭网卡高级属性里的“Energy-Efficient Ethernet”(节能以太网)或“Green Ethernet”,往往能解决这类玄学问题。
硬盘写入速度也是内网传输速度慢什么原因排查里经常被忽略的一环,机械硬盘的持续写入速度约150MB/s,正常不会拖累千兆网卡,但如果是SMR叠瓦盘,写入超过缓存后直接掉到30MB/s甚至更低,这时候再调网络设置也没用,这种情况在NAS设备上尤其常见,很多人以为是网络问题,其实瓶颈在硬盘上,把文件从NAS拉到本地时速度慢,不妨先看看本地硬盘是不是机械盘,再考虑网络配置。
最后还有一个最容易被忽略的:Windows SMB协议本身的协商过程

Windows的文件共享走的是SMB协议,而SMB协议在建立连接时会协商一组参数,如果策略里限制了SMB版本,或者SMB加密被强制开启,传输速度也会受到明显拖累,在“本地安全策略-安全选项”里找到“Microsoft网络服务器:对数字签名进行通信”,改为“已禁用”,通常能提升一些大文件的拷贝速度。
但这波操作需要谨慎,关闭SMB签名会降低安全性,仅建议在内部可信网络中做性能测试时临时使用,现代SMB3.1.1的加密开销已经比以前小很多,在万兆环境下,加密带来的性能损耗大约在10%左右,相比普通千兆环境要小得多,性能优先还是安全优先,是个需要平衡的选择。
回到最开始的问题:大带宽传不动文件,先看巨型帧设置。这是性价比最高的排查起点,一次配置,全程生效,如果巨型帧已经正确开启但问题依旧,再按“流控→中断调节→TCP窗口→物理链路”这个顺序逐步排查,网络优化从来不是单点改动,而是整条链路协同工作的结果,把这几个位置检查一遍,多数情况下都能把速度拉回预期水平。
常见问题
巨型帧开启后反而掉包严重,是怎么回事
开启巨型帧后出现掉包,几乎可以肯定是链路中存在不支持9000字节MTU的设备,常见位置是交换机互联端口或防火墙,先用ping -f -l 8972测试源目之间的完整路径,确认每一跳都能通过大包,如果某一段不通,就要把那段设备也配置为支持巨型帧,或者把整条链路统一改为较小的值如4000字节,以保证两端协商一致。
万兆内网传文件还是慢,怎么判断瓶颈在网卡还是硬盘
最简单的方法是同时执行本地磁盘读写测试和网络传速测试,先在服务器本地拷贝一个大文件,记录速度;再通过网络从另一台机器拉取同一个文件,记录速度,如果本地拷贝速度明显高于网络传输速度,瓶颈在网络配置上,按前文步骤继续调优,如果两者速度接近,说明瓶颈在磁盘IO层,网络怎么调都没用,用任务管理器同时观察“网络利用率”和“磁盘活动时间”的数值对比,也能快速定位。
家用千兆路由器需要开启巨型帧吗
家用路由器或AP的WAN口和LAN口之间通常涉及NAT转发,开启巨型帧对出网速度影响很小,但局域网内部设备互传文件时,开启巨型帧确实有一定改善,多数家用路由器默认MTU为1500,不建议为了追求某个设备的最大性能而修改,只有当NAS和电脑都支持且连续测试确认开启后速度有提升时,才值得开启,如果只是偶尔局域网传文件,保持默认反而更省心。