近期在使用Wireshark进行抓包的时候,发现了许多长度远大于MTU(1500字节)的包(帧),并且该类包只存在于rx(receive)流量,即外部网络到本地设备这个流向中。在朋友们的机器,以及另外一台台式机上进行测试,发现他们那都没有这种现象。这种极大长度、异常存在的包,会影响正常的流量分布,从而阻碍流量分析的进行,故亟须处理。
结论如下,主机的TCP/IP协议栈配置中,启用了RSC(Receive Segment Coalescing,接收段联合)选项。RSC选项允许网络适配器将多个TCP段联合成一个更大的段,从而减少每个段的处理开销,提高网络性能。这也就导致了接收到的包,通过网卡时被联合成了很大的包,从而造成了长度远大于1500字节的现象。
使用netsh
命令查看TCP/IP配置:netsh int tcp show
,并根据提示输入相应指令查看RSC配置。如下图所示,RSC目前在主机上时启用的。
根据表格所显示的Idx,依次进行查看,找到抓包对应的网卡:netsh int tcp show rscstats <idx>
。如图所示,RSC确实在工作并且联结了许多数据包。
使用指令将RSC选项关闭即可:netsh int tcp set global rsc=disabled
。
其他的情况
- 网卡进行TCP分片。主要针对有线网卡,无线网卡可能没有相关设置。Segment Offload
- 本地环路抓包过大。为了强化本地的通信速率,loopback地址的MTU往往是很大的。Loopback Captures
- 网卡分片技术总结。网卡TCP分片
鸣谢
感谢L. Yu,Y. Zhu在整个过程提供的帮助。