一直以来,实验室内所有笔记本和手机,使用微信发送图片、文件,或进行抢红包、转账等操作都要卡 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 为例,异常的细节为:
我疑惑的地方在于 当前的情况看上去像是第三个包(姑且称它为包,毕竟是个 IP 包)丢失。但如果真是 3 号包丢失,2 和 4 之间不过才 200ms ,超时重传不至于间隔如此短暂?如果不是 3 号包丢失,是什么原因导致服务器把第 2 个包又发送了一遍呢?
希望得到的帮助 分析出现该问题的原因,并解决微信发图片慢问题。当前链路上用的是 TPLink 路由器,如果需要,可以考虑在链路上加一台 Linux 服务器设备。但考虑到便捷性,尽量不“过滤重传包”。
其他尝试 屏蔽了 dns.weixin.qq.com.cn 域名,但暂未找到微信的文件服务器是从哪里解析的。或许可以从这上面入手,强制传文件到广东服务器。甚至可以搭建一个代理,对明文的文件传输请求进行劫持、改写。(坑有点大)
附件
1
jesky 7 小时 9 分钟前
你列的两个异常的 IP ,从 ITDOG ,CHINAZ 这种工具网站上测试,就是大量的慢和超时情况。不清楚你的 DNS 怎么配置的,建议更换合适的 DNS 。
|
2
moefishtang 6 小时 34 分钟前
屏蔽掉南京腾讯云的 IP 看看?
|
3
sunnysab OP @jesky 感谢! DNS 设置使用的是山东移动默认的 DNS ( 218.201.96.130 ),内网用 AdguardHome 做了一次转发,另外方便控制。
@moefishtang 好的,我试试。就是不知道有问题的 IP 会有多少…如果它们还经常变,人工的工作量会比较大。 |
4
sunnysab OP 微信貌似有自己的 HTTP DNS. 我屏蔽 dns.weixin.qq.com.cn 之后,还是没找到在哪解析的文件服务器地址,有可能直接在业务渠道下发的。
|
5
jesky 4 小时 3 分钟前 via iPhone
更换其他 DNS 作为上游试试呢
|
6
m208 4 小时 2 分钟前
我们学校之前也有类似状况,因为微信使用 IPv6 去做 DNS 解析时得到了面向教育网优化的线路,但是这个线路对三大运营商过来的请求是有限速的。建议联系学校里负责校园网运维的部门,让他们找腾讯优化一下。
|
7
jesky 3 小时 38 分钟前 via iPhone
楼上说的也很关键。其实我并不理解你的网络拓扑。4 是移动,6 是教育网,还有 adg ,怎么工作的?
山东移动自己默认的 DNS 解析出广州,南京的腾讯云 IP ?你可以试试解析 wximg.qq.com 这个域名看什么结果。 |
8
sunnysab OP @m208 按 1 楼的分析,我也去确认了一下。现在怀疑是腾讯的服务器有问题?并希望尽量绕开南京的服务器。
我猜想:目前 DNS 上游是山东移动默认 DNS ,访问微信也是走 移动的 IPv4 ,跟校园网线路关系不大。 但是!刚才换了个 DNS 服务器(学校自己的 DNS ),最近几次传文件会分配到辽宁移动,并使用 UDP 传输文件,嘎嘎快。新发现:微信会混用 TCP 、GQUIC 、UDP 。 这两天再观察一下。 |
9
moefishtang 3 小时 34 分钟前
@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 |
10
sunnysab OP @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) 好家伙,都是天津。 |
11
kkk9 3 小时 28 分钟前
1. 关闭 ipv6 ,测试微信是否正常
2. 关闭 ipv4 ,测试微信是否正常 ipv6 关闭正常,则屏蔽*.weixin.qq.com->ipv6 ,同理 ipv4 。 同时,上游 DNS 建议改为 119.29.29.29 |
12
sunnysab OP @kkk9 好的!我测试了关闭 IPv6 后正常,但晚上发现不关闭 IPv6 也正常了。明天再测试一下!目前感觉微信不太能在纯 v6 下工作。
如果确认关闭 IPv6 会正常,我就想办法让微信的域名只解析 v4 地址。 @moefishtang 感谢🙏 确实这块资料太少了,对微信的分析也不多。一些 “屏蔽微信视频号” 的研究好像也限于路由器厂商内部,公开的研究很少。 |
14
jesky 3 小时 10 分钟前 via iPhone
不科学的,应该解析出移动的 IP 才对。
|
15
moefishtang 3 小时 3 分钟前
@sunnysab #12 我在一篇帖子里找到这个网址
https://dns.weixin.qq.com.cn/cgi-bin/micromsg-bin/newgetdns 不清楚有什么作用,看域名好像是微信内置的 DNS 服务器? 不过你这个网确实很奇怪,既然用学校的 DNS 没有问题,那还不如使用学校的 DNS(估计是学校的 DNS 做了相关优化),或者想办法让微信相关的域名走学校 DNS 解析 |
16
xixiv5 2 小时 57 分钟前
|