http 異步通知失敗深度探查

date: 2017-01-16 21:35

全景回顧

部分業(yè)務數(shù)據(jù)打了馬賽克-_-

  • 客服反饋 20170104xxx,供應商那邊掉單了叫潦,并且供應商那邊訂單狀態(tài)是取消狀態(tài)五续,無法退款
  • 數(shù)據(jù)庫查詢發(fā)現(xiàn) 訂單 fund_statusrequest_success弟断,訂單已請款成功
  • 繼續(xù)查詢異步通知結果(見下圖):其中 recevie_time 為空、sent_count為 6 次趴生,表示異步通知多次但沒有成功
  • 繼續(xù)查詢交易信息和商戶信息:獲取到到商戶號阀趴、異步回調(diào)地址
  • 繼續(xù)查詢這家商戶是否有正常交易:表明 12 點左右的訂單異步通知成功,但是 17點的這一單失敗
  • 查詢線上日志(使用 grep):可以查詢到發(fā)送到的內(nèi)容
  • 對接群中尋找對方技術一起聯(lián)查:6 點提出問題苍匆,8點才有回復刘急;對方日志顯示并沒有收到請求
  • 嘗試使用 curl 直接請求(詳細見下面):成功
// 根據(jù)日志,用 php 處理出 query string
$url ='http://xxx'; // 上面步驟中查詢到的異步通知地址
$data = '{"version":"2.0","charset":"UTF-8","merchant_code":xxxx,"timestamp":1483527837,"biz_content":"OtdYKBKmHg3Fz23DTVQbWQg1ZZ%2BanZf3fA3o02KpyFS5tevLHyu8E6uMQNyeRtpUBucmhbAwqfQZYTLrm5msyiBF0UcvP1hmlxv5RIEHzFSWG4s33c%2Bbq53jyuRylDKLVtn3f6xxxF2aYCiJNkWEW%2B","method":"trade.create","sign":"a96598b014xxx22801c"}';
$arr = json_decode($data, true);
$str = http_build_query($arr);
curl -d $str $url # bash 中使用 curl浸踩,用上面 php 變量替換
  • 使用 tcpdump 抓包來定位問題:nohup tcpdump -iany -Xn -s0 host 218.xx.xx.44 -w xx.pcap &叔汁,由于量比較小,使用 nohup 放入后臺,計劃抓取一天的數(shù)據(jù)先看看
  • 第二天使用 wireshark(win平臺)查看文件据块,提示文件不完整(nohup 意外終止了)码邻,根據(jù)片段可以大致判斷出 我們發(fā)送的 http post 請求沒有正常獲得應答
  • 修改異步通知重發(fā)請求進行抓包,這次請求成功另假,但是對方返回 fail(對方設置了去重或者超時邏輯)
  • 由于還是無法確定問題究竟是我們沒有成功發(fā)送異步回調(diào)還是對方無法成功接收(鍋到底在誰那邊-_-)像屋,繼續(xù)執(zhí)行 nohup tcpdump -iany -Xn -s0 host 218.xx.xx.44 -w xx.pcap &

基礎 TCP/IP 知識

rango - TCP服務器端/客戶端的開發(fā)
實驗樓 - TCP/IP網(wǎng)絡協(xié)議基礎

基礎 TCP/IP 知識請大家多閱讀文檔,形成知識體系边篮,以下只選取部分內(nèi)容

OSI 七層:應用層 表示層 會話層 | 傳輸層 | 網(wǎng)絡層 | 鏈路層 物理層

tcp/ip 4層:應用層 | 傳輸層 | 網(wǎng)絡層 | 鏈路層

  • 應用層:用戶進程(nginx己莺、php-fpm等)
  • 傳輸層:tcp / udp
  • 網(wǎng)絡層:ip / icmp(ping) / igmp
  • 鏈路層:arp / rarp / 硬件接口

tcp 連接 3 次握手,4 次揮手

ip地址: 網(wǎng)絡號(A-C)+ 主機號 + 子網(wǎng)號

域名 MAC地址 端口號

MTU: netstat -in

路由表:route -n

arp 緩存表:arp -a

ICMP 協(xié)議:ping / traceroute

tcpdump -vvv -X udp port 7777 # udp
tcpdump -vvv -X -i lo tcp prot 7777 # tcp

抓包神器 tcpdump 簡明教程

《Linux 高性能服務器》- 第17章 - 系統(tǒng)檢測工具 - tcpdump

tcpdump 被稱作抓包神器不是浪得虛名戈轿,各種數(shù)據(jù)報類型都可以:鏈路層(arp)凌受、網(wǎng)絡層(icmp)、傳輸層(tcp思杯、udp)胜蛉、應用層(http 等)

常用參數(shù)

man tcpdump # 查看 tcpdump 的幫助文檔

# 監(jiān)視指定網(wǎng)絡接口
tcpdump -i eth1 # 默認 eth0,可以使用 ifconfig 命令查看網(wǎng)絡接口

# 監(jiān)視指定主機的數(shù)據(jù)包
tcpdump host baidu.com # 也可以使用 ip智蝠,還可以限定通信雙方的 ip 地址

# 監(jiān)視指定主機和端口的數(shù)據(jù)包
tcpdump tcp port 23 and 127.0.0.1

# 監(jiān)視指定協(xié)議
tcpdump tcp # 這里還限定了 tcp 數(shù)據(jù)包腾么,arp、icmp杈湾、tcp解虱、udp 都可以

實用場景

# 抓取指定 ip 數(shù)據(jù)包并保存到文件
nohup tcpdump -iany -Xn -s0 host xxx -w ceair.pcap &

保存的 pcap 文件使用 wireshark(win平臺)查看,可以通過 菜單 - view - time display fromat 修改時間格式漆撞,可以精確到微秒級殴泰。上面的截圖中已經(jīng)展示過 wireshark 的抓包結果,這里不再演示

推薦抓取自建服務器的方式(比如 nginx)浮驳,測試一下 tcpdump 抓包 + wirshark 查看

寫在最后

本文使用的截圖工具:snipaste
馬賽克使用的工具:2345看圖王

通過全景回顧可以發(fā)現(xiàn)悍汛,在解決 ‘http 異步通知失敗’ 時,配合業(yè)務與技術做了全方位的探索至会,查數(shù)據(jù)庫离咐、查日志直到最后使用 tcpdump 抓包。希望整個全景回顧過程奉件,能對大家以后處理線上問題有幫助宵蛀。

補充幾點常見的線上問題排查思路:

  • 查詢相關的數(shù)據(jù)庫記錄
  • 查詢相關的日志記錄:業(yè)務相關的各種 log、nginx access log / error log 等(其他服務器類似)
  • 服務器程序的問題县貌,最終都可以通過 tcpdump 完整抓取整個鏈路的數(shù)據(jù)包定位問題

最后再補充幾點學習建議:

  • 基礎的網(wǎng)絡知識還是要有的术陶,tcp/ip 只是其中一部分,有空當然是看看《計算機網(wǎng)絡》 這樣的教材煤痕,形成完整的知識體系梧宫,沒空可以看看視頻教程接谨,一般都是提煉過的
  • tcpdump 命令參數(shù)特別多,不用完整的了解塘匣,只需要積累幾個 ‘實用場景’ 即可
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脓豪,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子馆铁,更是在濱河造成了極大的恐慌跑揉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埠巨,死亡現(xiàn)場離奇詭異历谍,居然都是意外死亡,警方通過查閱死者的電腦和手機辣垒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進店門望侈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人勋桶,你說我怎么就攤上這事脱衙。” “怎么了例驹?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵捐韩,是天一觀的道長。 經(jīng)常有香客問我鹃锈,道長荤胁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任屎债,我火速辦了婚禮仅政,結果婚禮上,老公的妹妹穿的比我還像新娘盆驹。我一直安慰自己圆丹,他們只是感情好,可當我...
    茶點故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布躯喇。 她就那樣靜靜地躺著辫封,像睡著了一般。 火紅的嫁衣襯著肌膚如雪廉丽。 梳的紋絲不亂的頭發(fā)上秸讹,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天,我揣著相機與錄音雅倒,去河邊找鬼。 笑死弧可,一個胖子當著我的面吹牛蔑匣,可吹牛的內(nèi)容都是我干的劣欢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼裁良,長吁一口氣:“原來是場噩夢啊……” “哼凿将!你這毒婦竟也來了?” 一聲冷哼從身側響起价脾,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤牧抵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侨把,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犀变,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年秋柄,在試婚紗的時候發(fā)現(xiàn)自己被綠了获枝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,637評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡骇笔,死狀恐怖省店,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情笨触,我是刑警寧澤懦傍,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站芦劣,受9級特大地震影響粗俱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜持寄,卻給世界環(huán)境...
    茶點故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一源梭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稍味,春花似錦废麻、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至掂碱,卻和暖如春怜姿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疼燥。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工沧卢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人醉者。 一個月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓但狭,卻偏偏與公主長得像披诗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子立磁,可洞房花燭夜當晚...
    茶點故事閱讀 43,500評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 簡介 用簡單的話來定義tcpdump呈队,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 5,942評論 1 13
  • 4.1 引言 本章我們要討論的問題是只對TCP/IP協(xié)議簇有意義的IP地址唱歧。數(shù)據(jù)鏈路如以太網(wǎng)或令牌環(huán)網(wǎng)都有自己的尋...
    張芳濤閱讀 952評論 0 3
  • 11.1 引言 UDP是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議:進程的每個輸出操作都正好產(chǎn)生一個UDP數(shù)據(jù)報宪摧,并組裝成一...
    張芳濤閱讀 2,795評論 1 6
  • tcpdump抓包命令 tcpdump是一個用于截取網(wǎng)絡分組,并輸出分組內(nèi)容的工具颅崩。tcpdump憑借強大的功能和...
    Yihulee閱讀 14,047評論 0 3
  • 親愛的小魚: 這段時間不論是白天還是黑夜几于,我都難以入睡,也無法得到安寧—就算我睡著了挨摸,也會飽嘗噩夢煎熬孩革,夢見你總是...
    05f3ae22a228閱讀 540評論 0 0