我正在编写一个在服务器上运行的应用程序,我需要能够为每个以太网端口设置最大带宽(最多有 6 个端口)。
显然我可以限制我的应用程序使用的带宽,但我还没有找到任何关于限制计算机上实际以太网端口带宽的信息。
这需要通过创建驱动程序来监控所有端口来完成吗?谁能指出我正确的方向?
我正在编写一个在服务器上运行的应用程序,我需要能够为每个以太网端口设置最大带宽(最多有 6 个端口)。
显然我可以限制我的应用程序使用的带宽,但我还没有找到任何关于限制计算机上实际以太网端口带宽的信息。
这需要通过创建驱动程序来监控所有端口来完成吗?谁能指出我正确的方向?
如果您可以访问 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
这将 - 在上行链路(客户端到服务器)上 - 增加 100 毫秒的延迟、20% 的抖动(使用正态分布)、30% 的数据包丢失。
我认为最简单的事情是创建一个输出设备,您可以与您的实际发送者组成它会限制输出本身而不是弄乱以太网端口。
在 wndows 中,如果没有额外的软件,通常不可能在操作系统级别上做到这一点 - 用例被简单地视为并不重要,而且说真的:这是非常正确的。如果我需要网络限制,我可以在交换机中强制执行它们。
唯一的例外是在 Hyper-V 中,newwest 版本(在 2012 R2 中)可以限制传出带宽。
通常-您将需要第三方软件在 Windows 上执行此操作,但用例确实很前卫,因为通常在下一个更高的开关中设置该限制是一个更好的地方。