首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux如何防止应用程序发送比链接能够处理的数据包更多的数据包而不丢弃数据包?

Linux如何防止应用程序发送比链接能够处理的数据包更多的数据包而不丢弃数据包?
EN

Unix & Linux用户
提问于 2015-02-27 23:49:36
回答 3查看 287关注 0票数 2

我无法让问题变得更清楚,下面是一个例子:

给定通过带宽的物理接口10 10Mbps连接到IP网络的Linux机器(或具有tc令牌桶过滤器的更高速度的接口,以将速率限制在10 10Mbps)。

在远程计算机上(具有相同的速度或更快的链接),启动iperf服务器:

iperf -s -u -i 1

在本地机器上,用bw=20Mbps启动iperf客户机:

iperf -c <server ip> -u -i 1 -b 20M

观察:发送者从不超过10 10Mbps速率(在硬件或tc qdisc中链路层中定义)。

我希望看到发送方每秒推出价值20 start的数据包,导致接口的本地tx队列增加,数据包丢失开始发生。但事实并非如此。为什么?

我试图查看Linux内核的net/sched文件夹,但似乎找不到这种行为的来源。

感谢你的帮助。同时,也可以随意建议修改标题,以使其更有相关性。

EN

回答 3

Unix & Linux用户

发布于 2015-02-28 00:03:18

这是由于一个名为自动谈判的过程,这个过程发生在物理层上。就内核而言,该链路(连接)只能处理10 Mbps的带宽,iperf可能会考虑到最大连接速度。

如果您对这种交互有更多的疑问,那么https://networkengineering.stackexchange.com/的好人可能会更详细。

票数 1
EN

Unix & Linux用户

发布于 2020-01-08 15:26:52

本地机器仅限于NIC的带宽,NIC被从NIC传递到堆栈。您将根据该值对流进行节流。

您可以尝试使用并行流(-P)选项创建多个流,每个流都限制在网卡速度,但都试图推动10-P/S。

票数 0
EN

Unix & Linux用户

发布于 2020-01-08 21:30:35

粗略地说,包通常以我们所称的桶的方式,以存储和转发的方式保存,并通过网络随时间发送,从而确保预先定义的带宽。它们并不总是被丢弃。这就是为什么根据您使用的QoS方法、所监视的客户端数量以及一般配置,CPU和内存成本会迅速上升。

我们可以在多个OSI级别上实现QoS ()。我们可以在Squid中、在RouterOS接口中这样做,也可以通过各自的端口对特定的网络协议进行特权。

诚挚的问候。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/187302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档