微信发文件、图片慢(技术分析,求解)

62 天前
 sunnysab

一直以来,实验室内所有笔记本和手机,使用微信发送图片、文件,或进行抢红包、转账等操作都要卡 5-10 秒,近期因同学有频繁发送文件的需求,受到的影响格外大,于是打算分析一下。

网络环境:校园网环境,IPv4 使用自己购买的山东移动的宽带,类似于小区吧。IPv6 通过 CERNET2 。

使用 Wireshark 抓包发现,微信的控制消息通过 IPv6 传递,文件传输通过 IPv4 。上传到某些位于南京的服务器时,出现了大量 TCP 重传。而向广州腾讯云的服务器上传时,一切正常。

收集到的 IP 如下:

南京 腾讯云(异常) 43.137.188.182 、109.244.255.103

南京 腾讯云(正常) 175.27.207.200

广州 腾讯云(正常) 114.132.202.176 175.27.33.109

以 109.244.255.103 为例,异常的细节为:

  1. 发 HTTP POST 请求
  2. 收到 HTTP 200 OK
  3. 发 TCP [FIN,ACK]
  4. 收到 HTTP 200 OK

我疑惑的地方在于 当前的情况看上去像是第三个包(姑且称它为包,毕竟是个 IP 包)丢失。但如果真是 3 号包丢失,2 和 4 之间不过才 200ms ,超时重传不至于间隔如此短暂?如果不是 3 号包丢失,是什么原因导致服务器把第 2 个包又发送了一遍呢?

希望得到的帮助 分析出现该问题的原因,并解决微信发图片慢问题。当前链路上用的是 TPLink 路由器,如果需要,可以考虑在链路上加一台 Linux 服务器设备。但考虑到便捷性,尽量不“过滤重传包”。

其他尝试 屏蔽了 dns.weixin.qq.com.cn 域名,但暂未找到微信的文件服务器是从哪里解析的。或许可以从这上面入手,强制传文件到广东服务器。甚至可以搭建一个代理,对明文的文件传输请求进行劫持、改写。(坑有点大)

附件

异常 正常

2200 次点击
所在节点    宽带症候群
20 条回复
jesky
62 天前
你列的两个异常的 IP ,从 ITDOG ,CHINAZ 这种工具网站上测试,就是大量的慢和超时情况。不清楚你的 DNS 怎么配置的,建议更换合适的 DNS 。
moefishtang
62 天前
屏蔽掉南京腾讯云的 IP 看看?
sunnysab
62 天前
@jesky 感谢! DNS 设置使用的是山东移动默认的 DNS ( 218.201.96.130 ),内网用 AdguardHome 做了一次转发,另外方便控制。

@moefishtang 好的,我试试。就是不知道有问题的 IP 会有多少…如果它们还经常变,人工的工作量会比较大。
sunnysab
62 天前
微信貌似有自己的 HTTP DNS. 我屏蔽 dns.weixin.qq.com.cn 之后,还是没找到在哪解析的文件服务器地址,有可能直接在业务渠道下发的。
jesky
62 天前
更换其他 DNS 作为上游试试呢
m208
62 天前
我们学校之前也有类似状况,因为微信使用 IPv6 去做 DNS 解析时得到了面向教育网优化的线路,但是这个线路对三大运营商过来的请求是有限速的。建议联系学校里负责校园网运维的部门,让他们找腾讯优化一下。
jesky
62 天前
楼上说的也很关键。其实我并不理解你的网络拓扑。4 是移动,6 是教育网,还有 adg ,怎么工作的?
山东移动自己默认的 DNS 解析出广州,南京的腾讯云 IP ?你可以试试解析 wximg.qq.com 这个域名看什么结果。
sunnysab
62 天前
@m208 按 1 楼的分析,我也去确认了一下。现在怀疑是腾讯的服务器有问题?并希望尽量绕开南京的服务器。

我猜想:目前 DNS 上游是山东移动默认 DNS ,访问微信也是走 移动的 IPv4 ,跟校园网线路关系不大。

但是!刚才换了个 DNS 服务器(学校自己的 DNS ),最近几次传文件会分配到辽宁移动,并使用 UDP 传输文件,嘎嘎快。新发现:微信会混用 TCP 、GQUIC 、UDP 。

这两天再观察一下。
moefishtang
62 天前
@sunnysab #3 好像没有太好的办法,微信对于服务器 IP 段三缄其口,只有一篇文档告知如何获取微信小程序 api 服务器的地址(这个也是动态的,经常变动)
https://developers.weixin.qq.com/community/develop/doc/000068d4c508180ffd3106b9161800
https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_the_WeChat_server_IP_address.html
企业微信倒是有详尽的服务器 IP
https://res.mail.qq.com/zh_CN/wework_ip/latest.html
sunnysab
62 天前
@jesky

1. IPv4 需要过上网认证,可选校园网(联通、移动商业网络负载均衡)和中国移动,学校出口网关那儿会根据你的登录类型做计费和 NAT 。IPv6 在和网线/WiFi 接口有物理连接后即分配,不做计费,是教育网 2001:da8 开头的地址。大部分学校都是这么玩的。

实验室内部使用一个普通家用路由器共用 IPv4 的账号,在路由器上开 IPv6 桥接模式,所以每台设备有自己的 v6 地址。内网部署了个 adg ,通过 DHCP 下发到各设备 :D

2. 山东移动自己默认的 DNS 解析出广州,南京的腾讯云 IP ?
对。而且还会跳着来,可能也是一种负载均衡吧。

3. 解析到

CNAME: wximg.qq.com.mid.tcdn.qq.com. (ttl=59)
CNAME: wximg.sched.legopic1-dk.tdnsv6.com. (ttl=59)
A: 43.141.70.147 (ttl=59) 天津 腾讯云
A: 182.254.61.222 (ttl=59) 天津 腾讯云
A: 43.141.70.215 (ttl=59)
A: 182.254.59.206 (ttl=59)
A: 182.254.59.166 (ttl=59)
A: 43.141.69.32 (ttl=59)
A: 43.141.69.176 (ttl=59)
A: 43.141.69.210 (ttl=59)
A: 43.141.70.113 (ttl=59)
A: 43.141.70.135 (ttl=59)
A: 43.141.70.41 (ttl=59)

CNAME: wximg.qq.com.mid.tcdn.qq.com. (ttl=59)
CNAME: wximg.sched.legopic1-dk.tdnsv6.com. (ttl=59)
AAAA: 2402:4e00:c2:10fa::3 (ttl=59) 天津 腾讯云
AAAA: 2402:4e00:c2:10f2::5 (ttl=59)
AAAA: 2402:4e00:c2:10f9::4 (ttl=59)

好家伙,都是天津。
kkk9
62 天前
1. 关闭 ipv6 ,测试微信是否正常
2. 关闭 ipv4 ,测试微信是否正常
ipv6 关闭正常,则屏蔽*.weixin.qq.com->ipv6 ,同理 ipv4 。
同时,上游 DNS 建议改为 119.29.29.29
sunnysab
62 天前
@kkk9 好的!我测试了关闭 IPv6 后正常,但晚上发现不关闭 IPv6 也正常了。明天再测试一下!目前感觉微信不太能在纯 v6 下工作。

如果确认关闭 IPv6 会正常,我就想办法让微信的域名只解析 v4 地址。

@moefishtang 感谢🙏 确实这块资料太少了,对微信的分析也不多。一些 “屏蔽微信视频号” 的研究好像也限于路由器厂商内部,公开的研究很少。
kkk9
62 天前
@sunnysab #12 放心,微信在纯 v4/v6 和双栈网络下都非常正常,不正常只能是你的网络或者运营商搞事情。
jesky
62 天前
不科学的,应该解析出移动的 IP 才对。
moefishtang
62 天前
@sunnysab #12 我在一篇帖子里找到这个网址
https://dns.weixin.qq.com.cn/cgi-bin/micromsg-bin/newgetdns
不清楚有什么作用,看域名好像是微信内置的 DNS 服务器?
不过你这个网确实很奇怪,既然用学校的 DNS 没有问题,那还不如使用学校的 DNS(估计是学校的 DNS 做了相关优化),或者想办法让微信相关的域名走学校 DNS 解析
xixiv5
62 天前
JensenQian
62 天前
直接纯 v4 干完事了
我家里的 ipv6 只是用来连外面回来的,
win 的话我直接关掉了 ipv6 ,安卓没法关,我 iptables 把 v6 的 dns 和 安卓的解析屏蔽了下,随机 mac 功能得关了

ip6tables -I FORWARD -p udp --dport 53 -j REJECT
ip6tables -I FORWARD -p tcp --dport 53 -j REJECT
ip6tables -A INPUT -m mac --mac-source mac 地址 -j DROP
MYDB
62 天前
这问题有几年了,故意不修复的,微信就是不想让人在它服务器临时存东西,我的同事不懂网络这块,和甲方对接都换云盘了(可能微信就是想这样降低流量费吧)

或许不是故意不修复,但既没有客服,也没有社区,产品经理更是高高在上,不做用户体验,这个问题修复估计得微信团队哪天出差到存在此问题的城市,自己体验传大文件才能自查了

我的方案是:微信传文件时候,把上传速度慢的 tcp/udp 连接给打断,它就识趣换“优质”的服务器和你连接了
NETBB
62 天前
正好看到,屏蔽 v6 可以解决,供参考,

转载自北邮人论坛: https://bbs.byr.cn/#!article/BUPTNet/108865

发信人: qq784400047 (TS2), 信区: BUPTNet
标 题: [已提供解决方案] 校园网下存在微信加载缓慢问题
发信站: 北邮人论坛 (Thu Sep 26 00:25:40 2024), 站内

更新:
2024.9.27 微信团队表示发现 PC 端存在一处限制逻辑导致这次问题,并于当日提供了解决此问题的微信测试版下载链接。后拉人经半个月测试,绝大多数人安装此版本微信没再卡顿过。
2024.10.8 同学提供思路,可以通过防火墙禁用微信进程的 IPv6 外联临时性解决问题,因此写了一版代码(powershell)用于一键解决问题。经一周测试,效果显著。
2024.10.10 询问微信团队测试版本解决的逻辑何时发正式版,表示需要一段时间,可能得 2 个月及以上,因此先放出临时解决方案。
2024.10.15 放出临时解决方案:
1. 微信测试版链接: https://share.weiyun.com/rDlQZRiM 密码:fj6qrb
2. 若担心微信覆盖安装导致问题,可以使用如下 exe ,双击执行即可,执行成功后,重启微信或电脑立刻生效,如不希望重启,等待约 20 分钟也可生效。

附件(26.5KB) WechatDisableIPv6-fix.exe https://bbs.byr.cn/att/BUPTNet/0/108865/1956
附件中 exe 是通过 ps2exe 转换而来,如担心安全性问题可自行执行 powershell 代码。powershell 源码:

附件(2.2KB) WechatDisableIPv6-fix.ps1 https://bbs.byr.cn/att/BUPTNet/0/108865/29130
使用多 ISP 出口且 IPv6 与 IPv4 线路不同的各高校或场景均会出现这个问题,本帖欢迎转载。
--
2024.9.11 收到微信网络加载速度缓慢问题报障,开始排查
在接下来的半个月时间中,因问题较为分散且不能稳定复现,且大家报障中只有微信应用存在这个问题,这代表着问题点不在校园网内,情况一度陷入僵局。
2024.9.23 有同学抓到了问题现场的流量,让情况变得清晰了起来,结合流量分析情况应该在腾讯业务侧。
2024.9.25 下午,联系到了腾讯微信业务工作人员,了解到问题是如何出现的,他们解决了这个问题。在当晚 20:30 召集之前报障的人进行测试,绝大多数称问题已解决,剩下部分在清后台并重新打开微信后问题解决。

因此,如果微信还存在网络缓慢的问题,请彻底关闭微信或者重启设备,再打开微信尝试。

非常感谢所有配合此次网络排障的老师同学以及微信工作人员,鞠躬!

20240926 16:00 更新: 问题还是有所反复,目前在继续跟进,希望问题得到彻底解决。
laminux29
62 天前
Windows 7 、Windows Server 2008 r2 也有这个问题。

换成 Win10 或 Win11 后解决。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1082961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX