在GNU / Linux上分析传入的TCP数据包丢弃

我使用Ubntu 12.04服务器作为网关/路由器。 该服务器有两个用于LAN和WAN接口的NetXtreme BCM5721千兆以太网PCI Express卡。 Opennms监控软件在WAN(ISP)接口上显示传入数据包丢弃。 ISP通过SDH / SONET环提供直接的以太网连接。 但是在LAN接口上我看不到任何数据包丢弃。 这是WAN接口图:

在这里输入图像说明

是否有任何工具/命令来发现什么是这种丢包的责任。 是否有可能知道ISP的一些错误configuration是否导致这样的问题。

Ifconfig输出:

eth1 Link encap:Ethernet HWaddr **:**:**:**:63:5d inet addr:***.***.4.130 Bcast:***.***.4.131 Mask:255.255.255.252 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:865089489 errors:0 dropped:596 overruns:0 frame:3 TX packets:498072410 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1092458492329 (1.0 TB) TX bytes:48179244881 (48.1 GB) Interrupt:17 

ethtool命令用于向驱动程序查询NIC正在报告的统计信息。 ethtool -S ethX会显示特定卡片的统计数据,您可以看到这些数据是在哪里。

最常见的情况是,你将会丢失环形缓冲区中的数据包(报告为“丢弃”“fifo”“bufs”状态,每张卡都不相同),你可以通过使用ethtool -g增加环形缓冲区来解决这个问题。 看到更多的man ethtool

netstat命令用于查询内核的networking堆栈。 netstat -s会显示你的统计信息,你可以看到你是否正在丢失stream量(在NIC之后但在套接字缓冲区之前)或套接字缓冲区(太小的缓冲区或缓慢的应用程序)或其他地方。