我发现我的 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:
要安装 WinMTR,请访问 SourceForge 网站。
注意: 对于 Windows 操作系统(OS),WinMTR 不支持基于 TCP 的 MTR。
在您的 EC2 实例和本地主机的私有和公有 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 操作系统上的 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 限制而失败?