0

与 SLES 9 相比,SLES 10 实现 Tcp 套接字的方式是否有任何重要变化?

我有几个用 C# (.NET 3.5) 编写的应用程序,它们在 Windows XP 和 Windows Server 2003 上运行。它们已经运行良好一年多了,使用套接字连接从 SLES 9 机器获取市场数据。

该机器今天升级到 SLES 10 并导致一些奇怪的行为。套接字通常每秒返回几百或几千个字节。但偶尔,我会停止接收数据。十秒或更长时间没有数据,然后接收返回 10k+ 字节。一些缓冲区导致数据丢失,因为我在套接字上收到的字节不再是正确的数据包。

唯一改变的是 SLES 9 到 10 的升级。回滚会立即解决此问题。有任何想法吗?

4

2 回答 2

1

可以通过将 smb 内核升级到 2.6.16.60-0.37 或更高版本来解决丢弃的数据包。BNX2内核模块是丢包的根本原因。这是 SLES 10 开箱即用的一个已知问题。

参考:http ://www.novell.com/support/search.do?cmd=displayKC&sliceId=SAL_Public&externalId=7002506

于 2010-04-19T16:40:11.330 回答
0

/proc/sys/net 设置的默认值可能已更改。也许较新的 SLES 启用了 tcp_ecn 之类的功能?

如果您的网络丢弃了一些 SLES10 不喜欢的数据包,那么它可能启用了较新的 TCP 功能。否则我不知道。我会用 tcpdump/wireshark 来看看它。并且可能 strace 服务器进程以查看它正在执行的系统调用。

SLES 是发送者,因此可能发生了一些变化,导致它决定等到它拥有完整的数据窗口或其他东西。但是10k太多了。听起来更像是丢包,然后在丢失的数据包最终到达时进行大量返回,从而也允许返回排队的数据。

于 2009-12-10T00:31:14.580 回答