以太网端口的节流带宽

时间:2012-12-17 19:07:40

标签: c# networking bandwidth ethernet throttling

我正在编写一个在服务器上运行的应用程序,我需要能够为每个以太网端口设置最大带宽(最多可以有6个端口)。

显然我可以限制我的应用程序使用的带宽,但我还没有找到任何关于限制计算机上实际以太网端口带宽的信息。

是否需要通过创建驱动程序来监控所有端口来完成?有人能指出我正确的方向吗?

3 个答案:

答案 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上执行此操作,但用例非常前卫,因为通常在下一个更高的交换机中放置该限制的位置要好得多。