这里是我的设置:我有1个主机有一个1 Gbit以太网连接和2个有100 mbit连接的主机(通过不同的交换机连接到1Gbit主机)。
在一个testing中,我从1Gbit主机发送1000个1kb的消息到100mbit的主机(没有延迟的btwn sendto()调用)。 对于100兆主机之一,没有数据包被丢弃。 另一方面,直到100日左右没有下降,然后开始下降剩下的大部分。 非常可重复的。 当我引入1ms的延迟时,在任一主机上都没有丢弃。
我想知道为什么两个主机有不同的行为。
我应该用什么方法/工具来追踪这些? 我正在使用Linux 6.8。 而且我的rmem_max在两台主机上都设置为10MB。
这是预期的行为,当你有无与伦比的速度和运行不匹配的速度。 如果你能够饱和1GB的链接,那么在你发送1000个数据包的时候,另一端只能读取100个数据包。 你的路由器不太可能缓冲剩余的900个数据包。
UDP是一个不可靠的协议。 与TCP不同,它不具有内置的可靠交付。
它可能有助于运行与TCP连接类似的testing。 双向运行可能有助于确定问题是否是单向的。
在进程上运行的time
可能会告诉人们一个想法,如果其中一个进程运行得慢一些。 运行testing之前和之后, netstat -i
将允许您计算到达的数据量,并查看是否生成了任何错误。
ethtool
可能会告诉你,如果其中一台主机处于半双工模式。 半双工连接很容易出现问题,例如您所看到的。 如果出现布线或其他问题,连接可能会在一个或两个方向上回退到10 Mbit半双工。
如果pipe理交换机,则应检查相关端口上的configuration和错误计数器。
如果两个系统有不同的以太网硬件,那可能是问题所在。 有些硬件不能处理饱和的链接。