TCP报文在strace日志中不存在

有人可以给我关于以下情况的想法(Linux 2.6.18-348.4.1.el5):

  1. 在某些时候,tcpdump会显示从服务器端口发送到本地客户端的[FIN,ACK]数据包
  2. strace日志显示在那个时候该端口的那个套接字句柄上没有执行套接字活动(strace日志正确地显示了该客户端的其余通信)
  3. 防火墙和SELinux都停止了
  4. 问题是复杂的条件,需要服务器执行networking请求Kerberos身份validation的另一个客户端连接100%重现。

什么是可能的原因,可能导致tcpdump显示strace中丢失的数据包? 它看起来更像是服务器问题,TCP设置问题还是一些防火墙服务问题?

有些东西会触发服务器端的连接closures。 很可能是远程服务器上closures连接的应用程序。 可能的原因是服务器上的闲置断开function,软件错误等

如果远程服务器位于NAT之后,则也可能是由执行NAT的设备中的NAT条目到期引起的。

您应该在服务器上运行tcpdump并查看FIN数据包是否源自该服务器。 如果是,那么可能的罪魁祸首就是应用程序。 如果不是,那么它是来自防火墙。

kasperd是正确的strace没有显示进程的所有线程 (不知何故,我确定附加到进程将监视所有线程)。 所以审计确认它是我的应用程序closures套接字(因为一些神秘的“信号33”发生和recv()不正确处理EINTR,我会问另一个问题)