¿如何debugging此问题?
(我有完整的tcpdump捕获)
我有一个TCP服务器,许多客户build立持久连接。 通常,所有这些客户端的行为,我从来没有达到每个进程的默认Linux限制连接(打开的文件)。
昨天有人(或某事)开始行为不端,并留下许多开放的连接,迫使我重新启动服务器。 你可以在下面的munin netstat图上看到它的行为:

每次连接达到1000,我重新启动服务器。 这种不正当行为只是第四次神秘地停了下来,没有任何明显的原因。 一周前发生了类似的事情。
所有不好的连接来自同一个(子)networking:我可以将它们隔离起来,但也有一些来自同一networking的有效连接(所以我不能拒绝来自该networking的连接)。
到目前为止,我已经使用tcpdump,ethereal和ngrep,但是我还没有find一种方法来查看已build立的连接,但是不会传输数据。
谢谢!
在Wireshark中,进入Statistics-> Conversations-> TCP 。 尝试观察列表,看看有没有什么奇怪的东西,例如连接数exception大,传输字节数less,传输速率低的主机。 如果您确实需要将数据复制到电子表格。 (你可以在服务器端使用netstat做类似的事情,例如在Linux上你可以运行netstat -nt | sort -n -t . -k5,5 -k6,6 -k7,7 -k8,8来列出按照sorting的连接客户端IP地址)。
如果问题局限于一个或两个客户端,您可以查看他们的stream量,试图进一步缩小问题的范围。
(如果你真的在使用Ethereal,你应该立即升级到Wireshark。披露:我是主要开发者。)
协议分析并不难,但是很繁琐。 基本过程是迭代的,将前一步的结果作为下一步分析的input。 基本上,你总是比较应该发生什么事情,并注意到exception。
我build议从一个简单的filter捕获一个原始的数据包,以限制捕获问题的子网。 根据应用层协议,我将捕获大小限制在大约100字节左右 – 足以获得TCP和低层协议头以及一点点的应用层。
一旦你知道你有一个问题的行为的例子,加载原始数据包捕获到你select的协议分析器 – tcpdump,wireshark,Netscout Sniffer,不pipe。 现在你可以开始寻找更多的模式,让你隔离问题的stream量。 如果你能隔离stream量,那么你可以分析它。
在评论中,mas提出了一个很好的基于SYN / ACK帧进行过滤的build议,看看是否有IP地址有大量的开放连接。
然后,您可以查看来自这些IP地址的连接,并计算有多less闲置以及多less交换实际数据。
看看正在交换的数据。 应用层协议数据对于您的应用程序是否有意义? 计算有意义的连接数量与exception连接的数量。
对于一些众所周知的问题,已经创build了可以自动执行这些工作的专家引擎。 在我看来,这是更大的IDS是一个专家引擎,或一套专家引擎,自动分析数据包捕获。 你可能会发现一个你需要做分析的软件包。 同时,您可以开始分析您的数据。
如果你拥有的只是tcpdump,那么你必须使用它,但是我更喜欢graphics协议分析器,特别是如果它有一些制表或graphicsfunction的话。 GUI帮助查看数据,并且许多方便地对数据包的部分进行颜色编码以便于阅读。