奇怪的问题:网速超过100Mps就会断网

网络是学校的dhcp环境(1Gps端口),最近一次滚动更新后就发生这样的事情了,只要我网速超过100Mps就会断网分不到ip. 虽然绝大部分时间不会用到这么大的带宽,但是有的时候进行一些内网文件传输还有p2p下载的时候可能超过这个阈值,电脑会马上断网.重启就能恢复.只是重启dhcpcd没有效果.

由于断网了我也没法在网上找一些教程来诊断查找原因,很无解.

经过一些搜索之后我发现可能的问题是"Configuring and Troubleshooting Ethernet 10/100/1000Mb Half/Full Duplex Auto-Negotiation",现在安装了个networkmanager,把Auto-Negotiation设置了手动,1Gbps,Duplex Full,问题解决了.不过我任然不懂这个Auto-Negotiation是啥意思,为啥我之前只用开启dhcpcd,使用默认设置没问题, 还有看网上说Auto-Negotiation的设置应该与另一端一致,另一端是哪?交换机吗?

看一下内核日志。断网的时候看一下接口还在不在,在的话抓一下包。

断网的时候没ip没路由. 现在基本确定了就是auto-negotiation的设置问题. 只是我不清楚为啥之前默认的设置能很好的工作,而最近才突然出现这个bug.而且这个功能我也是第一次接触.对这个概念一无所知.

每次启动log里面都会有这么一段,包括我换networkmanager并且设置能正常使用之后,貌似这一段不是导致网络中断的原因.

这部分是日志中dhcpcd相关的部分

17:19:17 这个位置应该是断网开始的时间,之后我试着重启了一次dhcpcd没效果.

这是这个时间点附近的日志文件

为什么没有 link down 却有那么多 link up?
造成此问题的最初原因是突然之间发送不了数据了。结合你手动设置 1Gbps 速率能使用,考虑是(你或者对端的)网卡驱动或者固件有问题。
对了,你自动协商出来的速率是多少?难不成和对端的不一样?
对端就是网线另一端,你顺着网线找过去就能找到。应当是交换机。

我装好networkmanager默认是ignore自动协商,不调整配置问题依然存在,我直接手动设置了个1Gps全双工模式,发现就ok了,没有再测试自动或者其他设置了.

有可能是以前是默认自动协商,某次更新后默认设置变成了忽略.

这是现在的信息

Settings for enp3s0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Half 1000baseT/Full
Advertised pause frame use: Symmetric Receive-only
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Link partner advertised pause frame use: Symmetric Receive-only
Link partner advertised auto-negotiation: Yes
Link partner advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: MII
PHYAD: 0
Transceiver: internal
Auto-negotiation: on
Cannot get wake-on-lan settings: Operation not permitted
Current message level: 0x00000033 (51)
drv probe ifdown ifup
Link detected: yes

问题的根源总算找到了,我是r8168网卡,但是内核自动加载了r8169驱动,这是个已知的问题
https://wiki.archlinux.org/index.php/Network_configuration#Realtek_RTL8111.2F8168B