当您可以在第 3 层交换机的接口上使用 TCPdump 来分析数据包时,为什么我们需要使用镜像功能并在该接口上复制数据包,以便将其发送到 CPU 或另一个交换机分析器?这与使用 tcpdump 有何不同?
答案1
如果您只想捕获两个端点主机之间的流量和一般的多播/广播流量,则可以tcpdump
在其中一个主机上运行。
但是,这并不总能让您真正了解“在线路上”发送和接收的内容,因为有时 NIC 硬件或驱动程序或网络堆栈的较低层会在数据包发送到嗅探器应用程序之后,但在实际通过网络发出之前,对传输的数据包进行干扰,并且它们可能会在接收到的数据包发送到嗅探器应用程序之前对它们进行类似的操作。各种硬件卸载(如硬件校验和、传输分段卸载 (TSO) 和大型接收卸载 (LRO))都以此而闻名。
因此,如果您想要更准确地了解网络上到底发生了什么,您需要在单独的机器上运行嗅探器。但是任何交换机,即使是便宜的非托管第 2 层交换机,也不会将单播流量发送到非目的地端口。因此,您的独立嗅探器机器无法看到目标主机之间的单播流量。这就是端口镜像的作用所在。您基本上是在告诉托管交换机,您希望所有往返于目标端口的流量也转到镜像端口,然后将嗅探器连接到镜像端口,以便它可以监听所有流量。
在集线器时代,这并不是必需的,因为集线器是愚蠢的中继器,会盲目地将所有流量转发到所有端口。但在 100Mbit“快速”以太网 (100BASE-TX) 的早期,集线器已不再受欢迎,而千兆以太网 (1000BASE-T) 根本不允许使用集线器;千兆以太网始终是交换式的。
编辑后补充:我刚刚意识到我可以用两种不同的方式解读你的问题。如果你说的是托管交换机内部运行 tcpdump,那么这通常“足够好”以独立查看实际通过网络传输的内容,只要你的交换机本身不是测试或目标流量的一部分。例如,如果你正在调试交换机参与的协议,如生成树或 PTP 或端口聚合,那么你可能不想相信交换机对所发生情况的内部视图。