我正在编写一个在服务器上运行的应用程序,我需要能够为每个以太网端口设置最大带宽(最多可以有6个端口)。
显然我可以限制我的应用程序使用的带宽,但我还没有找到任何关于限制计算机上实际以太网端口带宽的信息。
是否需要通过创建驱动程序来监控所有端口来完成?有人能指出我正确的方向吗?
答案 0 :(得分:1)
如果你有权访问Linux机器,那么它很容易做到这一点。事实上,您可以添加各种网络损伤,使其变得有趣。
只需安装两个网卡并设置netem以中间流量。 (即线路中的线条光斑,加上延迟,抖动,带宽率等损伤。)
这是我用来测试Android音频流应用程序性能的脚本,方法是将android流量传递到Linux机箱(其中一个接口连接了一个wifi AP)。
补充:通过测试我的应用程序的性能,我的意思是应用程序将如何 在驾驶时表现在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
这将 - 在上行链路(客户端到服务器)上 - 添加延迟100ms,抖动20%(使用正态分布),丢失30%数据包。
答案 1 :(得分:0)
我认为最简单的方法是创建一个输出设备,您可以使用实际的发送方进行组合,从而限制输出本身,而不是弄乱以太网端口。
答案 2 :(得分:0)
在wndows中,通常不可能在没有附加软件的情况下在操作系统级别上执行此操作 - 用例被简单地视为不重要,并且认真:这是非常正确的。如果我需要网络限制,我可以在交换机中强制执行它们。
唯一的例外是在Hyper-V中,新版本(在2012 R2中)可以限制传出带宽。
一般情况下 - 您需要第三方软件在Windows上执行此操作,但用例非常前卫,因为通常在下一个更高的交换机中放置该限制的位置要好得多。