V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunnysab
V2EX  ›  宽带症候群

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

  •  
  •   sunnysab · 29 天前 · 1999 次点击

    一直以来,实验室内所有笔记本和手机,使用微信发送图片、文件,或进行抢红包、转账等操作都要卡 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 域名,但暂未找到微信的文件服务器是从哪里解析的。或许可以从这上面入手,强制传文件到广东服务器。甚至可以搭建一个代理,对明文的文件传输请求进行劫持、改写。(坑有点大)

    附件

    异常 正常

    20 条回复    2024-10-24 10:15:29 +08:00
    jesky
        1
    jesky  
       29 天前
    你列的两个异常的 IP ,从 ITDOG ,CHINAZ 这种工具网站上测试,就是大量的慢和超时情况。不清楚你的 DNS 怎么配置的,建议更换合适的 DNS 。
    moefishtang
        2
    moefishtang  
       29 天前
    屏蔽掉南京腾讯云的 IP 看看?
    sunnysab
        3
    sunnysab  
    OP
       29 天前
    @jesky 感谢! DNS 设置使用的是山东移动默认的 DNS ( 218.201.96.130 ),内网用 AdguardHome 做了一次转发,另外方便控制。

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

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

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

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

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

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

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

    我的方案是:微信传文件时候,把上传速度慢的 tcp/udp 连接给打断,它就识趣换“优质”的服务器和你连接了
    NETBB
        19
    NETBB  
       28 天前
    正好看到,屏蔽 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
        20
    laminux29  
       28 天前
    Windows 7 、Windows Server 2008 r2 也有这个问题。

    换成 Win10 或 Win11 后解决。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:55 · PVG 21:55 · LAX 05:55 · JFK 08:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.