我看到 AWS 虛擬私有網路 (AWS VPN) 連線遇到持續或間歇性的封包遺失和高延遲問題。我想知道要執行哪些測試以確認我的 Amazon Virtual Private Cloud (Amazon VPC) 內部沒有發生此問題。
簡短描述
封包遺失的原因會因 AWS VPN 網際網路流量在內部部署網路和 Amazon VPC 之間的移動而有所不同。隔離並確認封包遺失的來源是最佳實務。
解決方法
若要確定您是否達到網路限制,請檢查來源和目的地主機是否有資源使用率問題。您可以在諸如 CPUUtilization、NetworkIn 和 NetworkOut 或 NetworkPacketsIn 和 NetworkPacketsOut 等值中找到資源使用問題。
使用 MTR 檢查 ICMP 或 TCP 封包遺失和延遲
MTR 提供持續更新的輸出,可讓您分析一段時間內的網路效能。它在單一網路診斷工具中結合了 traceroute 和 ping 的功能。若要檢查 ICMP 或 TCP 封包遺失和延遲,請在 VPC 中的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上安裝 MTR 網路工具。
Amazon Linux:
sudo yum install mtr
Ubuntu:
sudo apt-get install mtr
Windows:
請參閱 SourceForge 網站以安裝 WinMTR。
**注意:**對於 Windows 作業系統 (OS),WinMTR 不支援以 TCP 為基礎的 MTR。
在用於 EC2 執行個體和內部部署主機的私有 IP 地址與公有 IP 地址之間執行下列測試。因為 TCP/IP 網路上節點之間的路徑可能會在方向反轉時變更,因此可從兩個方向取得 MTR 結果。
在執行測試之前,請檢查下列組態:
- 確定安全群組和網路存取控制清單 (網路 ACL) 規則允許來自來源執行個體的 ICMP 流量。
- 確定目的地執行個體上的測試連接埠已開啟。確認安全群組和網路 ACL 規則允許來自通訊協定和連接埠上來源的流量。
以 TCP 為基礎的結果會確定連線上是否有以應用程式為基礎的封包遺失或延遲。MTR 版本 0.85 及更高版本具有 TCP 選項。
私有 IP 地址 EC2 執行個體內部部署主機報告:
mtr -n -c 200
私有 IP 地址 EC2 執行個體內部部署主機報告:
mtr -n -T -c 200 -P 443 -m 60
公有 IP 地址 EC2 執行個體內部部署主機報告:
mtr -n -c 200
公有 IP 地址 EC2 執行個體內部部署主機報告:
mtr -n -T -c 200 -P 443 -m 60
使用 traceroute 確定延遲或路由問題
Linux traceroute 公用程式可識別從用戶端節點到目的地節點的路徑。該公用程序會記錄每個路由器回應請求的時間 (以毫秒為單位)。traceroute 公用程式還會計算每個跳轉到達目的地之前所花費的時間量。
部分逾時的要求是常見現象,因此請檢查封包遺失到目的地或路由的最後一個跳轉。數個跳轉上的封包遺失可能表示有問題。
**注意:**最佳實務是從用戶端執行 traceroute 命令到伺服器。然後,從服務器執行命令返回到客戶端。
若要安裝 traceroute,請執行下列命令:
Amazon Linux:
sudo yum install traceroute
Ubuntu:
sudo apt-get install traceroute
若要測試 EC2 執行個體和內部部署的私有 IP 地址,請執行下列命令:
Amazon Linux:
sudo traceroutesudo traceroute -T -p 80
Windows:
tracerttracetcp
**注意:**這些命令會在連接埠 80 上執行以 TCP 為基礎的追蹤。確認您有連接埠 80 或您正在測試兩個方向開啟的連接埠。
如果您使用 Linux,請使用 traceroute 選項來指定以 TCP 為基礎的追蹤,而不是 ICMP。這是因為大多數網際網路裝置會取消 ICMP 追蹤要求的優先順序。
使用 hping3 判斷端對端 TCP 封包遺失和延遲問題
die.net 網站上的 Hping3 是命令行 TCP/IP 封包彙編程式和分析器,可測量 TCP 連線上的端對端封包遺失和延遲。
MTR 和 traceroute 會擷取每個跳轉延遲。但是,hping3 結果顯示 TCP 的封包遺失和端對端最小、最大和平均延遲。若要安裝 hping3,請執行下列命令:
Amazon Linux:
sudo yum --enablerepo=epel install hping3
Ubuntu:
sudo apt-get install hping3
執行下列命令:
hping3 -S -c 50 -V <Public IP of EC2 instance or on-premises host>
hping3 -S -c 50 -V <Private IP of EC2 instance or on-premises host>
**注意:**依預設,hping3 將 TCP 標頭傳送到目標主機的連接埠 0,winsize 為 64 且沒有 tcp 旗標。
使用 tcpdump 或 Wireshark 的封包擷取範例
複製問題時,在 VPC 中的測試 EC2 執行個體和內部部署主機之間執行同時封包擷取。這有助於判斷 VPN 連線上是否有任何應用程式或網路層問題。若要執行封包擷取,您可以在 Linux 執行個體上安裝 tcpdump,或在 Windows 執行個體上安裝 Wireshark。
Amazon Linux 上的 tcpdump:
sudo yum install tcpdump
在 Ubuntu 上安裝 tcpdump:
sudo apt-get install tcpdump
Windows OS 上的 Wireshark:
若要安裝 Wireshark,請參閱 Wireshark 網站。然後,執行封包擷取。
關閉 ECN
如果您開啟明確擁塞通知 (ECN),則當您連線到 Windows 執行個體時,可能會造成封包遺失或效能問題。若要改善效能,請關閉 ECN。
若要判斷 ECN 是否已開啟,請執行下列命令:
netsh interface tcp show global
如果 ECN 功能已開啟,請執行下列命令將其關閉:
netsh interface tcp set global ecncapability=disabled
相關資訊
如何對 VPC 中 Amazon EC2 Linux 執行個體和網際網路閘道上內部部署主機之間的網路效能問題進行疑難排解?
如何判斷我對 Amazon 提供的 DNS 伺服器的 DNS 查詢是否因為 VPC DNS 限流而失敗?