是否可以捕获路由器的数据包?

是否可以捕获路由器的数据包?

我遇到一个问题,即从内部网络发送到互联网的一些数据包丢失了。我们使用的模式如下:

  Client A ←→ Switch A ← Router A:NAT ← .. Network .. 
     → Router B:NAT → Switch B ←→ Server B

我想要执行以下两个步骤来跟踪该问题:

  1. 在路由器 B 上捕获来自客户端 A 的数据包。
  2. 检查路由器B的转换表。

这两种操作都可以实现吗?

更多信息:

  1. 客户端 A 运行的是 Windows XP
  2. 服务器 B 运行在 Linux(确切的说是 Fedora)上。
  3. 路由器 B 使用静态端口和地址转换表,这意味着
    到达特定端口的传入数据包将被转发到服务器 B。
  4. 路由器A和路由器B都是TPLink WR340+产品。
  5. 路由器 A 和路由器 B 都具有全锥型 NAT。
  6. 交换机A是DLink DES-1024R,交换机B是DLink DES-1016D。

之所以要做这两个动作,是因为我们发现客户端A的网口发出了数据包,但是客户端A机器的TCP内核不知何故一直收不到对端的ACK包,所以一直进入数据传输状态直到超时。而从服务器端看,同样使用WireShark工具发现服务器B机器的网口一直收不到客户端A发来的数据包。我猜是路由器B丢了数据包,所以我想知道在路由器B上能不能抓包。

实际上,只有当我们有两个客户端时才会发生此问题,比如客户端 A 和客户端 C。客户端 A 和客户端 C 不直接相互通信,而是与服务器 B 通信。

问题出现的时候我们拔掉客户端A机器的网线,在另一台机器上登录客户端A,大约30秒后,新机器上的客户端A会和服务器B开始TCP通讯,前几个命令都没问题,但是之后服务器就收不到客户端A的任何命令了。

答案1

服务器 B 从未收到数据包

如果您从服务器 B 运行 Wireshark 是可以的;如果不行,请考虑您需要一个管理型交换机,配置一个“镜像/跨度/监控”端口,以便连接到 Wireshark 的 PC。

我会坚持使用 Wireshark 移动它来查看路由器 B 和交换机 B 之间的数据包(您可以在它们之间添加一个集线器来插入 wireshark 的 PC 吗?)

如果数据包没有到达段 RouterB-SwitchB,那么路由器 B 上的端口转发(为了绕过其 NAT 服务)可能无法正常工作,或者路由器没有路由您的流量。

答案2

我认为获取更多信息很重要,交换机不执行 NAT(但路由器执行),并且不同的路由器具有截然不同的功能。我从未听说过在提到交换机或路由器时使用“检查转换表”这个术语,但我明白您所说的关于路由器的意思。

您很可能会发现,了解 NAT 和检查转换表等知识的价值远低于使用简单的网络工具。我将使用的第一个工具是客户端 A 中的“WinMTR”。让它运行一小会儿(几分钟?),看看是否发生数据包丢失以及在何处发生数据包丢失。这将让您非常清楚需要进一步查看哪些地方。[如果您知道要查看什么,查看延迟和延迟峰值也会给您一些提示]。

为了得到更多帮助,您可能需要提供更多详细信息,说明您认为数据包丢失的原因以及问题的特征。

答案3

这里概述了一些想法,也许其他人知道如何详细地做到这一点。

使用linux机器路由器。

也许 Tomato 或 DDWRT 可以。因此,如果您的路由器支持该固件/如果您购买了支持该固件的路由器,您可以尝试一下。

您评论了"The reason why I want to perform the two actions is that we found packets were sent out of the network interface of ClientA, but due to unknown reason the TCP kernel of ClientA machine never receives any ACK packet from the other endpoint, thus it enters data transmission until timeout. And from the server side, also using Tool WireShark we found the network interface of Server B machine never receives the packet sent from client A, of course it was not able to send any ACK packet back to ClientA."

也许路由器损坏了,或者你的电缆有故障。

我喜欢关于如何查看路由器上正在发生的事情的有趣想法,使用更高级的路由器或更好的固件可能可以实现这一点。但如果您可以/想要这样做,那么您可能需要或需要一个更好的路由器,或者尝试更换一个。不要忽视基本的故障排除技术、猴子类型的逻辑,例如更换零件!

是不是只有一种方式有问题?比如 A->B。还是 B->A?您可以在那里排除一些故障,比如交换电缆。交换它们连接的端口。

相关内容