溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

發(fā)布時(shí)間:2020-08-17 19:59:52 來(lái)源:ITPUB博客 閱讀:475 作者:大雄45 欄目:網(wǎng)絡(luò)安全
導(dǎo)讀 本文總結(jié)自己工作過(guò)程中遇到的TCP重傳問(wèn)題的解決過(guò)程 ,側(cè)重于大致的解決問(wèn)題的思路與具體的實(shí)踐,理論知識(shí)偏少,大家有興趣的可以多查閱相關(guān)文章以便深入了解tcp的工作機(jī)制。
關(guān)于TCP重傳

TCP有重傳是正常的機(jī)制,為了保障數(shù)據(jù)傳輸可靠性。只是局域網(wǎng)環(huán)境,網(wǎng)絡(luò)質(zhì)量有保障,因?yàn)榫W(wǎng)絡(luò)問(wèn)題出現(xiàn)重傳應(yīng)該極低;互聯(lián)網(wǎng)或城域網(wǎng)環(huán)境,線路復(fù)雜(可以想象下城市地下管網(wǎng),錯(cuò)綜復(fù)雜的電線桿等),網(wǎng)絡(luò)質(zhì)量不好保障,重傳出現(xiàn)概率較高。
詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

TCP有重傳,也不一定是網(wǎng)絡(luò)層面的問(wèn)題。也可能是接收端不存在,接收端receive buffer滿了,應(yīng)用程序有異常鏈接未正常關(guān)閉等等等。

TCP/IP相關(guān)

排查網(wǎng)絡(luò)問(wèn)題,要掌握TCP/IP原理,真相都在一個(gè)一個(gè)的數(shù)據(jù)包里。以下是和TCP重傳比較關(guān)鍵的幾個(gè)參數(shù)。

建立TCP鏈接時(shí)的參數(shù)

詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

TCP重傳類型

超時(shí)重傳

在請(qǐng)求包發(fā)出去的時(shí)候,開啟一個(gè)計(jì)時(shí)器,當(dāng)計(jì)時(shí)器達(dá)到時(shí)間之后,沒(méi)有收到ACK,則就進(jìn)行重發(fā)請(qǐng)求的操作,一直重發(fā)直到達(dá)到重發(fā)上限次數(shù)或者收到ACK。

快速重傳

當(dāng)接收方收到的數(shù)據(jù)包是不正常的序列號(hào),那么接收方會(huì)重復(fù)把應(yīng)該收到的那一條ACK重復(fù)發(fā)送,這個(gè)時(shí)候,如果發(fā)送方收到連續(xù)3條的同一個(gè)序列號(hào)的ACK,那么就會(huì)啟動(dòng)快速重傳機(jī)制,把這個(gè)ACK對(duì)應(yīng)的發(fā)送包重新發(fā)送一次。具體可以參考:
詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

常見(jiàn)問(wèn)題與措施
單臺(tái)機(jī)器或單個(gè)應(yīng)用機(jī)器tcp重傳

可能是鏈接的服務(wù)器或端口無(wú)法訪問(wèn)

詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

多臺(tái)機(jī)器或多個(gè)應(yīng)用同時(shí)tcp重傳

可能是網(wǎng)絡(luò)抖動(dòng)

查看網(wǎng)絡(luò)區(qū)域埋點(diǎn),查看網(wǎng)絡(luò)設(shè)備報(bào)警,看是否有區(qū)域網(wǎng)絡(luò)抖動(dòng)2區(qū)域網(wǎng)絡(luò)沒(méi)問(wèn)題的話??梢杂贸R?jiàn)問(wèn)題:的方法縮小排查范圍

帶寬跑滿

1、查看主機(jī)監(jiān)控

不常見(jiàn)問(wèn)題

1 網(wǎng)絡(luò)設(shè)備端口或光模塊異常等導(dǎo)致包c(diǎn)hecksum失敗 2 網(wǎng)絡(luò)路由收斂抖動(dòng) 3 主機(jī)網(wǎng)絡(luò)驅(qū)動(dòng)有bug,網(wǎng)絡(luò)設(shè)備有bug等

如何監(jiān)控

使用tsar -tcp -C 可以監(jiān)控到tcp的retran屬性也即是重傳次數(shù)。

    tsar --tcp -C | sed 's/:/_/g;s/=/ /g' | xargs -n 2

詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

感興趣的朋友可以直接執(zhí)行以下監(jiān)控 腳本獲取tcp相關(guān)的狀態(tài)監(jiān)控?cái)?shù)據(jù),適用于open-falcon。
詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

案例實(shí)踐

(1)在遇到丟包重傳的機(jī)器上抓包并使用wireshark 分析該包,注意因?yàn)橹貍鞑皇菚r(shí)刻都有的,所以抓包 命令是要持續(xù)執(zhí)行以便捕捉到重傳的包。使用wireshark打開tcpdump的結(jié)果,在搜索框里入手tcp.analysis.retransmission 得到如下結(jié)果:
詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

圖1 表明服務(wù)端發(fā)生了三次重傳動(dòng)作。

(2)由于包比較多,我們可以使用wireshark的追蹤流功能獲取重傳相關(guān)的tcp流。
詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

圖二 追蹤流-->TCP流 可以得到重傳相關(guān)的數(shù)據(jù)包
詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

圖三 可以看出客戶端和服務(wù)端的請(qǐng)求與應(yīng)答。

(3)解析重傳
詳說(shuō)TCP重傳問(wèn)題的排查思路與實(shí)踐

特別需要說(shuō)明的是:

NO 67,68 client端由于某些原因沒(méi)有收到正確的包數(shù)據(jù),向server端發(fā)送dup ack,參考基礎(chǔ)知識(shí)提到的快速重傳

NO.68和NO.69之間的時(shí)間差200ms(關(guān)注time那一列,其他都是相差小于1ms),server等待超時(shí),于是重傳。

NO 73-74是client端發(fā)送了一個(gè)fin包并主動(dòng)關(guān)閉連接。

這個(gè)案例僅僅發(fā)生一次,沒(méi)有復(fù)現(xiàn),通過(guò)抓包解析出來(lái)分析沒(méi)有得到明確的結(jié)論。

小結(jié)

本文總結(jié)自己工作過(guò)程中遇到的TCP重傳問(wèn)題的解決過(guò)程 ,側(cè)重于大致的解決問(wèn)題的思路與具體的實(shí)踐,理論知識(shí)偏少,大家有興趣的可以多查閱相關(guān)文章以便深入了解tcp的工作機(jī)制。

原文來(lái)自:  https://www.linuxprobe.com/tcp-retransmission.html

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI