利用WireShark對手遊的協議抓包

最近項目上被吐槽登錄和斷線重連太卡。爲什麼王者榮耀和亂世王者的重連瞬間就好了?這需要抓包看看他們重連都經歷了什麼。

1.準備工作

首先去官網下載wireshark,地址:https://www.wireshark.org/download.html

安裝完wireshark,同時PC上安裝android模擬器,同時模擬器中安裝好遊戲。最好安裝一個可以控制網絡連接/斷開的模擬器。我用的是夜神模擬器:系統設置》屬性設置》網絡連接 來設置。

2.如何定位和手遊的連接

打開wireshark運行並開始捕獲協議時,會發現我們PC上在聯網狀態下,即使你什麼都不做也是每秒產生大量的通信。那麼如何快速定位你想觀察的那款遊戲的收發包?

1.首先推測協議類型,一般手遊是tcp/ip的,所以看tcp/ip部分的變化

2.通過連接和斷開的握手協議來區分。我們點擊關掉遊戲,一定會產生TCP關閉的握手,然後再點擊進入遊戲,會產生建立連接的握手。

關閉應用時:客戶端向服務器發送[FIN ACK]  》服務端相應[FIN ACK]  》 客戶端相應[ACK]

建立連接時:客戶端向服務器發送[SYN]  》服務端相應[SYN ACK]  》 客戶端相應[ACK]

上圖滿足特徵,所以判斷出服務器的端口號是12258。

所以上方綠色地址欄中的過濾表達式可以寫成:tcp port eq 12258,即可過濾出和遊戲服務器所有的手法協議。

3.分析比對和總結

原先我一直認爲我們遊戲的登陸協議設計太重,接口多且數據量大。但是抓包發現那款優質的競品遊戲重連時數據量是略大於我們的。區別是它們是大量的[PUSH ACK]推送,我們是50多次的request和response。競品整個重連過程大概耗時不到一秒,但我們時把50多條協議串成一個隊列,每次收到響應才發送下一條。相當於把網絡延時放大了50多倍。這一塊改好了,重連的壓力也就不大了。

同時,wireshark對我們日常開發因爲有很大幫助,尤其項目初期剛剛搭建聯調網絡的時候,前後端的打點都不可信,唯一可信的就是它了。抓個包,前後端再也不爭吵協議到底發沒發,發的格式對不對了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章