前言
这两天生活变动回到老家,把电脑装上玩了LOL,发现游戏中总是跳ping,气急败坏开始学习计网知识。
跃点跟踪-分段检测
网络连接是分段的,我的网络拓扑图应该是PC-路由器-光纤网关-外网
所以应该分别对这几个网关进行ping操作,需要使用跃点跟踪快速获取到这些跳转的ip地址:
tracert -d [ip|域名]
比较常用的就是用www.baidu.com测试
tracert -d www.baidu.com
ping测试延迟
接着就是对跃点的各个ip进行ping命令,测试网络延迟,分析究竟是哪一块出了问题。
Windows的持续ping操作是:
ping [ip] -t
这里会一直弹最新的ping结果,观察其延迟,进行分析。
可视化
为了方便观察,我(GPT)写了段python脚本把得到的延迟可视化为折线图。在ping一段时间后按CTRL+C结束ping操作,自动给结果画图
import subprocess
import re
import matplotlib.pyplot as plt
def ping_ip(ip_address):
ping_command = ['ping', ip_address, '-t']
ping_process = subprocess.Popen(ping_command, stdout=subprocess.PIPE)
delays = []
try:
while True:
output = ping_process.stdout.readline().decode('gb2312')
print(output)
if not output:
break
delay_match = re.search(r'时间[<=](\d+)ms', output)
if delay_match:
delay = int(delay_match.group(1))
delays.append(delay)
print(f"延迟: {delay}ms")
except KeyboardInterrupt:
ping_process.terminate()
return delays
def plot_ping(delays):
plt.plot(delays)
plt.title('Ping delays')
plt.xlabel('icmp_seq')
plt.ylabel('delayTime (ms)')
plt.show()
if __name__ == "__main__":
ip_address = input("请输入要ping的IP地址: ")
#ip_address = r'192.168.10.1'
delays = ping_ip(ip_address)
plot_ping(delays)
图表样例:
分析结果
图表分析
一番测试后,我发现我的电脑在ping路由器的时候就出现跳ping问题,而且是比较规律的跳ping隔一段时间是必定跳ping,如下图(纵轴是延迟,横轴是每一轮次)
光是PC到路由器就会跳ping这是很糟糕的情况,图上峰值延迟快到200ms,这网络玩LOL简直是坐牢。
IOS测试
在测试了PC后我怀疑是路由器的问题,于是要用别的设备验证一下假象,手头正好有台ipad,于是在和机箱相同的位置连接相同的网络,在appstore上下了个叫PING的程序进行检测。
检测导出结果和电脑的ping差不多
PING 192.168.10.1: 64 data bytes
------
#0 sendto: No route to host
#1 sendto: No route to host
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=4.151 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=4.476 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=12.932 ms
64 bytes from 192.168.10.1: icmp_seq=5 ttl=64 time=8.377 ms
64 bytes from 192.168.10.1: icmp_seq=6 ttl=64 time=4.538 ms
64 bytes from 192.168.10.1: icmp_seq=7 ttl=64 time=4.608 ms
64 bytes from 192.168.10.1: icmp_seq=8 ttl=64 time=7.274 ms
检测的结果导出为txt发到电脑上,同样写了个python做可视化,把文件丢到Data文件夹里
import os
import re
import matplotlib.pyplot as plt
def parse_ping_data(file_path):
icmp_seq = []
delays = []
with open(file_path, 'r') as file:
for line in file:
match = re.search(r'icmp_seq=(\d+) ttl=\d+ time=([\d.]+) ms', line)
if match:
seq = int(match.group(1))
delay = float(match.group(2))
icmp_seq.append(seq)
delays.append(delay)
return icmp_seq, delays
def plot_ping_data(directory):
files = os.listdir(directory)
files = [file for file in files if file.endswith('.txt')] # Assuming data files have .txt extension
for file in files:
file_path = os.path.join(directory, file)
icmp_seq, delays = parse_ping_data(file_path)
plt.plot(icmp_seq, delays, label=file)
plt.xlabel('icmp_seq')
plt.ylabel('Delay (ms)')
plt.title('Ping Delay')
plt.legend()
plt.show()
# Example usage:
directory = r'D:\Data'
plot_ping_data(directory)
可以看到,跑了2次,第一次结果有一个异常高的值(可以当作误差去掉)第二次结果就非常稳定的在25ms内。
所以看来并不是路由器的问题,那很可能就是我电脑自己的问题了。
更换路由器测试
为了验证是我PC的问题,我用手机开热点让电脑连,然后ping手机热点。发现仍然波动严重。
各种尝试
失败案例
重装网卡驱动
找到主板的官网,重新下载网卡驱动,把现有驱动卸了重装。
重置winsock
CMD管理员win+r,重新启动
netsh winsock reset
重置各网络缓存
netsh winsock reset
netsh int ip reset
ipconfig /release
ipconfig /renew
ipconfig /flushdns
开启tls1.0,ssl3.0等
启动开始菜单,输入 “控制面板”,回车启动。选择 “Internet 选项”>“高级” 选项卡,勾选 “使用 SSL 3.0”、“使用 TLS 1.0”、“使用 TLS 1.1”、“使用 TLS 1.2”,应用并确定。
解决
绕了一圈能用的所有软方法都是试了一遍,但是还是没法解决,估计很有可能是网卡驱动问题。
最后只能拉了一根网线到路由器上,直接物理层面解决了。
附上一张对比图:
题外话
在对比路由器延迟的时候,我后面又用了几台其他设备测试,得到一张对比图。
可以看到小米的网是最差的,平均延迟要比苹果和华为高很多,华为有一些跳动和我电脑一开始的情况很像,平时平均延迟是和苹果非常接近的。
参考
Q.E.D.