简洁版本
我的家庭网络是纯千兆的,所有设备都支持至少 9000 字节的巨型帧。将 Synology 上的 MTU 巨型帧设置增加到 6000(字节)可提高性能(写入 810Mbps 和读取 945Mbps)。将值设置为 7000 只会破坏读取性能(一直下降到 4Mbps);写入性能保持快速。
这是出乎意料的,因为大多数巨型帧问题没有与之相关的方向性,并且通常是全有或全无(无论数据包来自哪里,它们都会在交换机上被丢弃)。似乎没有任何IP 碎片化一直在发生,但 TCP 层确实不高兴。什么可能导致这种不对称/不稳定的行为?我该如何修复它以支持我的所有设备应该支持的完整 9000 字节 MTU?
长版本
这些是我在尝试弄清楚这一点时所做的编辑过的笔记。
客户
Realtek PCIe GBE 系列控制器 RTL8167
巨型帧:9KB MTU
$ netsh interface ipv4 show subinterfaces
MTU MediaSenseState Bytes In Bytes Out Interface
------ --------------- --------- --------- -------------
9198 1 32501506 11275394 Local Area Connection
(似乎 9198 不包含 14 字节以太网头)
$ ping -l 1500 -f 192.168.1.84
(使用在客户端上运行的 Wireshark 进行观察;所有大小均为线路字节大小)
[9213,∞] 未由主机发送(需要分段)
[9019,9212] 已发送但无响应
[9015,9018] 分段 IP 响应
[42,9014] 未分段 IP
[0,41] ?(无法生成,因为 eth+IP+ICMP 标头 = 14+20+8 = 42 字节)
路由器(交换机部分)
Asus RT-AC68U - 固件 3.0.0.4.378_4585
启用巨型帧:“启用”
无法确定它实际支持的巨型帧大小,似乎至少为 9000
它将来自客户端的 ping 请求分段为 1514 字节(但 ping 路由器可能会触发其 WAN 路由器行为而不是 LAN 交换机行为?)
非管理型交换机
TP-LINK TL-SG1008D
巨型帧(规格表):9KB(他们的网站说是 15KB,但看起来像是不同的设备)
服务器
Synology DS1815+ -- DSM 5.2-5565 更新 1
巨型帧:9000
从 Synology 到客户端的文件读取数据包
大小:大多数为 9014 字节(双向)
IP 标志:不分段
Wireshark 发现:TCP 虚假重传、未捕获的 TCP 前一段、TCP 无序、TCP 快速重传和正常(9014 字节)数据包
SMB2-over-NetBIOS 协议数据包读取响应读取长度:65,536(~8 个 TCP 段)
$ ifconfig
bond0 Link encap:Ethernet HWaddr --:FF
inet addr:192.168.1.84 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addrs: --/64 Scope:Link, --/64 Scope:Global, --/64 Scope:Global
UP BROADCAST RUNNING MASTER MULTICAST MTU:9000 Metric:1
RX packets:lots errors:85 dropped:0 overruns:0 frame:85
TX packets:lots errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:237 GiB TX bytes:117 GiB
eth2 Link encap:Ethernet HWaddr --:00
UP BROADCAST RUNNING SLAVE MULTICAST MTU:9000 Metric:1
RX packets:lots errors:19 dropped:0 overruns:0 frame:19
TX packets:lots errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:236 GiB TX bytes:83 GiB
eth3 Link encap:Ethernet HWaddr --FF
UP BROADCAST RUNNING SLAVE MULTICAST MTU:9000 Metric:1
RX packets:lots errors:66 dropped:0 overruns:0 frame:66
TX packets:lots errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1 GiB TX bytes:33 GiB
eth2 和 eth3 使用自适应负载平衡进行绑定(不支持交换机)
$ ping -c 5 -s 1500 192.168.1.82
(使用在客户端上运行的 Wireshark 进行观察;所有大小均为线路字节大小)
[9019,∞] 请求已发送,响应已发送,未收到响应
[9015,9018] 碎片 IP 请求(可能被 Synology 碎片化,busybox ping 没有无碎片选项,因此很难判断)
[60,9014] 未碎片化的 IP
[0,59] ?(无法生成,因为 busybox ping 至少放置了 18 个字节加上 42 字节的标头)
杂项数据
- 将客户端 MTU 改为 8KB 也无济于事
- 当将服务器的 MTU 从 6000(非常好,945Mbps)更改为 7000(非常糟糕,4Mbps)时,服务器的读取速度急剧下降
- 所有服务器 MTU 设置均不会影响服务器的写入速度(始终在 700 到 825 Mbps 之间)
- Synology 有一个绑定网络(4 个端口中的 2 个)
- 电缆均为 Cat6 或 Cat5e
答案1
更新固件
根据我的经验,Synology 在每个固件版本中修复了很多问题,而你运行的这个版本已经是近四年前了。我没有读过发布说明,但从那时起,似乎有很多机会可以修复 Jumbo 帧错误。
使用直接连接进行测试
使用新的跳线将测试机器直接连接到 Synology(在同一子网上分配静态 IP),然后重新运行测试。这将消除布线和交换机以及任何其他设备和配置问题。如果问题仍然存在,请使用另一台计算机运行测试。如果问题仍然存在,那肯定是 NAS 的问题。
如果问题在直接连接测试期间消失,则尝试先更换交换机,然后更换电缆。您没有显示连接,所以我假设测试机器和 NAS 之间只有 TPLINK。