以为是联发科的锅,结果被Intel坑了:GL-MT3000 频繁断线排查纪实
起因
笔者去年年前购买了一款比较热门的便携软路由设备放在老家用
一年后的今年想把设备放在公司使用,于是便带到了公司做旁路由
发现问题
自从接入了这款路由器之后,远程使用公司的电脑便频繁发生掉线断开问题
起初并没有注意,以为是公司网络最近不好
但是
有天我在公司使用scp向另一台同局域网设备拷贝文件时
发现
网速像过山车一样,波动几次,最后会归零
中断然后重新拷贝
现象依旧
网络拓扑
核心交换机 -> 墙插 -> GL-MT3000(旁路由) -> 电脑
问题排查
排除网线质量
把邻桌的设备上的网线接入路由器
问题依旧
排查路由器问题
把网线直接接入电脑而不通过路由器
问题消失
刷固件
查看路由器内核日志,日志中一旦出现Link Down/Up,表现在数据传输上就是断流
初步怀疑是路由器固件问题,刷入openwrt 24、25
问题依旧
刷入原厂固件
问题依旧
强制降速
既然日志中显示是2.5G传输协议协商引起的
那么就通过ethtool -s eth0 speed 1000 duplex full autoneg off命令
强制让路由器使用千兆协议
问题消失
怀疑是2.5G相关硬件电气故障、虚焊
厂商介入
路由器送修检测
未复现故障寄回
联系技术支持、复现故障
技术抓取网口数据包,发现有数据重发异常
上游交换机
执行tcpdump -nn -v -i eth0 ether proto 0x88cc
root@GL-MT3000:~# tcpdump -nn -v -i eth0 ether proto 0x88cc
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:33:46.421115 LLDP, length 52
Chassis ID TLV (1), length 7
Subtype MAC address (4): dc:ce:c1:c3:c4:2a
Port ID TLV (2), length 5
Subtype Interface Name (5): gi30
Time to Live TLV (3), length 2: TTL 120s
Organization specific TLV (127), length 14: OUI IEEE 802.3 Private (0x00120f)
unknown Subtype (5)
0x0000: 0012 0f05 0011 0011 0011 0011 0011
System Capabilities TLV (7), length 4
System Capabilities [Bridge] (0x0004)
Enabled Capabilities [Bridge] (0x0004)
Organization specific TLV (127), length 6: OUI Ethernet bridged (0x0080c2)
Port VLAN Id Subtype (1)
port vlan id (PVID): 1
End TLV (0), length 0
发现这MAC地址前缀DC:CE:C1应该是思科的设备
执行tcpdump -nn -v -i eth0 ether dst 01:00:0c:cc:cc:cc进一步确认
root@GL-MT3000:~# tcpdump -nn -v -i eth0 ether dst 01:00:0c:cc:cc:cc
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:36:35.777864 CDPv2, ttl: 180s, checksum: 0xd363 (unverified), length 202
Device-ID (0x01), value length: 12 bytes: 'dccec1c3c42a'
Address (0x02), value length: 69 bytes: IPv4 (3) 192.168.0.1 pt=0x02, pl=8, pb= aa aa 03 00 00 00 08 00, al=16, a= fd 7d 84 4d 3e 17 f3 ae de ce c1 ff fe c3 c4 2a pt=0x02, pl=8, pb= aa aa 03 00 00 00 08 00, al=16, a= fe 80 00 00 00 00 00 00 de ce c1 ff fe c3 c4 2a
Port-ID (0x03), value length: 4 bytes: 'gi30'
Capability (0x04), value length: 4 bytes: (0x00000028): L2 Switch, IGMP snooping
Version String (0x05), value length: 8 bytes:
1.3.0.62
Platform (0x06), value length: 33 bytes: 'Cisco SG200-50 (PID:SLM2048T)-VSD'
Native VLAN ID (0x0a), value length: 2 bytes: 1
Duplex (0x0b), value length: 1 byte: full
AVVID trust bitmap (0x12), value length: 1 byte: 0x00
AVVID untrusted ports CoS (0x13), value length: 1 byte: 0x00
System Name (0x14), value length: 3 bytes: 'SW1'
unknown field type (0x1a), value length: 12 bytes:
0x0000: 0000 263b 0000 0000 ffff ffff
是思科无疑了,具体型号就是Cisco SG200-50 (PID:SLM2048T)-VSD
虽然不是干网络的,但听过思科的大名,类似华为属于行业制定标准的巨无霸
虽然设备比较老,但它下游带有大量的设备,根本不可能是它的问题
问题又回到了路由器本身
排查是否是联发科2.5G方案
执行ls /lib/firmware/
root@GL-MT3000:~# ls /lib/firmware/
7981_WACPU_RAM_CODE_release.bin WIFI_RAM_CODE_MT7981.bin mt7981_patch_e1_hdr_testmode.bin
7981_WOCPU0_RAM_CODE_release.bin WIFI_RAM_CODE_MT7981_TESTMODE.bin regulatory.db
MT7981_ePAeLNA_EEPROM.bin e2p
MT7981_iPAiLNA_EEPROM.bin mt7981_patch_e1_hdr.bin
没发现联发科常用的闭源驱动微码文件mtk_phy_2500.bin
难道不是联发科的锅?或者二进制是以其它形式导入进去的?
查看厂商ID
执行cat /sys/bus/mdio_bus/devices/*/phy_id
root@GL-MT3000:~# cat /sys/bus/mdio_bus/devices/*/phy_id
0x03a29461
0x67c9de10
经过查询
0x03a29461是联发科MT7981 处理器内部原生自带的千兆 PHY
0x67c9de10是MaxLinear (迈凌科技) 的 GPY211 2.5G PHY 芯片
浙公网安备 33010602011771号