识别丢失的 TCP 数据包

网络工程 防火墙 通讯协议 检查站
2021-07-20 18:34:11

我需要一些帮助来识别 TCP 流中丢失的数据包。

我的场景:

我有一个应用层防火墙,我可以在其中过滤特定的网站和应用程序。

当我从 IP 为 172.16.11.3/16 的客户端访问一个简单的网站时,我的防火墙将正确识别我访问的网站。

当我将此客户端的 IP 地址更改为 172.16.10.3/16 时,我的防火墙将不再识别该网站。

请注意,一切都保持不变,唯一的区别是 IP 中的一个八位字节。

为了找到问题,我在防火墙上进行了数据包捕获,我可以看到确实存在差异。从非工作 IP 中,我在与工作 IP 无关的序列中遗漏了一个单独的 TCP 数据包。

以下是有问题的数据包为蓝色的屏幕截图:

Wiresharp 捕获

我的假设是防火墙在 TCP 流中缺少数据包,因此无法正确识别应用程序。

我的问题:谁能告诉我我的假设是否可行,谁能猜出是什么导致 TCP 流看起来不同?我的钱花在客户端和防火墙之间有问题的核心交换机上。

编辑添加:

  • 在防火墙进程获取流量之前,我在防火墙的内部接口上捕获了流量。防火墙的配置或类型不应相关。最重要的是,我可以在连接到镜像端口的不同防火墙上复制此行为。

  • Networktopo 非常简单:Client 10.3 or 11.3 <- Client Network 172.16.0.0/16 -> L3 Core <- Transportnetwork 172.20.5.0/24 -> Firewall

  • 捕获日志记录未按预期工作且我的数据包丢失的情况:https : //www.cloudshark.org/captures/8d271219db64

  • 捕获按预期记录流量的位置:https : //www.cloudshark.org/captures/960191af2a44

2个回答

防火墙的配置或类型不应相关

在没有更多信息(例如所涉及的硬件及其配置)的情况下,我的猜测是故障配置有关。也许这两个地址包含在两个不同的规则中。一种进行 DNS 查找,另一种不进行。

正如他们所说,最简单的答案通常是正确的。

回答你的问题(不是失败的原因)

两次捕获之间的数据包计数差异并不意味着有问题。第一次捕获 (103_chak..) 中的数据包 10 是一个 ACK​​,它搭载在另一个数据包中。第二次捕获中的数据包 7 (113_chak..) 只是先前接收到的数据的空 ACK。

第一次捕获中搭载的原因是 HTTP GET(数据包 10)在收到数据包后 20 毫秒发送。在第二次捕获中没有捎带,因为 HTTP GET 是在收到数据包后近 2 秒(非常长的时间)发送的,因此在此之前需要一个空的 ACK。

如果您查看两个捕获中的最后一段 SEQ/ACK 编号,它们是相同的。这意味着在一天结束时两个会话发送了相同数量的数据,只有一个会话有一个额外的数据包。