Skip to content

【翻牆慢訊】博客玩家的困擾和遊戲玩家的煩惱

Published:
14
3

Contents

前言:Blogger 們的近期形勢

群友們好!

感覺好像很久沒寫東西了。雖然我早已打算要掏出一篇草稿,讓它成為《極限風味》的一塊磚,繼續當個歲月靜好的 Blogger,可惜美夢不能成真,有一件事情弄得我夜半時分驚坐起,腦內 OS 轉不停,不得安寧。

這件事就是:牆越來越厚了!

不過說牆越來越厚可能不太準確,應該說中國的網路質量越來越爛了。這件事的起因是我注意到了 Cloudflare 在中國已經屬於是 無法忍受的緩慢,嚴重影響了我和其他群友們 blog 的穩定性。

Kiramux 博客頁面加載時間 (Cloudflare)
Kiramux 博客頁面加載時間 (Cloudflare)

使用瀏覽器 F12 計時可見,就算所有資源本身只有 400 多 KB,完整加載也消耗了接近 30 秒,其中 DOM 載入消耗了 15 秒。

何意味?意思是完成 HTML 和 CSS 等必要資源的請求就需要 15 秒。這對採用了 Client-side navigation 的 Astro 網站來說是致命的打擊,整個頁面會呈現一種無響應的卡死狀態。

我在去年就注意到了這種現象,當時就把本站使用的 CDN 換成了 Fastly。從結果來看,比 CF 好一點,網頁只需要 3 秒就能顯示內容。但是問題出在資源文件上——我插入的字體,圖片,還有那些可愛的小裝飾——仍然需要 30 秒才能顯示。

本 blog 頁面加載時間 (Fastly)
本 blog 頁面加載時間 (Fastly)

這就是最近讓我焦頭爛額的問題,導致我無心寫作,,,

這時有的群友可能就要噴了:賤人就是矯情!妳管那些中國人幹什麼!學學隔壁 blog.xxx.moe,直接在博文寫讓中國人滾蛋!不好嗎??

妳說得非常有道理!本博被牆內搜索引擎收錄的概率,或者是沒被微信內置瀏覽器屏蔽的概率,統統為零。在這種情況下給稀爛的中國網路做優化確實是一筆賠本買賣。但是那句古話怎麼說的來着?

「君子藏器於身,待時而動。」

萬一真有個有一個 17 歲的美少女 JK,用着中國的 IP,穿過了抖音逼站小紅書等奶頭樂設下的重重陷阱,跨越千山萬水,卻因為加載太慢沒能打開《極限風味》,最終也沒能對我說出:「前輩,我好喜歡妳的 blog ❤️️ 要是我成為了 Blogger 妳會和我交換友鏈嗎 🥺」的話,怎麼辦?那我肯定要做好準備啊!!1!1

經過千挑萬選,Oracle 新加坡和 Digital Ocean 舊金山從衆多雲區域中脫穎而出,屬於是又快又便宜的模範生。現在我在申請 Oracle 的同時已經將本 Blog 遷移到了免費套餐的 Digital Ocean。

此次遷移效果拔群,速度飛躍,一雪前恥。一秒顯示三秒加載完成已不再是迷霧之夢,歡迎使用中國 IP 測試,我保證不會出道妳 🥰

誠不我欺,一個字快
誠不我欺,一個字快

妳畫我猜:群友活動的困難

「妳畫我猜」是我們的群內活動,遊戲中,每位玩家畫出上一個玩家的猜測,並猜出上一個玩家的畫作的含義。遊戲的最後舉行鑑賞大會,共同分享奇妙的作品和猜測。

這項活動每週舉辦,到目前為止已連續舉辦兩年,共收集了 3,600 多張作品。

舉辦了那麼久,遊戲流程和各種預案都應該很成熟了……對吧?並沒有。遊戲還是三天兩頭掉線,總是有無辜的群友被突然踢出對局。原因很簡單,網太卡了,以至於開加速器都不能消除掉線的風險。

妳見過卡到遊戲被整個帶走的大場面嗎
妳見過卡到遊戲被整個帶走的大場面嗎

身為一個拳打軟路由,腳踢 VPS,手撕 OpenWrt 的老玩網廢物,俺其實已經有過類似經驗了。四年甚至還是三年前,俺就已經體會過開着 Shadowsocks 或者 V2Ray 玩音遊卻還是不停掉線的困擾了。當時的研究發現,原因其實並不複雜,就在於翻牆軟件只保證應用層數據的完整性,卻不保證傳輸層狀態的正確性。。

中譯中就是,若 ss-local 和 ss-server 之間的 TCP 吃了 reset,那麼其承載的應用層 TCP 連結也會被一併幹爛,不會留下任何的重試機會。妳可以想象一艘載有小汽車的運輸船,一旦翻船,無論是保時捷還是蘭博基尼都要被帶走。

2025 年 6 月 5 日新聞,運輸船沈沒帶走了 3,000 輛汽車
2025 年 6 月 5 日新聞,運輸船沈沒帶走了 3,000 輛汽車

時至今日,許多的翻牆軟件仍然繼承着 SS 那種「來一個 TCP 就開一個 TCP」的設計哲學,因此它們也容易遭受到這種攻擊。

當時我給出的解決方案是,使用三層 VPN 來轉發全部 IP 層報文。由於 IP 層並不提供可靠傳輸,而且 TCP 的工作前提就是在一個不可靠的通道上提供可靠傳輸,所以就算 VPN 數據遭遇丟包也無所謂,TCP 只不過會認爲是下層出現了丟包,自動重傳機制會確保數據被送達。

總之,就像山火燒不到隧道裏的車一樣,三層 VPN 能夠遮蔽外界的干擾,給上層協議提供一個穩定的環境。

以上僅僅是我為音遊打造的傳奇解決方案。至於能否給畫猜對症下藥,還是要抓包研究一下畫猜才知道。來,請 Windows 上場做髒活累活,Wireshark、Fiddler,啓動!

經研究,我有三個驚人的發現!

  1. 畫猜同時使用了 HTTP,UDP,和 ICMP (ping) 三種協議!(圖 2-1)
    我這輩子第一次見到會發射 ICMP 的遊戲……真是腦腦又洞洞啊 😅
  2. 對局開始後的網路請求只剩 UDP 和 ICMP;
  3. 所有請求都是明文發送。
    沒錯,玩家在聊天室裏面罵習近平的消息會被習近平看到 😅
圖 2-1: 同時使用三種協議
圖 2-1: 同時使用三種協議

我知道妳很急,但是妳先別急,先容我分析一下。從上圖中可見,遊戲服務器有三台主機,分別負責計時,房間匹配和對局。計時和房間匹配使用 HTTP,對局中使用 UDP 和 ICMP。因此如果玩家從對局中掉線,那麼基本可以確定是遊戲和對局服務器的連結出了問題。

而對局服務器使用 UDP 和 ICMP,不會遭受到上文中提到過的 TCP reset 攻擊,故掉線的原因就只可能有兩種情況:

  1. 服務器 IP 不可達,導致兩個協議都中斷,或者
  2. 其中的一個協議中斷了。

先看可能性 1,若服務器 IP 不可達,要麼是物理網路出現中斷,要麼是 IP 被牆。導致 IP 被牆的原因有很多,比如說有人在畫猜聊天室中罵習近平就很可能會觸發 GFW 的 G 點。而且,無論是物理斷網還是 IP 被牆,這些都不是我們玩家能控制的因素,玩家能做的就只剩給遊戲「開加速器」。

再看可能性 2,UDP 和 ICMP 都是無狀態協議,由上層負責保持會話,所以能影響通信的就只有「丟包」這一個因素。GFW 愛怎麼丟包,受到考驗的其實是遊戲協議的設計,玩家能做的還是只剩給遊戲「開加速器」。

那麼,妳的這個加速器,它能不能正確地代理 UDP 和 ICMP 呢……?

來複習一下課本
來複習一下課本

我相信妳已經看出潛在的問題了。許多代理軟件都運行在傳輸層甚至更高的層次,無法完整傳送 3 層報文,就算他們能代理 UDP,也不代表它們能正確轉發 ICMP,因為 ICMP 是一個 3 層協議。

此處得到一個猜想:UDP 被加速器加速所以沒有問題,但是 ICMP 仍然經過 GFW,它一旦被牆,畫猜很有可能就會以為網路異常,導致哪怕 UDP 沒有中斷也要顯示已掉線。

於是我們得出了一個解決方法:還是使用三層 VPN 來轉發全部 IP 層報文,確保不遺漏任何數據包。尤其是在面對畫猜這種狗屎級的設計的時候,更要多加小心,,,

後記:全球自由倒退

翻牆的歷史就是我的歷史。歷史的車輪滾滾向前,我坐在車頂向後望去,便會懷念起那些親身體驗過自由的日子,這些黃金時代的回憶,就像是一粒粒星辰落在歷史的長河中。只不過,越往後,它們就越發地黯淡。

俺的翻牆歷史大概可以追溯到 2009 年前後。當時俺得知了一款名叫 Puff 的翻牆軟件,它翻牆後便會自動用瀏覽器打開大紀元網站,這讓我一度以為該軟件是法輪功的作品,但是一篇 👉🏻大紀元新聞 表示,Puff 可能是政府的蜜罐軟件,當然最後真相也不得而知了。

時間來到 2010 年,GFW 針對 Google 和維基百科的封鎖加劇,用戶只要查詢「溫習」「胡蘿蔔」之類的關鍵詞就會觸發 TCP reset。於是那時 Puff 幫我解決了很多難題,我也在翻牆混跡 Google+ 的時候認識了一些反動分子,他們發了很多文章介紹六四等事件,呼籲我們多看維基百科,還介紹了當時最新的翻牆軟件 👉🏻GoAgent。在取代了 Puff 後,GoAgent 一直陪伴了我三年。

GoAgent
GoAgent

2014 年曾經在歷史長河中短暫地閃耀。彼時 Instagram 剛推出,就立即成為了班上女生們最愛的時尚單品。我們驚歎着可以在轉眼間認識世界上任何一個角落的潮人,只是好景不長,2014 年 9 月雨傘革命爆發,Instagram 也被 GFW 完全封鎖。當時 GoAgent 的服務器也幾乎被封鎖殆盡,取而代之的是一款名叫「翻牆路由器 (👉🏻fqrouter2)」的安卓 APP。該軟件極其先進,內置了多種流量變形算法和代理程序來繞過 GFW,擁有 root 的手機還能劫持局域網內其他設備進行強制翻牆。

fqrouter2
fqrouter2

這麼好用的東西自然被迅速普及到了班上的每一個人。但是 Party 總有結束之時,隨着 fqrouter2 的內置算法和節點逐漸失效,以及 Shadowsocks 機場的興起,SS 坐上了頭把交椅。

SS 一直走在了翻牆之戰的最前線,它被移植到了包括路由器的億萬設備上,以至於現在我還在三層 VPN 中跑 SS。

一路過來,牆越來越厚,翻牆的成本也越來越高。2017 年,公開的免費翻牆軟件已基本滅絕,而我學會了自建 VPS 和刷寫路由器固件。當時的雲廠商真是大方又慷慨,帳號隨便註冊,點擊就送免費額度,Cloudflare 也作為建站服務中的明星走上了舞台。與此同時,稍微考驗技術的自建翻牆軟件開始井噴出現,我也開始了折騰 OpenWrt 和 Linux 服務器的旅程。

我在這一路上嚐遍極限風味,知識儲備突飛猛進,乍一看精彩無比,但是卻不能忽略其本質:這是一條逐漸失去自由的不歸路。我需要不斷加大努力才能換取和往日同樣的自由。

2019 年 6 月,香港反送中運動爆發,我決定放棄國內出路。

2019 反對逃犯條例修訂草案運動
2019 反對逃犯條例修訂草案運動

2019 年 12 月,COVID-19 冠狀病毒疫情爆發。

那之後的三年如夢似幻。我依稀記得學校被封鎖,我滯留在家,無所事事無所事事,做題做題做做題題,日夜日夜日日夜夜,如同窗外壞掉的太陽不停地開開關關。返校後,我一舉掃清了所有大學科目,語言考試和申請外國學校的任務。最後在一個陰沉的下午,我擠上了一趟一星期只飛一次的航班離開了家。

好消息是,我翻牆了。壞消息是,牆外面還有牆。接下來這幾年,我親身體會了什麼叫「世風日下」。
Cloudflare 的中國路由從還算能用變成了直接卡死;全球科技公司的帳號從隨意註冊變成了實名風控[2];甚至各國民意都從開放包容變成了歧視排外[3]。小學教科書中,全人類其樂融融的「地球村」的願景,則離我們越來越遠。

人類從分散走向團結,最終又走向分散。我覺得互聯網也會這樣。

每每當我看到那些新聞——說新的限制性法律不是出台了,就是在出台的路上[4];或是說大型科技公司們不是被罰了,就是在被罰的路上[5];或是說某國異議人士不是被抓了,就是在被抓的的路上[6];又或是說戰爭不是爆發了,就是在爆發的路上[7]——的時候,我都會突然想起一句遊戲台詞:我們看似正常的世界,其實建立在一層佈滿裂縫的薄冰之上。而那些微微張開的裂縫是否就通往着地獄呢……

世界太大,大到任何悲劇的來臨都如此地遲緩,任何悲鳴都如此地低沉。薄冰上的人,不會察覺到裂縫的擴大和低吟的悲鳴,只會在自由不斷被侵蝕之中度過餘生。就如同,極限風味會在不斷變窄的互聯網夾縫中,繼續嘗試為妳提供服務一樣。

過去更好,還是未來會更好?我只知道,歷史的車輪已經走遠了。

好結局
好結局

一如既往,我都願為屏幕前的妳獻上美好的祝福。

考察材料

[1] (GitHub) Shadowsocks AEAD 加密方式设计存在严重漏洞,无法保证通信内容的可靠性

[2] 簡單爬取 Telegram 數個科技新聞頻道可發現,相關關鍵詞出現頻率和數量在 2022 年後呈上升趨勢。

相關關鍵詞在每一年的出現數量和比例
相關關鍵詞在每一年的出現數量和比例

[3] 全球反移民趨勢 🆙️🆙️

[4] 出台法律

歐盟瘋狂上分。中國這邊的花樣立法太多就不列舉了,來看看日本的:

[5] 狂罰科技公司

歐盟把科技公司當提款機的事情已經屢見不鮮了,這裏就不再列舉。
來看個新鮮的:

[6] 抓捕異議人士

這種現象主要發生在極權國家,比如:

下面的例子和異議人士無關,但是卻是某些「民主國家」所出現過的實實在在的污點:

我的經歷見聞讓我深深堅持「公權力永遠不會站在你這一邊」的看法。

[7] 戰爭的陰霾

在和一位台湾朋友的交談中,我得知,就算中國直接發動戰爭的可能性非常非常低,這種恐懼還是刻在了他們的心裏面,並塑造了他們的世界觀。

雖然我不太清楚 2027 年這個數字是怎麼得出來的,但是很明顯他們為了提高預防能力付出了太多,明明這些精力是可以用花在更有用的事情上的。只要戰爭機器還存在,世界就永無安寧之日,,,


Next Post
網路爬蟲開發隨想🐛(上)

評論區

妳的評論和建議是我前進的動力!
我很需要妳的評論!無論長短還是水,我都會非常高興 😘

darkreader icon 請停用 Dark Reader

親愛的 Dark Reader 用戶:

本博客已內置了深色模式,並且 Dark Reader 會導致部分元素顯示錯誤.
請在本博客上停用 Dark Reader,謝謝,,,

🌸
🌸
🌸