Ishita 帮助您排查
实例与
本地主机之间的问题

ishita_network_issue_vpc_onprem_ig

我看到我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例与我的本地主机之间通过 Internet 网关传输的数据包存在丢失或延迟问题。如何排查网络性能问题?

要诊断数据包丢失或延迟等网络问题,请先测试网络以隔离问题的根源。以下步骤可帮助您确定问题的根源是网络还是应用程序。

在开始排查问题之前,请检查以下事项:

  • 确保在两个终端节点(EC2 实例和本地主机)上均已安装网络实用程序。
  • 使用支持增强型联网的 EC2 实例,并确保驱动程序是最新的。增强型联网能提供更高的 I/O 和低 CPU 占用率,这有助于在执行性能测试时避免实例级问题。如果未启用增强型联网,请参阅在实例上启用增强型联网
  • 连接到您的 Linux 实例以访问实例,确保您的 EC2 实例与本地主机之间存在端到端连接。

安装以下工具以帮助排查故障并测试您的网络:

  • AWSSupport-SetupIPMonitoringFromVPC:用于收集各种网络指标,如丢包、延迟、MTR、tcptraceroute 和 tracepath。
  • MTR:用于检查 ICMP 或 TCP 数据包丢失和延迟问题。
  • Traceroute:用于确定延迟或路由问题。
  • Hping3:用于确定端到端 TCP 数据包丢失和延迟问题。
  • Tcpdump:用于分析数据包捕获示例。

使用自下而上的方法检查 traceroute 或 MTR 报告中的跃点。例如,检查最后一个跃点/目标处的丢失,然后查看以下跃点。如果数据包丢失或延迟问题延续到最后一个跃点处,则可能存在网络或路由问题。如果您仅在路径中的一个跃点上发现数据包丢失/延迟,则该节点上的控制平面速率限制可能存在问题。检查报告的最后一个跃点是否是命令中指明的目标。如果不是,则可能存在由限制性安全组引起的问题。

使用 AWSSupport-SetupIPMonitoringFromVPC 测试性能

此内置工具可以收集排查网络故障所需的诸多指标。有关更多信息,请参阅 Debugging tool for network connectivity from Amazon VPC

使用 MTR 测试性能

Linux MTR 命令可以提供持续更新的输出,支持您分析网络性能。此诊断工具结合了 traceroute 和 ping 实用程序的功能。大多数 Linux 发行版都附带安装了 traceroute 和 MTR。此外,您也可以从您使用的发行版的软件包管理器中下载该实用程序。

要安装 MTR,请运行以下命令:

Amazon Linux:

sudo yum install mtr

Ubuntu:

sudo apt-get install mtr

要使用 MTR 测试网络性能,请在 EC2 实例的公有 IP 地址与本地主机之间双向运行此测试。如果方向反转,TCP/IP 网络上的节点之间的路径可能会发生变化。因此,获得两个方向的 MTR 结果非常重要。您可以使用基于 TCP 的跟踪而非 ICMP,因为大多数 Internet 设备都不会优先处理基于 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 选项指定的周期数。打印统计信息,然后退出。

注意:某些版本的 MTR 存在已知问题,如果使用 TCP,则最终跃点报告的值不正确。

使用 traceroute 测试性能

Linux traceroute 实用程序会识别从客户机节点到目标节点的路径。该实用程序会记录每个路由器响应请求的时间(以毫秒为单位)。该实用程序还会计算每个跃点到达目标之前所需的时间。

要安装 traceroute,请运行以下命令:

Amazon Linux:

sudo yum install traceroute

Ubuntu:

sudo apt-get install traceroute

注意:如果已执行 MTR 报告,则无需使用 traceroute。MTR 向目标提供延迟和数据包丢失统计信息。

确保您在两个方向上都打开了端口 22 或正在测试的端口。如果您使用 traceroute 排查网络连接问题,请在两个方向上运行命令:从客户端到服务器,然后从服务器再回到客户端。如果方向反转,TCP/IP 网络上的节点之间的路径可能会发生变化。请使用基于 TCP 的跟踪而非 ICMP,因为大多数 Internet 设备都不会优先处理基于 ICMP 的跟踪请求。

基于 ICMP 的 traceroute:

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

基于 TCP 的 traceroute:

sudo traceroute -T -p 22 –n <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 协议。hping 还包括 traceroute 模式,可以在覆盖通道之间发送文件。Hping3 设计用于扫描主机、协助渗透测试、测试入侵检测系统以及在主机之间发送文件。

MTR 和 traceroute 会捕获每跃点延迟。但是,除了数据包丢失之外,hping3 还会生成更多结果,显示 TCP 上的端到端最小/平均/最大延迟。要安装 hping3,请运行以下命令:

Amazon Linux:

sudo yum --enablerepo=epel install hping3

Ubuntu:

sudo apt-get install hping3

以下命令通过端口 0 发送 50 个 TCP SYN 数据包。默认情况下,hping3 将 TCP 标头发送到目标主机的端口 0,其窗口大小为 64,并且不带 TCP 标记:

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

以下命令通过端口 22 发送 50 个 TCP SYN 数据包:

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

如果您在网络中发现数据包丢失,请参阅供应商文档,以获取有关如何检查网络设备以进行分析和问题排查的说明。如果您采用多宿主方式,请通过其他 Internet 服务提供商 (ISP) 执行这些测试,然后比较结果。


此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS Support 中心

发布时间:2017 年 10 月 26 日

更新时间:2019 年 2 月 14 日