跳至內容

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

4 分的閱讀內容
0

我想要對 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體與網際網路閘道上的內部部署主機之間存在的封包遺失或延遲問題進行疑難排解。

簡短說明

若要診斷網路問題 (例如封包遺失或延遲),請先測試網路以隔離問題來源。在疑難排解問題之前,最佳實務是對效能結果進行效能評定

先決條件:

解決方法

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

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

檢閱 traceroute 或 MTR 報告

使用自下而上的方法檢閱路由跟踪路由或 MTR 報告上的躍點。在自下而上的方法中,請先檢查最後一個躍點或目的地的遺失,然後檢閱前面的躍點。

  • 如果封包遺失或延遲問題持續透過最後一個躍點,則可能是網路或路由發生問題。
  • 如果該節點有控制平面速率限制,路徑中某個躍點可能會發生封包遺失或延遲。
  • 檢查報告的最後一個躍點是否為命令中註明的目標。如果未註明最後一個躍點,則可能是由限制性安全群組引起的問題。

使用 AWSSupport-SetupIPMonitoringFromVPC 測試性能

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

Linux 執行個體效能疑難排解

檢查 Linux 性能統計信息

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

使用 MTR 測試效能

Linux MTR 命令可提供持續和更新的輸出。此診斷工具結合了跟踪路由和 ping 公用程式的功能。此工具的輸出可讓您分析網路效能。大多數 Linux 發行版都預先安裝了跟踪路由和 MTR。您也可以從發行版的軟體套件管理員下載 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 時間」訊息被捨棄。如果您發現目標躍點持續遺失封包,或是數個躍點上的封包遺失,此遺失可能表示有問題。

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

使用公有 IP EC2 執行個體內部部署主機取代 PUBLIC_IP

基於 ICMP 的 MTR:

mtr -n -c 200 PUBLIC_IP --report

基於 TCP 的 MTR:

mtr -n -T -c 200 PUBLIC_IP --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 -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

基於 TCP 的跟踪路由:

sudo traceroute -n -T -p 22 PUBLIC_IP

引數 -T -p 22 -n 會在連接埠 22 上執行 TCP 追蹤。

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

使用 Hping3 測試效能

Hping3 是命令行 TCP/IP 封包彙編程式和分析器,可測量 TCP 連線上的端對端封包遺失和延遲。請在 Die.net 網站下載 hping3

除了 ICMP 回應請求之外,hping3 還支援 TCP、UDP 和 RAW-IP 通訊協定。Hping3 還包括 traceroute 模式,可以在覆蓋的通道之間傳送檔案。Hping3 可以掃描主機,協助進行滲透測試,測試入侵偵測系統以及在主機之間傳送檔案。

MTR 和 traceroute 會擷取每個跳轉延遲。但是,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

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

sudo hping3 -S -c 50 -V PUBLIC_IP -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. 從 Sourceforge.net 網站下載並安裝 WinMTR
  2. 主機區段輸入目標 IP,然後選擇開始
  3. 讓測試運行一分鐘,然後選擇停止
  4. 選擇將文字複製到剪貼簿,然後將輸出貼到文字檔案中。
  5. % 資料欄中尋找傳輸至目標的任何遺失。
    注意:忽略沒有來自主機訊息的回應的任何躍點。此訊息表示這些特定躍點沒有回應 ICMP 探查。
  6. 使用由下而上的方法檢閱 MTR 報告上的躍點。例如,檢查最後一個躍點或目的地的遺失,然後檢閱前面的躍點。

Tracert 方法:
如果您不想安裝 MTR,請使用 tracert 命令公用程式工具。

  1. 對目的地網址或 IP 地址執行 tracert

  2. 尋找任何在往返時間 (RTT) 中顯示突然尖峰的躍點。RTT 突然激增可能表示有節點處於高負載狀態。此負載會導致流量延遲或封包下降。
    注意:-d 選項不會將 IP 地址解析為主機名稱。如果需要解析主機名稱的 IP,請移除-d。

    tracert -d PUBLIC_IP

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

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

  1. 從 NetworkHunt.com 網站下載 tracetcp 壓縮檔案
  2. 解壓縮 tracetcp 壓縮檔案。
  3. tracetcp.exe 複製到您的 C: 磁碟機。
  4. 從 WinPcap.org 網站下載並安裝 WinPcap
  5. 使用 C:\Users\username>cd 命令開啟命令提示字元,並將 WinPcap 根目錄至您的 C 磁碟機。
  6. 若要執行 tracetcp,請使用下列命令:
    tracetcp.exehostname:port
    -或-
    tracetcp.exe ip:port

檢查 Windows Task Manager

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

採取封包捕獲

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

  1. 從 Wireshark.org 網站下載並安裝 Wireshark。然後,執行封包擷取。
  2. 使用下列篩選器隔離封包擷取中特定來源之間的流量:(ip.addr eq source_IP) &&(tcp.flags.syn == 1)
    輸出會顯示由該來源 IP 起始的所有 tcp 串流。
  3. 選取具有相關來源 IP 和目標 IP 的資料列。
  4. 選擇內容 (按一下滑鼠右鍵) 功能表,然後選擇遵循TCP 串流。此動作會導致您要調查的來源 IP 和目標 IP 之間產生 TCP 流程。
  5. 尋找重新傳輸、重複封包或 TCP 視窗大小通知,例如 TCP 視窗已滿Window 大小為零。這些通知可能表示 TCP 緩衝區空間不足。

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

AWS 官方已更新 1 年前