《網(wǎng)絡(luò)分析技術(shù)之葵花寶典》要點:
本文介紹了網(wǎng)絡(luò)分析技術(shù)之葵花寶典,希望對您有用。如果有疑問,可以聯(lián)系我們。
請及時關(guān)注“高效運維(微信ID:greatops)”公眾號,并置頂公眾號,以免錯過各種干貨滿滿的原創(chuàng)文章.
作者介紹:
胥峰
盛大游戲高級研究員 高級信息系統(tǒng)項目管理師
《Linux運維最佳實踐》(在版)作者2006年畢業(yè)于南京大學(xué),2011年加入盛大游戲.十年運維經(jīng)驗,曾參與盛大游戲多款大型端游和手游的上線運維,主導(dǎo)統(tǒng)一運維平臺的產(chǎn)品功能設(shè)計和實施.擁有工信部認(rèn)證高級信息系統(tǒng)項目管理師資格.
引言:在游戲運維過程中,我們經(jīng)常會遇到各種看起來與網(wǎng)絡(luò)有關(guān)的故障.如何快速定位和排除故障,是我們需要面對的挑戰(zhàn).
本文主要分享一些使用網(wǎng)絡(luò)分析技術(shù)tcpdump來解決實際問題的案例,傳遞網(wǎng)絡(luò)分析的思想、最佳實踐,和大家一起探討學(xué)習(xí).
分享的內(nèi)容由五部分組成:
1. 背景
2. 案例
3. 技巧
4. 原理
5. 總結(jié)
其實,我們可以多做一步:先用常見網(wǎng)絡(luò)分析技術(shù)如tcpdump,判斷下問題,然后再決定下一步行動.
說明:如下案例都通過tcpdump抓包并用Wireshark進(jìn)行分析.關(guān)于這兩個利器的使用技巧詳見后文.
現(xiàn)象:2012年11月1日~11月7日某游戲技術(shù)封測,部分玩家更新失敗
從這個圖里,我們可以看到,玩家下載更新時,被引導(dǎo)到一個非我司的IP地址上.下面我們來看看,在底層的網(wǎng)絡(luò)層面,發(fā)生了什么.
通過上述網(wǎng)絡(luò)抓包,可以更清晰地看到來龍去脈,并可作為證據(jù)留存.
在本例中,帶寬最小值和最大值都是100Mb/s,這明顯是有問題的.
我們抓包看看情況.
由圖可見,在TCP的SYN包中,被攜帶了數(shù)據(jù).這說明,該主機對外DOS攻擊(原因是什么?各種啊..).
在目前的TCP協(xié)議實現(xiàn)中,SYN包中并不攜帶數(shù)據(jù)
注意: 有興趣的同學(xué)可以關(guān)注下TCP Fast Open技術(shù),在最新的內(nèi)核中已經(jīng)支持.這個技術(shù)允許在TCP SYN包中攜帶數(shù)據(jù),以減少對端連續(xù)建立多個TCP通道的消耗.
有你,是盛大推出的一款網(wǎng)絡(luò)短信工具,有類似“朋友圈”的功能.
問題現(xiàn)象:在“有你”這款工具的運營中,發(fā)現(xiàn)Nginx日志中存在499狀態(tài)碼的訪問,且較多.
499狀態(tài)碼為Nginx特有,意思是“客戶端已經(jīng)關(guān)閉連接”
通過分析,我們發(fā)現(xiàn)存在2個問題:
1)紅色圈中的2個packet,可以看出從NetScaler收到syn包到轉(zhuǎn)發(fā)給后端web時間delay達(dá)54秒.
2) 黃色圈中的3個packet,可以看出客戶端在發(fā)了HTTP Request的0.6秒后,立即發(fā)送了一個[FIN,ACK]的包.
因此,也可以進(jìn)行下一步排查了.
這是該情況下的網(wǎng)絡(luò)抓包截圖.
通過對游戲的網(wǎng)絡(luò)行為分析,總結(jié)如下3點:
1)中國移動對HTTP協(xié)議有串聯(lián)設(shè)備分析請求與響應(yīng),可能過濾了我們的請求.(后續(xù)工作:可以向中國移動某分公司投訴)
2)游戲客戶端發(fā)送的請求有需要優(yōu)化的地方:User-Agent頭部可以考慮完善補充(構(gòu)造),對于HTTP協(xié)議來說,User-Agent在rfc2616(HTTP標(biāo)準(zhǔn))中用的是SHOULD(即建議),但是事實上必須的.以下是某款知名手游的HTTP頭部截圖
3)游戲客戶端發(fā)送的請求有需要優(yōu)化的地方:POST請求把所有數(shù)據(jù)都放在了http header里面,導(dǎo)致post內(nèi)容本身字段長度為0.這個使得“看起來不是那么正常”.建議嘗試優(yōu)化.
1)禁用解析
2)使用絕對序列號
3)自定義HTTP端口號
有時,我們的HTTP應(yīng)用(以手游為多見)并不是開放在80的知名端口,而是使用了例如10001這樣的高端口.為了使Wireshark能夠主動以HTTP協(xié)議解析這些非知名端口的通信內(nèi)容,我們需要自定義HTTP解析的端口.
4)使用追蹤數(shù)據(jù)流功能
5)一招制敵:使用過濾器找出可能有問題的網(wǎng)絡(luò)行為
tcp.analysis.retransmission or
tcp.analysis.fast_retransmission or
tcp.flags.reset == 1 or
icmp
初次使用tcpdump時,使用tcpdump -h命令可以看到它有數(shù)十個參數(shù).
根據(jù)我們在運維工作中的經(jīng)驗,掌握tcpdump以下5個參數(shù)即可滿足大部分的工作需要了.
tcpdump提供了豐富的過濾器,以支持抓包時的精細(xì)化控制,達(dá)到減少無效信息干擾的效果.我們常用的過濾器規(guī)則有下面幾個:
以上幾種過濾器規(guī)則,可以使用and或者or進(jìn)行組合,例如:
host a.b.c.d and tcp port x
則只抓取本機和某主機a.b.c.d之間基于TCP的目的端口或者源端口為x的數(shù)據(jù)通信.
tcp port x or icmp
則抓取TCP協(xié)議目的端口或者源端口為x的數(shù)據(jù)通信或者ICMP協(xié)議的數(shù)據(jù)通信.
隨著移動應(yīng)用的增加,移動設(shè)備訪問系統(tǒng)應(yīng)用的情況越來越多,我們經(jīng)常會遇到有用戶抱怨說使用移動設(shè)備訪問網(wǎng)站等業(yè)務(wù)慢的問題.在這種情況下,如果能夠同時在移動設(shè)備和服務(wù)器上同時抓包,那么對于分析問題將會有很大的幫助.
Android版本的tcpdump下載地址是:
http://www.androidtcpdump.com/android-tcpdump/downloads
另外,在Android系統(tǒng)抓包時,需要使用adb這個工具,下載地址是
http://developer.android.com
我們把下載后的tcpdump和adb工具及其依賴的dll放在c:\adb目錄下
我們先回顧下一般網(wǎng)絡(luò)程序的調(diào)用圖.
再看一下tcpdump程序調(diào)用模型.
可見,tcpdump這一類的應(yīng)用程序完全不同,它依賴的是libpcap.
libpcap使用的是一種稱為設(shè)備層的包接口(packet interface on device level)技術(shù).
使用這種技術(shù),應(yīng)用程序可以直接讀寫內(nèi)核驅(qū)動層面的數(shù)據(jù),而不經(jīng)過完整的Linux網(wǎng)絡(luò)協(xié)議棧.
在C語言中,調(diào)用設(shè)備層的包接口使用如下的方法:
#include <sys/socket.h> #include <netpacket/packet.h> #include <net/ethernet.h> /* the L2 protocols */ packet_socket = socket(PF_PACKET, int socket_type, int protocol);
PF_PACKET套接口:被用于接收和發(fā)送在設(shè)備驅(qū)動層(OSI Layer 2)的數(shù)據(jù)包.
在以上的函數(shù)調(diào)用中,socket_type可以是:
protocol:是指IEEE 802.3協(xié)議號.
特別的,如果是htons(ETH_P_ALL)則所有協(xié)議的數(shù)據(jù)包都被接收.
可能會有疑問,如果一種輸入的網(wǎng)絡(luò)通信(INPUT)被iptables給禁止了,那么tcpdump還可以抓取到嗎?
答案是肯定的.
因此:
tcpdump和iptables的關(guān)系,總結(jié)下來就是:
在遇到網(wǎng)絡(luò)問題時,記得使用tcpdump抓包看看,肯定有不一樣的收獲!
更多內(nèi)容,請關(guān)注本人即將出版的《Linux運維最佳實踐》一書.
對網(wǎng)絡(luò)分析技術(shù)有興趣的同學(xué),可以加“運維技術(shù)實踐”公眾,或我個人微信號(xufengnju)一起探討.
據(jù)說,本文作者@胥峰同學(xué)將攜新作《Linux運維最佳實踐》,親臨GOPS2016全球運維大會·上海站,并做精彩演講.
約么??
運維發(fā)展至今,早已不是刀耕火種的時代,不應(yīng)該仍然是“背黑鍋俠”,“背服務(wù)器俠”.運維可以更高逼格、更高價值,運維明天可以更美好!
“重新定義運維”讓這些成為可能
匯聚整個行業(yè)的力量,集合海內(nèi)外專家的智慧,我們在路上!
將于9月23日-24日舉行的GOPS2016上海大會,已開始報名,可掃描下方二維碼或點擊”閱讀原文”鏈接,以了解詳情:
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/4512.html