轉(zhuǎn)載請(qǐng)?jiān)谖氖妆A粼某鎏帲?/span>EMC中文支持論壇https://community./go/chinese
介紹
前文論述了TCP基礎(chǔ)知識(shí),,從本節(jié)開始,,通過TCP抓包實(shí)例來診斷TCP常見問題。 TCP進(jìn)程通訊時(shí),雙方打開連接,,發(fā)送數(shù)據(jù),,最后關(guān)閉連接。當(dāng)TCP打開連接時(shí),,從源端口到目的端口發(fā)送一個(gè)請(qǐng)求,。在應(yīng)用建立或關(guān)閉時(shí)可能發(fā)生一些問題。本文討論用Wireshark網(wǎng)絡(luò)抓包的方法來定位及解決這一問題,。 更多信息
問題的表現(xiàn)形式:
問題可能有多種表現(xiàn)類型: · 嘗試運(yùn)行應(yīng)用程序但發(fā)現(xiàn)應(yīng)用程序無法工作,。嘗試瀏覽網(wǎng)絡(luò)但無法獲得響應(yīng)。 · 嘗試發(fā)送郵件但無法連接到郵件服務(wù)器,。 · 問題可能由簡(jiǎn)單原因引起,,如服務(wù)器宕機(jī),服務(wù)器上沒有運(yùn)行應(yīng)用程序,,或在客戶端到服務(wù)器的某一處網(wǎng)絡(luò)斷開,。 · 問題也可能由復(fù)雜原因引起,如DNS問題,,服務(wù)器內(nèi)存不足無法連接(例如某一應(yīng)用占用高內(nèi)存空間),,重復(fù)IP,以及其他原因,。 處理方法: 下文會(huì)介紹解決問題的線索以及如何通過抓包來診斷TCP連接問題,。通常,這些問題會(huì)導(dǎo)致運(yùn)行應(yīng)用程序時(shí)無法得到任何結(jié)果,。 當(dāng)你在運(yùn)行一個(gè)應(yīng)用程序時(shí),,例如數(shù)據(jù)庫(kù)客戶端,郵件客戶端,,觀看視頻等等,,而又無法獲得輸出,按照以下步驟診斷:
5. 抓包文件中,,查找以下模式: · 三重SYN信息而沒有響應(yīng)(見以下截屏) · SYN信息帶一個(gè)reset(RST)響應(yīng) 這兩種情況下都有可能是防火墻攔截了特定應(yīng)用程序或應(yīng)用程序沒有在運(yùn)行,。
以下截屏是一個(gè)簡(jiǎn)單的case:客戶端無法連接到web服務(wù)器81.218.31.171(報(bào)文61,62和63)??赡苁怯捎诓槐环阑饓υ试S,,或服務(wù)器發(fā)生故障??梢钥吹搅硪粋€(gè)站點(diǎn)108.160.163.43(報(bào)文65,66和67)的連接正常,,因此連接問題僅限于81.218.31.171。
下例是一個(gè)這種情況相對(duì)復(fù)雜的case,。該case中,,客戶想要登錄到camera服務(wù)器來訪問遠(yuǎn)程站點(diǎn)的camera。camera服務(wù)器的IP地址為135.82.12.1,,問題在于客戶能夠看到服務(wù)器主頁(yè)上的登錄窗口,,但無法登進(jìn)系統(tǒng)。在下面的截圖中可以看到,,打開了一個(gè)到IP地址135.82.12.1的連接,。到HTTP服務(wù)器的TCP連接是打開的,,一開始看上去沒有連接問題:
當(dāng)我們過濾出目的IP地址為135.82.12.1的數(shù)據(jù)流,,也就是camera服務(wù)器。這里可以看到,,當(dāng)嘗試連接TCP端口6036時(shí),,得到了一個(gè)RST/ACK響應(yīng),有以下可能性: · 防火墻攔截了端口6036 · 如果配置了端口地址轉(zhuǎn)換(PAT),,那么僅轉(zhuǎn)換端口80而非6036 · 用戶名和密碼驗(yàn)證是在TCP端口6036上完成的,,防火墻僅允許端口80,驗(yàn)證被攔截,,應(yīng)用無法工作 總之,,當(dāng)無法正常連接服務(wù)器時(shí),檢查服務(wù)器和客戶端是否所有TCP/UDP端口都能通過網(wǎng)絡(luò)轉(zhuǎn)發(fā),,以及是否有未知的端口,。
工作過程:
TCP連接開始時(shí),發(fā)生了以下三步: 1. 客戶端TCP進(jìn)程發(fā)送了一個(gè)SYN報(bào)文,。該報(bào)文中SYN標(biāo)志位設(shè)置為1,。這一報(bào)文中客戶端: · 指定自己的初始序列號(hào)。這是客戶端發(fā)送給服務(wù)器的第一個(gè)字節(jié),。 · 指明自己的窗口大小,。這是客戶端分配給進(jìn)程的緩存大小(位于客戶端的RAM),。 · 設(shè)置自己將要使用的選項(xiàng):MSS,,Selective ACK,等等。
2. 當(dāng)服務(wù)器收到建立連接請(qǐng)求,,服務(wù)器: · 發(fā)送SYN/ACK給客戶端,,確認(rèn)接收到SYN請(qǐng)求。 · 指明服務(wù)器端的初始序列號(hào),。這是服務(wù)器發(fā)送給客戶端的第一個(gè)字節(jié),。 · 指明服務(wù)器的窗口大小。這是服務(wù)器分配給進(jìn)程的緩存大?。ㄎ挥诜?wù)器RAM),。 · 回復(fù)請(qǐng)求選項(xiàng)并設(shè)置服務(wù)器端選項(xiàng)。
3. 當(dāng)接收到服務(wù)器的SYN/ACK,,客戶端: · 發(fā)送ACK報(bào)文給服務(wù)器,,確認(rèn)從服務(wù)器接收到SYN/ACK. · 指明客戶端窗口大小。盡管這一參數(shù)在第一個(gè)報(bào)文中定義過了,,服務(wù)器還是會(huì)參考這個(gè)值,,因?yàn)檫@是最新的窗口大小。
在TCP頭部的選項(xiàng)字段中,,有以下幾個(gè)主要選項(xiàng):
· Maximum Segment Size(MSS):TCP數(shù)據(jù)報(bào)的最大字節(jié)數(shù),,即從TCP頭部開始直到報(bào)文末尾的字節(jié)數(shù)。 · Windows Scale Option (WSopt):這一因子與TCP頭部的Window Size字段相乘,,通知接收方擴(kuò)大緩存,。由于頭部最大窗口大小是64KB,乘以因子4也就是256KB窗口大小,。 · SACK:Selective ACK,,該選項(xiàng)使連接雙方能夠僅確認(rèn)指定報(bào)文,當(dāng)單個(gè)報(bào)文丟失,,只有這個(gè)報(bào)文會(huì)被重傳,。連接建立時(shí),雙方都需要同意SACK,。 · Timestamps Option(TSopt):該參數(shù)指客戶端和服務(wù)器之間的延時(shí),。 在這一階段,雙方:
· 同意建立連接 · 知道對(duì)方的初始序列號(hào) · 知道對(duì)方的窗口大小 在建立連接時(shí),,除了三路握手信號(hào)之外,,其他都表示有問題。包括SYN沒有響應(yīng),,SYN之后SYN/ACK最后沒有ACK,,SYN響應(yīng)為RST,等等,。
總結(jié):
· 如果SYN報(bào)文收到回復(fù)RST,,則檢查攔截了port號(hào)的防火墻,。 · 三次SYN而沒有任何回復(fù),或者是由于應(yīng)用程序沒有響應(yīng),,或者是由于防火墻攔截了特定端口上的請(qǐng)求,。 · 永遠(yuǎn)記住確認(rèn)一下是否有NAT,端口轉(zhuǎn)發(fā),,以及涉及TCP和UDP端口的機(jī)制,。這些機(jī)制可能會(huì)中斷TCP正常操作。
參考
Network Analysis Using Wireshark Cookbook |
|