刷视频卡顿、游戏掉线、远程桌面突然断开——这些毛病,有时候真不是宽带慢,而是路由器对网络传输协议的超时重传设置太‘死板’了。
超时重传不是玄学,是TCP的保命机制
TCP协议靠‘确认+重传’保证数据不丢。比如你发一个HTTP请求,路由器或终端设备发出数据包后,会等对方回个ACK(确认信号)。如果等太久没等到,就认为这个包丢了,自动重发。这个‘等多久’就是RTO(Retransmission Timeout),也就是超时重传时间。
RTO不是固定值。它会根据网络实际延迟动态算:先测RTT(往返时延),再加一点浮动余量。但家用路由器默认的RTO初始值和退避策略,往往照搬标准实现,没考虑你家Wi-Fi穿两堵墙、或者用的是老旧千兆口交换机这类现实情况。
常见问题场景,其实是RTO在拖后腿
– 玩《原神》联机,队友总说你‘瞬移’:其实是小包重传太慢,导致动作指令延迟堆积;
– 远程控制老家电脑,鼠标一动就卡3秒:TCP在反复重传SYN或ACK包,握手阶段就被卡住;
– NAS挂载SMB共享老断连:Linux客户端默认RTO偏保守,遇上弱信号Wi-Fi就频繁触发重传,最后直接放弃连接。
能调吗?看你的路由器型号
普通百元级路由器基本不开放RTO参数,但中高端型号(如华硕AX86U、网件R7800、OpenWrt软路由)可通过命令行微调。以OpenWrt为例:
echo 'net.ipv4.tcp_rmem = 4096 131072 1048576' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_wmem = 4096 131072 1048576' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_retries2 = 5' >> /etc/sysctl.conf
/sbin/sysctl -p
其中 tcp_retries2 = 5 表示最大重传次数(默认常为15),设成5后,异常连接更快释放,避免占着端口不放;tcp_rmem/tcp_wmem 调整接收/发送缓冲区,间接影响RTO收敛速度。
更实用的土办法:绕过烂设置
如果你的路由器连SSH都不支持,别硬刚。试试这几个真实有效的操作:
– 关闭路由器的‘TCP连接优化’或‘QoS智能加速’功能(很多厂商这功能反而乱改窗口大小和重传逻辑);
– 给游戏主机或NAS单独分配静态IP+预留带宽,减少队列积压导致的伪丢包;
– 在终端设备上动手:Windows可改注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{xxx}\TcpMaxDataRetransmissions,设为5~8(默认10);Mac用户可在终端运行:
sudo sysctl -w net.inet.tcp.rexmtthresh=3降低快速重传阈值,让丢包反应更快。
别迷信‘调到最小就最快’
RTO太短,容易把正常延迟误判为丢包,白白重传,浪费带宽;太长,又卡得难受。建议先用 mtr -r www.baidu.com 看下你家到主干网的典型RTT(比如平均45ms),那么RTO初始值落在100~200ms区间比较稳。调完观察一天:网页打开是否顺滑、语音通话是否还断字、下载大文件时速率曲线是否平稳——有变化,才算调对了。