有人可以给我关于以下情况的想法(Linux 2.6.18-348.4.1.el5):
- 在某些时候 tcpdump 显示从服务器端口发送到本地客户端的 [FIN, ACK] 数据包
- strace 日志显示在那一刻附近没有在该端口的该套接字句柄上执行任何套接字活动(strace 日志正确显示该客户端的其余通信)
- 防火墙和 SELinux 已停止
- 对于需要服务器执行网络请求以对另一个客户端连接进行 Kerberos 身份验证的复杂条件,问题是 100% 可重现的。
可能导致 tcpdump 显示 strace 中丢失的数据包的潜在原因是什么?它看起来更像是服务器问题、TCP 设置问题还是某些防火墙服务问题?
某些东西触发了服务器端连接的关闭。很可能是远程服务器上的应用程序关闭了连接。可能的原因是服务器上的空闲断开功能、软件错误等。
如果远程服务器在 NAT 之后,也可能是由于执行 NAT 的设备中的 NAT 条目过期引起的。
您应该
tcpdump
在服务器上运行并查看FIN
数据包是否来自该服务器。如果是,那么可能的罪魁祸首就是应用程序。如果不是,那么它是来自防火墙。kasperd 关于strace 没有显示进程的所有线程是正确的(不知何故,我确信附加到进程将监视所有线程)。所以 auditd 确认是我的应用程序关闭了套接字(因为发生了一些神秘的“信号 33”,并且 recv() 没有正确处理 EINTR。我会问另一个关于这个的问题)。