如何疑難排解 VPC 中 EC2 Linux 或 Windows 執行個體和網際網路閘道上內部部署主機之間的網路效能問題?

4 分的閱讀內容
0

我的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體和網際網路閘道上的內部部署主機之間存在封包遺失或延遲問題。如何解決網路效能的這些問題?

簡短說明

若要診斷網路問題 (例如封包遺失或延遲),請先測試網路以隔離問題來源。下列解決方案有助於判斷問題的來源是網路還是應用程式。最佳做法是基準測試效能結果以便在觀察效能問題時比較結果。

在開始疑難排解之前,請檢查下列項目:

  • 請確定網路公用程式已安裝在兩個端點上 (在 EC2 執行個體和內部部署主機上)。
  • 使用支援增強型聯網的 EC2 執行個體,並確保驅動程式為最新狀態。增強型網路可提供更高的 I/O 與低 CPU 使用率,有助於避免執行效能測試時發生執行個體層級的問題。如果未開啟增強型網路功能,請參閱 Linux 上的增強型網路Windows 上的增強型網路
  • 連接至 EC2 執行個體以存取執行個體,並確保 EC2 執行個體和內部部署主機之間具有端對端連線。

解決方法

安裝下列工具以協助疑難排解和測試您的網路:

  • 收集網路指標的 AWSSupport-SetupIPMonitoringFromVPC,如封包丟失、延遲、MTR、tcptraceroute 和跟踪路徑.
  • MTR 檢查 ICMP 或 TCP 封包丟失和延遲問題。
  • 跟踪路由以判斷延遲或路由問題。
  • Hping3 確定端到端 TCP 封包丟失和延遲問題。
  • Tcpdump 用於分析封包捕獲樣本。

使用自下而上的方法檢閱路由跟踪路由或 MTR 報告上的躍點。例如,檢查最後一個躍點或目標的遺失情況,然後檢閱下列躍點。如果封包遺失或延遲問題持續透過最後一個躍點,則可能是網路或路由發生問題。如果該節點上的控制平面速率限制發生問題,路徑中某個躍點可能會發生封包遺失或延遲。檢查報告的最後一個躍點是否為命令中註明的目標。如果不是,則可能是由限制性安全群組引起的問題。

使用 AWSSupport-SetupIPMonitoringFromVPC 測試性能

此內建工具會收集許多網路疑難排解所需的指標。如需詳細資訊,請參閱從 Amazon VPC 進行網路連線的偵錯工具

Linux 執行個體效能疑難排解

檢查 Linux 性能統計信息

如果您可以存取來源執行個體或目標執行個體,請檢查 CPU、記憶體使用率和負載平均值的問題。

使用 MTR 測試效能

Linux MTR 命令可提供持續和更新的輸出。此輸出可讓您分析網路效能。此診斷工具結合了跟踪路由和 ping 公用程式的功能。大多數 Linux 發行版都預先安裝了跟踪路由和 MTR。您也可以從發行版的軟體套件管理員下載。

若要安裝 MTR,請執行下列命令:

Amazon Linux:

sudo yum install mtr

Ubuntu:

sudo apt-get install mtr-tiny

若要使用 MTR 測試網路效能,請在 EC2 執行個體的公有 IP 地址和內部部署主機之間雙向執行此測試。如果方向反轉,TCP/IP 網路上節點之間的路徑可能會變更。因此,獲得兩個方向的 MTR 結果是非常重要的。您可以使用 TCP 型追蹤來取代 ICMP,因為大多數網際網路裝置會取消 ICMP 型追蹤請求的優先順序。

檢視您的封包遺失。單一躍點上的封包遺失通常不代表有任何問題。遺失可能是因為控制平面政策造成「超過 ICMP 時間」訊息被捨棄。如果您發現目標躍點持續遺失封包,或是數個躍點上的封包遺失,此遺失可能表示有問題。

**注意:**通常會看到一些請求超時。

基於 ICMP 的 MTR:

mtr -n -c 200 <Public IP EC2 instance/on-premises host> --report

基於 TCP 的 MTR:

mtr -n -T -c 200 <Public IP EC2 instance/on-premises host> --report

自變數 -T 執行基於 TCP 的 MTR,並且 --report 選項使 MTR 進入報告模式。MTR 按 -c 選項指定的循環次數運行。列印統計資料,然後結束。

**注意:**基於 TCP 的 MTR 測試目標 TCP 連接埠 80,到 MTR 一個特定的目標 TCP 連接埠,後面加上 -P,然後是連接埠號碼。以下是 MTR 目標 TCP 連接埠 443 的範例:

mtr -n -T -c 200 <Public IP EC2 instance/on-premises host> -P 443 --report

**使用跟踪路由測試效能 **

Linux 跟踪路由公用程式可識別從用戶端節點到目標節點的路徑。該公用程式記錄每個路由器響應請求的時間(以毫秒為單位)。公用程式也會計算每個躍點到達目標之前所花費的時間量。

若要安裝跟踪路由,請執行下列命令:

Amazon Linux:

sudo yum install traceroute

Ubuntu:

sudo apt-get update
sudo apt-get install traceroute

**注意:**如果您執行 MTR 報告,則不需要跟踪路由。MTR 為目標提供延遲和封包丟失統計資訊。

請確定連接埠 22 或您要測試的連接埠在兩個方向上都開啟。若要使用跟踪路由對網路連線進行疑難排解,請從用戶端執行命令到伺服器,然後從伺服器返回用戶端。如果方向反轉,TCP/IP 網路上節點之間的路徑可能會變更。使用基於 TCP 的跟踪來代替 ICMP(您的應用程序連接埠),因為大多數互聯網設備會取消基於 ICMP 的跟踪請求的優先級。

基於 ICMP 的跟踪路由:

sudo traceroute -I <Public IP of EC2 instance/on-premises host>

基於 TCP 的跟踪路由:

sudo traceroute -n -T -p 22 <Public IP of EC2 instance/on-premises host>

自變數 **-T-p 22-n ** 會在連接埠 22 上執行以 TCP 為基礎的追蹤。

**注意:**您可以使用應用程序特定的連接埠進行測試。使用特定連接埠來瞭解路徑中是否有任何中繼裝置會中斷您的應用程式流量。

使用 Hping3 測試效能

Hping3 是指令行導向的 TCP/IP 封包彙編程式和分析器,可測量 TCP 連線上的端對端封包遺失和延遲。除了 ICMP 回應請求之外,hping3 還支援 TCP、UDP 和 RAW-IP 通訊協定。Hping3 還包括一個跟踪路由模式,可以在覆蓋的通道之間發送文件。Hping3 旨在掃描主機,協助進行滲透測試,測試入侵檢測系統以及在主機之間發送文件。

MTR 和跟踪路由擷取每個躍點延遲。但是,hping3 產生的結果顯示除了封包丟失之外,TCP 的端到端最小/平均/最大延遲。若要安裝 hping3,請執行下列命令:

Amazon Linux 2。安裝適用於 RHEL 7 的 EPEL 發行套件,然後啟動 EPEL 儲存庫

sudo amazon-linux-extras install epel -y

Amazon Linux 2:

sudo yum --enablerepo=epel install hping3

Ubuntu:

sudo apt-get install hping3

下列命令會透過連接埠 0 傳送 50 個 TCP SYN 封包。根據預設,hping3 將 TCP 標頭發送到目標主機的連接埠 0,窗口大小為 64 且沒有 TCP 標誌:

sudo hping3 -S -c 50 -V <Public IP of EC2 instance/on-premises host>

下列命令會透過連接埠 22 傳送 50 個 TCP SYN 封包:

sudo hping3 -S -c 50 -V <Public IP of EC2 instance/on-premises host> -p 22

**注意:**請確定連接埠 22 或您要測試的連接埠已開啟。

使用 tcpdump 測試封包擷取範例

診斷封包遺失/延遲問題時,最佳做法是在 EC2 執行個體和內部部署主機上同時執行封包擷取。這樣做有助於識別請求和響應封包,以便我們可以在網路和應用程式層隔離問題。這也是首先啟動封包擷取,然後啟動流量的最佳作法。這有助於擷取流程的所有封包。若要安裝 tcpdump,請執行下列命令:

Amazon Linux:

sudo yum install tcpdump

Ubuntu:

sudo apt-get install tcpdump

安裝** tcpdump **之後,您可以執行下列命令來擷取 tcp 連接埠 22 的流量,並將其儲存在 pcap 檔案中。

sudo tcpdump -i eth0 port 22 -s0 -w samplecapture.pcap

**注意:****tcpdump ** 旗標 -i 會指定 tcpdump 擷取流量之執行個體上的介面。您可能需要將介面從 ** eth0 **變更為環境中已設定的介面。

Windows 效能的疑難排解

檢查 ECN 功能

1.    執行下列命令以判斷是否已開啟明確擁塞通知 (ECN) 功能:

netsh interface tcp show global

2.    如果已啟動 ECN 功能,請執行下列命令將其停用:

- netsh interface tcp set global ecncapability=disabled

3.    如果您看不到效能的改善,可以使用下列指令重新啟動 ECN 功能:

netsh interface tcp set global ecncapability=enabled

檢閱躍點並疑難排解 TCP 連接埠連線

首先,使用 MTR 或 tracert 來審查躍點:

MTR 方法:

1.    下載並安裝WinMTR

2.    在主機部分輸入目標 IP,然後選擇 Start(開始)。

3.    讓測試運行一分鐘,然後選擇 Stop(停止)。

4.    選擇將**文字複製到剪貼簿,**然後將輸出貼到文字檔案中。

5.    在 % 資料欄中尋找傳輸至目標的任何遺失。

注意:忽略沒有來自主機訊息的回應的任何躍點。此訊息表示這些特定躍點沒有回應 ICMP 探查。

6.    使用由下而上的方法檢查 MTR 報告上的躍點。例如,檢查最後一個躍點或目標的遺失,然後檢閱前面的躍點。

Tracert 方法:

如果您不想安裝 MTR,可以使用 tracert 命令公用程式工具。

1.    對目標 URL 或 IP 地址執行 tracert

2.    尋找任何在往返時間 (RTT) 中顯示突然尖峰的躍點。RTT 突然尖峰可能表示節點處於高負載狀態,進而導致流量中的延遲或封包掉落。

注意:-d 選項不會將 IP 地址解析為主機名稱。如果需要解析主機名稱的 IP,請移除-d。

tracert -d <Public IP of EC2 instance/on-premises host>

然後,檢查 TCP 連接埠的連接。

注意:因為 WinMTR 和追蹤程式都是以 ICMP 為基礎的,因此您可以使用 tracetcp 來疑難排解 TCP 連接埠連線的問題。

1.    下載 WinPcaptracetcp

2.    解壓縮 tracetcp 壓縮檔案。

3.    將 ** tracetcp.exe 複製**到您的 C 磁碟機。

4.    安裝 WinPcap。

5.    使用 *C:\Users\username>cd * 命令開啟命令提示字元,並將 WinPCap 根目錄至您的 C 磁碟機。

6.    使用以下命令運行 tracetcptracetcp.exehostname:porttracetcp.exe ip:port

檢查 Windows Task Manager

如果您可以存取來源執行個體或目標執行個體,請檢查 Windows Task Manager。尋找 CPU 和記憶體使用率或負載平均值的問題。

採取封包捕獲

**注意:**診斷封包遺失或延遲問題時,最佳做法是在 EC2 執行個體和內部部署主機上同時執行封包擷取。這有助於識別請求和回應封包,以隔離網路和應用程式層的問題。這也是首先啟動封包擷取,然後啟動流量的最佳做法。這有助於擷取流程的所有封包。

1.    安裝 Wireshark 並採取封包捕獲。

2.    使用下列篩選器隔離封包擷取中特定來源之間的流量:(ip.addr eq source_IP) &&(tcp.flags.syn == 1)。輸出會顯示由該來源 IP 起始的所有 tcp 串流。

3.    選取具有相關來源 IP 和目標 IP 的資料列。

4.    選擇內容 (按一下滑鼠右鍵) 功能表,然後選擇 Follow(遵循)和 TCP Stream(TCP 串流)。這會導致您要調查的來源 IP 和目標 IP 之間產生 TCP 流程。

5.    尋找重新傳輸、重複封包或 TCP 視窗大小通知,例如 TCP 視窗已滿Window 大小為零。這些通知可能表示 TCP 緩衝區空間不足。

如果您發現封包遺失,或是您的基準測試中的躍點數量有很大變化,請參閱您的網路設備廠商說明文件。如果在多重目錄網路環境中工作,請使用不同的 ISP 執行這些測試。


相關資訊

Linux 上的增強型網路

Windows 上的增強型網路

AWS 官方
AWS 官方已更新 1 年前