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

12 小时 14 分钟前
 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 域名,但暂未找到微信的文件服务器是从哪里解析的。或许可以从这上面入手,强制传文件到广东服务器。甚至可以搭建一个代理,对明文的文件传输请求进行劫持、改写。(坑有点大)

附件

异常 正常

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

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

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

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

这两天再观察一下。
moefishtang
5 小时 44 分钟前
@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
5 小时 39 分钟前
@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
5 小时 38 分钟前
1. 关闭 ipv6 ,测试微信是否正常
2. 关闭 ipv4 ,测试微信是否正常
ipv6 关闭正常,则屏蔽*.weixin.qq.com->ipv6 ,同理 ipv4 。
同时,上游 DNS 建议改为 119.29.29.29
sunnysab
5 小时 26 分钟前
@kkk9 好的!我测试了关闭 IPv6 后正常,但晚上发现不关闭 IPv6 也正常了。明天再测试一下!目前感觉微信不太能在纯 v6 下工作。

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

@moefishtang 感谢🙏 确实这块资料太少了,对微信的分析也不多。一些 “屏蔽微信视频号” 的研究好像也限于路由器厂商内部,公开的研究很少。
kkk9
5 小时 23 分钟前
@sunnysab #12 放心,微信在纯 v4/v6 和双栈网络下都非常正常,不正常只能是你的网络或者运营商搞事情。
jesky
5 小时 20 分钟前
不科学的,应该解析出移动的 IP 才对。
moefishtang
5 小时 12 分钟前
@sunnysab #12 我在一篇帖子里找到这个网址
https://dns.weixin.qq.com.cn/cgi-bin/micromsg-bin/newgetdns
不清楚有什么作用,看域名好像是微信内置的 DNS 服务器?
不过你这个网确实很奇怪,既然用学校的 DNS 没有问题,那还不如使用学校的 DNS(估计是学校的 DNS 做了相关优化),或者想办法让微信相关的域名走学校 DNS 解析
xixiv5
5 小时 7 分钟前
JensenQian
2 小时 8 分钟前
直接纯 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
1 小时 43 分钟前
这问题有几年了,故意不修复的,微信就是不想让人在它服务器临时存东西,我的同事不懂网络这块,和甲方对接都换云盘了(可能微信就是想这样降低流量费吧)

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

我的方案是:微信传文件时候,把上传速度慢的 tcp/udp 连接给打断,它就识趣换“优质”的服务器和你连接了

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

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

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

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

© 2021 V2EX