針對網路問題進行疑難解答
本文說明一些工具,可診斷各種複雜度的網路問題。 這些問題包括從服務針對非預期的回應值進行疑難解答,到造成連線關閉例外狀況的案例。
針對用戶端疑難解答,適用於 Java 的 Azure 用戶端連結庫提供一致且健全的記錄案例,如在適用於 Java 的 Azure SDK 中設定記錄中所述。 不過,客戶端連結庫會透過各種通訊協定進行網路呼叫,這可能會導致疑難解答案例超出提供的疑難解答範圍。 發生這些問題時,解決方案是使用本文中所述的外部工具來診斷網路問題。
Fiddler
Fiddler 是一種 HTTP 偵錯 Proxy,可讓透過它傳遞的要求和回應依現狀記錄。 您擷取的原始要求和響應可協助您針對服務取得非預期要求的案例進行疑難解答,或用戶端收到非預期的回應。 若要使用 Fiddler,您必須使用 HTTP Proxy 設定用戶端連結庫。 如果您使用 HTTPS,則需要額外的設定來檢查解密的要求和響應主體。
新增 HTTP Proxy
若要新增 HTTP Proxy,請遵循在 Azure SDK for Java 中設定 Proxy 中的指引。 請務必在埠 8888 上使用 的預設 Fiddler 位址 localhost
。
啟用 HTTPS 解密
根據預設,Fiddler 只能擷取 HTTP 流量。 如果您的應用程式使用 HTTPS,您必須採取額外的步驟來信任 Fiddler 的憑證,以允許它擷取 HTTPS 流量。 如需詳細資訊,請參閱 Fiddler 檔中的 HTTPS 功能表 。
下列步驟示範如何使用 Java Runtime Environment (JRE) 信任憑證。 如果憑證不受信任,透過 Fiddler 的 HTTPS 要求可能會因為安全性警告而失敗。
導出 Fiddler 的憑證。
尋找 JRE 的 keytool (通常是在 jre/bin 中)。
尋找 JRE 的 cacert (通常是在 jre/lib/security 中)。
開啟 Bash 視窗,並使用下列命令匯入憑證:
sudo keytool -import -file <location-of-Fiddler-certificate> -keystore <location-of-cacert> -alias Fiddler
輸入密碼。
信任憑證。
Wireshark
Wireshark 是一種網路通訊協定分析器,可擷取網路流量,而不需要變更應用程式程序代碼。 Wireshark 高度可設定,而且可以廣泛擷取到特定低階網路流量。 這項功能適用於疑難解答案例,例如遠端主機關閉連線或在作業期間關閉連線。 Wireshark GUI 會使用識別唯一擷取案例的色彩配置來顯示擷取,例如TCP 重新傳輸、RST 等等。 您也可以在擷取時間或分析期間篩選擷取。
設定擷取篩選
擷取篩選器可減少擷取以供分析的網路呼叫數目。 如果沒有擷取篩選器,Wireshark 會擷取所有通過網路介面的流量。 此行為可能會產生大量數據,其中大部分可能是調查的雜訊。 使用擷取篩選器有助於先佔範圍擷取的網路流量,以協助鎖定調查目標。 如需詳細資訊,請參閱 Wireshark檔中的擷取實時數據 。
下列範例會新增擷取篩選器,以擷取傳送至特定主機或從特定主機接收的網路流量。
在Wireshark中,流覽至 [瀏取擷取擷取 > 篩選... ],然後新增具有 值 host <host-IP-or-hostname>
的新篩選。 此篩選只會擷取來自該主機的流量。 如果應用程式與多部主機通訊,您可以新增多個擷取篩選,或使用 『OR』 運算元新增主機 IP/主機名,以提供鬆散的擷取篩選。
擷取到磁碟
您可能需要長時間執行應用程式來重現非預期的網路例外狀況,並查看導致應用程式的流量。 此外,可能無法維護記憶體中的所有擷取。 幸運的是,Wireshark 可以將擷取記錄到磁碟,以便進行後續處理。 此方法可避免在重現問題時記憶體不足的風險。 如需詳細資訊,請參閱 Wireshark檔中的檔案輸入、輸出和列印 。
下列範例會設定Wireshark將擷取保存到具有多個檔案的磁碟,其中檔案會分割在100k擷取或50 MB大小上。
在Wireshark中,流覽至 [瀏覽至 [擷取 > 選項 ] 並尋找 [輸出 ] 索引標籤,然後輸入要使用的檔名。 此設定會導致Wireshark將擷取保存到單一檔案。
若要啟用擷取至多個檔案,請選取 [自動 建立新檔案],然後選取 [100000 封包 ] 和 [50 MB] 之後。 當其中一個述詞相符時,此組態會建立新的檔案。 每個新檔案都會使用與輸入的檔名相同的基底名稱,並附加唯一標識符。
如果您想要限制 Wireshark 可以建立的檔案數目,請選取 [搭配 X 檔案使用通道緩衝區]。 此選項會將Wireshark限制為只記錄指定的檔案數目。 達到該數目的檔案時,Wireshark 會從最舊開始覆寫檔案。
篩選擷取
有時候您無法嚴格限制Wireshark所擷取的流量,例如,如果您的應用程式使用各種通訊協定與多部主機通訊。 在此案例中,一般使用先前概述的持續性擷取,在網路擷取之後執行分析會比較容易。 Wireshark 支援類似篩選的語法來分析擷取。 如需詳細資訊,請參閱 使用Wireshark檔中的擷取封 包。
下列範例會在 上 ip.src_host==<IP>
載入保存的擷取檔案和篩選。
在Wireshark中,流覽至 [檔案 > 開啟 ],並從先前使用的檔案位置載入保存的擷取。 在功能表欄下方載入檔案之後,會出現篩選輸入。 在篩選輸入中,輸入 ip.src_host==<IP>
。 此篩選會限制擷取檢視,使其只會顯示來源來自具有IP <IP>
之主機的位置。
下一步
本文涵蓋使用各種工具來診斷使用適用於 Java 的 Azure SDK 時的網路問題。 現在您已熟悉高階使用案例,您可以開始探索 SDK 本身。 如需可用 API 的詳細資訊,請參閱適用於 Java 的 Azure SDK 連結庫。