1千兆网卡的精确带宽需要公式

时间:2008-12-05 06:09:42

标签: c++ networking network-programming

我需要公式来准确计算1 Gig Nic卡的Bandwith。我正在做的是发送第2层数据包@ 1Gbps,但我的软件显示6oo Mbps。

整个实验是背靠背。没有开关无路由器。

这就是我所做的。

// LinkSpeed = 1Gb

UINT nBandwidth =   LinkSpeed/100;//Mbps


nBandwidth = nBandwidth/8; //Bytes/sec

nBandwidth = nBandwidth/FrameLength;
//Frames/Sec. Frame Length = 1518

UINT FramesPerBurst = (nBandwidth*Sleeptime)/1000;
//Frames/Burst 

UINT nBufferSpaceNeededPerFrame = FrameLength-4 + sizeof(dump_bpf_hdr));


UINT nTxBufferSize = FramesPerBurst * nBufferSpaceNeededPerFrame;

unsigned char* pTxBuffer = new
unsigned char[m_nTxBufferSize];

4 个答案:

答案 0 :(得分:1)

在以太网中,你还必须考虑interframe gap,这至少是96量子时间,也就是说,量子时间是发送一个比特的时间,即GigaEthernet中的1ns( 1秒/ 1,000,000,000)。

此外,如果发生碰撞,将会有backoff time,在0到2 ^ nb碰撞之间随机选择哪个量子> - 1。

答案 1 :(得分:1)

仅仅因为您的卡是1千兆卡,并不意味着您将获得整个速度。除了Mat之外,你还要担心信号衰减和干扰。如果路由器或交换机出现拥塞,这也会降低传输速度。没有公式可以为您提供真实数据传输率的完全准确的数字。

答案 2 :(得分:1)

如果您真的使用整数进行所有这些计算,那么您将获得一些奇怪的结果......

与电缆对话的硬件99.999%肯定能够完成125MBytes /秒,而轻载开关也可能跟上。除非您遇到灾难,否则您也不会在线路上看到任何重大错误率。

您的真实表现很可能受到您用于传输数据包的平台的影响 - 您没有多说这些。

答案 3 :(得分:0)

首先,你需要一个“长”来存储号码。你收到的帧数。

要计算正在使用的带宽,

a = GetIntfCounters()

以秒为单位启动计时器(超时)

b = GetIntfCounters()

Pkts / sec =(b - a)/ timeout

比特/秒=(Pkts / sec * pktsize)

字节/秒=(位/秒)/ 8

GetIntfCounters()取决于您使用的软件平台。 您可以在给定的时间间隔内使用休眠,而不是计时器,然后计算该时间间隔内的pps。但是,如果考虑接口计数器,那么设备接收帧的带宽的唯一实际计算就是。