Windows 服务器 2003。
我在服务器上安装了最新的 WireShark,需要在服务器上捕获数据包以查明随机发生的连接重置/重新传输问题。当发生连接重置时,它会重置大约 600 个连接/秒,而正常值应该低于 100/秒。该服务器实际上是 Cisco UCS 主机上的虚拟机。tshark 数据包捕获是否有助于找出原因?
另一个附带问题是,由于我要捕获所有流量(不确定这是否是个好主意),所以我还会进行数据包切片。我的问题是每个数据包应该限制多少字节。看起来我捕获的数据包的标头有 54 个字节(似乎包括帧、以太网 II、互联网协议、TCP 部分)。我应该只使用
tshart -q -b "filesize:20000" -b "files:5" -s 54 -w c:\outfile.pcap
所以所有的payload都不能被保存?请指教,谢谢!
答案1
对于普通以太网,如果您想要整个数据包,则 snaplen(-s
选项)应该是 1500。这样您就可以获得整个数据包,并且在加载到 WireShark 本身时允许完整的协议解码。根据您正在嗅探的内容,您可能还想增加文件大小。
为了至少获取大多数数据包的标头,snaplen 为 200 通常就足够了。它将获取 E_II、IP、TCP/UDP 和一些更高级别的协议标头。
连接重置有几种类型,每种都有其自身的含义。
立即重置所有现有连接
这种重置方式在嗅探中表现为服务器发送的一大块 RST,数据包之间的流量可能非常小。这可能是由于 TCP/IP 堆栈上方的应用程序重置自身而导致的,这反过来又告诉 TCP/IP 堆栈终止与该模块相关的所有连接句柄。
当有流量时重置所有现有连接
这在嗅探中表现得更加隐蔽。在某个时间点之后,任何时候现有连接收到来自客户端站点的流量时,会发出 RST 数据包。客户端随后执行的操作取决于更高级别的协议,也许会发出重新连接尝试。这通常是由于 TCP/IP 堆栈本身默默丢失连接状态造成的。就堆栈而言,来自客户端的数据包与任何打开的连接无关,因此它只会发出 RST 数据包并忽略它。
重置新的连接尝试
现有连接继续工作,但 SYN 数据包会以 RST 回复。在正常操作中,这样做是因为 SYN 数据包上列出的端口没有开放端口。这通常是由更高级别的应用程序故障引起的。
至于您的重传,这些是由于客户端没有收到他们期望收到的数据包造成的。这可能是由于数据包完全丢失造成的,也可能是服务器根本没有发送这些数据包。如果您在服务器上嗅探显示重传数据包,并且列出对话显示没有数据包发送如果服务器出现此问题,则表明服务器本身出现了问题。这可能与更高级别的应用程序、TCP/IP 堆栈或 NIC 驱动程序本身的故障有关。我见过 NIC 驱动程序更新修复了这个问题,但在虚拟机中,这不太可能是问题的根源。像这样的大规模重置可能是由于服务器资源耗尽造成的。