这个问题其实好多年了,一旦出现以后短时间以内就很难解决,除非断开家里 WiFi 改用 4G. 今天正好又出现了,借着 ROS 可以远程抓包的功能顺手调试了一下,发现这个问题原来是网宿弱智导致的。

AppStore 在启动和工作中会连接很多域名,其中下面这些(在 iOS 12 beta4 上测试,不保证其他版本)

client-api.itunes.apple.com
init-p01st.push.apple.com
play.itunes.apple.com
apps.mzstatic.com
api-edge.apps.apple.com
init.itunes.apple.com
bag.itunes.apple.com
search.itunes.apple.com

用国内的 DNS 解析会统一 CNAME 到 applewsashark.dtwscache.ourwebcdn.com

这个域名一看就是网宿的。如果去解析这个域名会发现,大多数时候只能解析出来一个 IP 。这个 IP 轮换的速度也挺快,可能几分钟就会换一个。然而出问题的时候解析到的 IP 经常都是不好使的,表现为 443 端口完全连不上,或者连上以后丢包非常严重,根本无法使用。奇怪的是,这些有问题的 IP,从其他地方访问有可能就是好用的,不知道是因为 anycast 到了不同的机器,还是网宿 peer 的带宽不足。

找到了症结就好办了,因为国内各大 DNS 解析出来都是同样的不好使的 IP ,于是直接从 8.8.8.8 解析了一个出来,在路由器上面把刚才一堆域名统统绑定到这个 IP,AppStore 秒开。

最后鄙视一下网宿,这问题这么多年了,居然一直都没有修好,跟大姨妈似的经常出现。