我在一台服务器上工作,它正在对另一台服务器进行健康检查,就像一个简单的tcp开放连接一样,基本上我的tcpdump说数据包(健康检查tcp sYn数据包)正在从我的接口出去,但是,防火墙没有看到任何东西。我怀疑这个数据包是否在服务器之外,或者问题在交换机上。
tcpdump有可能出现假阴性(即数据包发送了但tcpdump没有记录)。这可能是由于硬件(CPU, RAM, 磁盘)已达到最大,或者tcpdump的缓冲区大小(-B
)太小了。同样,也有可能是你的防火墙没有在该接收的地方接收到它。
tcpdump报假阳性的可能性很小。Tcpdump 从您的网络接口[0]复制字节,并将它们汇总到文本行中(取决于您的输出选项)。如果防火墙规则(例如 iptables
的防火墙规则会阻止流量,tcpdump 不见得. 如果tcpdump报告了一个数据包,你可以确定它经过了那个接口。
[0]: 如果你想知道更低级别的tcpdump是如何工作的,可以用... 菌丝.
要弄清网络中数据包的丢弃位置,可能需要基于流量的故障排除。对于您的网络 server:A <-> B:switch:C <-> D:Firewall
,我们知道A发送,D没有收到。因此应该检查B和C端口,确定丢包的位置。也有可能是D报的是假阴性。你可以把这个服务器直接插到不同的防火墙上,可以接受数据包捕获监测流量,来测试这两件事。