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

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

  •  
  •   sunnysab · 10 小时 5 分钟前 · 658 次点击

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

    附件

    异常 正常

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

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

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

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

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

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

    @moefishtang 感谢🙏 确实这块资料太少了,对微信的分析也不多。一些 “屏蔽微信视频号” 的研究好像也限于路由器厂商内部,公开的研究很少。
    kkk9
        13
    kkk9  
       3 小时 13 分钟前
    @sunnysab #12 放心,微信在纯 v4/v6 和双栈网络下都非常正常,不正常只能是你的网络或者运营商搞事情。
    jesky
        14
    jesky  
       3 小时 10 分钟前 via iPhone
    不科学的,应该解析出移动的 IP 才对。
    moefishtang
        15
    moefishtang  
       3 小时 3 分钟前
    @sunnysab #12 我在一篇帖子里找到这个网址
    https://dns.weixin.qq.com.cn/cgi-bin/micromsg-bin/newgetdns
    不清楚有什么作用,看域名好像是微信内置的 DNS 服务器?
    不过你这个网确实很奇怪,既然用学校的 DNS 没有问题,那还不如使用学校的 DNS(估计是学校的 DNS 做了相关优化),或者想办法让微信相关的域名走学校 DNS 解析
    xixiv5
        16
    xixiv5  
       2 小时 57 分钟前
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1149 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:32 · PVG 02:32 · LAX 11:32 · JFK 14:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.