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

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

  •  
  •   sunnysab · 12 小时 20 分钟前 · 729 次点击

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

    附件

    异常 正常

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

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

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

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

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

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

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

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

    我的方案是:微信传文件时候,把上传速度慢的 tcp/udp 连接给打断,它就识趣换“优质”的服务器和你连接了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   982 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:47 · PVG 04:47 · LAX 13:47 · JFK 16:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.