[英]Throttling Bandwidth on Ethernet Port
我正在编写一个应用程序在服务器上运行,我需要能够为每个以太网端口设置最大带宽(最多可以有6个端口)。
显然我可以限制我的应用程序使用的带宽,但我还没有找到任何关于限制计算机上实际以太网端口带宽的信息。
这是否需要通过创建一个驱动程序来监控所有端口来完成? 有人能指出我正确的方向吗?
如果你有权访问一个Linux机器盒,它很容易做到这一点。 事实上,您可以添加各种网络损伤,使其变得有趣。
只需安装两个网卡并设置netem以中间流量即可。 (即线路中的线条光斑,加上延迟,抖动,带宽率等损伤)
这是我用来测试我的Android音频流应用程序的性能的脚本,通过Linux流量传递android流量(其中一个接口连接了一个wifi AP)。
补充:通过测试我的应用程序的性能,我的意思是App在驾驶时如何在4G网络上运行(即大量的抖动)。 或者带有Wi-Fi的家庭用例; 如果家中的每个人都决定同时传输高清视频(即带宽争用,丢包很多),该怎么办?
#!/bin/bash
ORIGINAL_PATH=$PATH
#echo $ORIGINAL_PATH
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/game"
#echo $PATH
CTOSINTERFACE=eth1 # EGRESS interface on Bridge, facing the SERVER
STOCINTERFACE=eth0 # EGGRES interface on Bridge, facing the CLIENT
# Client To Server
CDELAY=$1
CJITTER=$2
CLOSS=$3
CDUPLICATE=$4
CCORRUPT=$5
CREORDER=$6
# Server to Client
SDELAY=$7
SJITTER=$8
SLOSS=$9
SDUPLICATE=$10
SCORRUPT=$11
SREORDER=$12
# Clear Latency/Loss/Jitter
/sbin/tc qdisc del root dev $CTOSINTERFACE 2>/dev/null
/sbin/tc qdisc del root dev $STOCINTERFACE 2>/dev/null
# Client to Server Impairments (on Bridge)
qdisc add dev $CTOSINTERFACE root netem delay ${CDELAY}ms ${CJITTER}ms loss $CLOSS% duplicate ${CDUPLICATE}% corrupt ${CCORRUPT} reorder ${CREORDER}% limit 10000000 2>&1 >/dev/null
qdisc add dev $STOCINTERFACE root netem delay ${SDELAY}ms ${SJITTER}ms loss $SLOSS% duplicate ${SDUPLICATE}% corrupt ${SCORRUPT} reorder ${SREORDER}% limit 10000000 2>&1 >/dev/null
#$PATH=$ORIGINAL_PATH
export PATH=$ORIGINAL_PATH
#echo $PATH
并将脚本调用为
#sudo impare_network.sh 100 20 30 0 0 0 0 0 0 0 0 0 0
这将 - 在上行链路(客户端到服务器) - 添加100毫秒的延迟,20%的抖动(使用正态分布),丢失30%的数据包。
我认为最简单的方法是创建一个输出设备,您可以使用实际发送器进行组合,从而限制输出本身,而不是弄乱以太网端口。
在wndows中,通常不可能在没有附加软件的情况下在操作系统级别上执行此操作 - 用例被简单地视为不重要,并且认真:这是非常正确的。 如果我需要网络限制,我可以在交换机中强制执行它们。
唯一的例外是Hyper-V,其中新版本(在2012 R2中)可以限制传出带宽。
一般情况下 - 你需要在Windows上使用第三方软件,但用例真的是前卫,因为通常它是一个更好的地方,可以在下一个更高的交换机中设置这个限制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.