如何排查我的 Direct Connect 连接的数据包丢失问题?

上次更新日期:2021 年 12 月 23 日

我正在使用 AWS Direct Connect 传输数据。在将数据传输到我的 Amazon Elastic Compute Cloud(Amazon EC2)实例时,遇到了数据包丢失的情况。如何排查数据包丢失问题?

简短描述

当传输的数据包未能到达目的地,从而导致网络性能问题时,就会发生数据包丢失。数据包丢失是由目的地信号强度低、系统利用率过高、网络拥塞和网络路由配置错误造成的。

解决方法

对您的网络设备和 Direct Connect 连接运行以下检查。

检查 AWS Personal Health Dashboard 中以了解计划维护或事件

AWS Personal Health Dashboard 将显示相关信息,并提供活动通知。有关详细信息,请参阅 如何获取 Direct Connect 计划维护或事件的通知?

检查 Direct Connect 端点、客户网关(CGW)和中间设备(第 1 层)的指标

对于 CGW 和中间设备,问题可能是本地网络或通往 AWS 的传输路径的局部问题。检查本地节点和中间设备上的以下各项:

  • 接口翻动的 CGW 日志。
  • 出现问题时 CGW 的 CPU 使用率。
  • Direct Connect 连接终止时设备上的光信号读数。
  • Direct Connect 连接因输入错误、递增帧错误、循环冗余(CRC)错误、残损、巨量和节流而终止的设备。

检查 Direct Connect 连接指标(第 1 层)

检查以下 Direct Connect 指标:

  • ConnectionErrorCount:应用总和统计数据,并注意非零值表示 AWS 设备上的 MAC 级别错误。
  • ConnectionLightLevelTX 和 ConnectionLightLevelRX:检查问题发生时 Direct Connect 连接上记录的光信号。可接受的范围在 -14.4 到 2.50 dBm 之间。
  • ConnectionBpsEgress 和 ConnectionBpsIngress:检查因链路拥塞而丢失数据包时,Direct Connect 连接上的流量。

有关详细信息,请参阅 Direct Connect 连接指标

检查非对称次优路由(第 3 层)

如果内部防火墙执行单播反向路径转发,导致网络流量下降,非对称路由会导致数据包丢失。本地网络的次优路由也可能会导致数据包丢失。

有关详细信息,请参阅如何解决在 Transit Gateway 中创建 VPN 作为 Direct Connect 的备份时出现的非对称路由问题?

本地主机与 AWS 主机之间的端到端双向跟踪路由(第 3 层)

在主机之间运行跟踪路由可确定两个方向上的网络路径。跟踪结果还可确定路由是否非对称、负载均衡等。

1.    运行以下命令以安装 traceroute:

Linux:

 sudo yum install traceroute

Ubuntu:

sudo apt-get install traceroute

2.然后,为 ICMP 跟踪路由运行类似以下内容的命令:

sudo traceroute -T -p <destination Port> <IP of destination host>

Windows 操作系统:

1.    下载 WinPcaptracetcp

2.    提取 Tracetcp 压缩文件。

3.    将 tracetcp.exe 复制到 C 盘。

4.    安装 WinPcap。

5.    打开命令提示符,使用 C:\Users\username>cd \ 命令从根 WinPcap 进入 C 驱动器。

6.    使用以下命令运行 tracetcp:tracetcp.exe hostname:porttracetcp.exe ip:port

本地主机与 AWS 主机之间的端到端双向 MTR 测试(第 3 层)

MTR 测试与 traceroute 类似,允许发现主机之间网络连接路径中的每台路由器。MTR 测试还提供有关路径中每个节点的信息,例如数据包丢失。

检查 MTR 结果以了解数据包丢失和网络延迟情况。跃点处的网络丢失百分比可能表示路由器存在问题。一些服务提供商限制 MTR 使用的 ICMP 流量。要确定数据包丢失是否是由于速率限制造成的,请查看后续跃点。如果后续跃点显示数据包丢失 0.0%,表明 ICMP 速率受到限制。

1. 运行以下命令以安装 MTR:

Amazon Linux/REHEL:

$ sudo yum install mtr -y

Ubuntu:

sudo apt install mtr -y

Windows 操作系统:

下载并安装 WinMTR

注意:对于 Windows 操作系统,WinMTR 不支持基于 TCP 的 MTR。

2.       对于本地 --> AWS 方向,请在本地主机上运行 MTR(基于 ICMP 和 TCP):

$ mtr -n -c 100 <private IP of EC2> --report
$ mtr -n -T -P <EC2 instance open TCP port> -c 100 <private IP of EC2> --report

3.    对于 AWS --> 本地方向,请在 EC2 实例上运行 MTR(基于 ICMP 和 TCP):

$ mtr -n -c 100 <private IP of the local host> --report
$ mtr -n -T -P <local host open TCP port> -c 100 <private IP of the local host> --report

查看本地主机与 AWS 主机之间的路径 MTU(第 3 层)

最大传输单位(MTU)是允许通过网络连接传递的最大数据包大小。路径 MTU 发现(PMTUD)确定 MTU 路径。如果数据包太大,可能会发生数据包丢失。有关详细信息,请参阅 路径 MTU 发现

您可以使用跟踪路径检查两台主机之间的路径 MTU

1.  对于本地 --> AWS 方向,请从本地主机在端口 80 上运行跟踪路径:

$ tracepath -n -p 80 <EC2 private instance IP>
2.对于 AWS --> 本地方向,请从 EC2 实例在端口 80 上运行跟踪路径:

$ tracepath -n -p 80 <private IP of local host>