2008-12-05 72 views
2

我需要公式来准确计算1千兆网卡的带宽。我正在做的是发送第2层数据包@ 1Gbps,但我的软件显示6oo Mbps。对于1千兆网卡的准确带宽公式的需求

整个实验是背靠背的。没有交换机无路由器。

这是我做的。

// 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]; 

回答

1

在以太网中,你还必须考虑到interframe gap,这是最小的,96量子时间,也就是量子暂且一次送了一下,这一点,1ns的在GigaEthernet( 1秒/ 1,000,000,000)。

另外,如果你得到的碰撞,会有backoff time,随机选取0和2^< NB碰撞>之间,其量子 - 1

+1

一个小问题 - 你不会在千兆位上发生冲突,因为所有实际的GigE系统都是全双工的。 – 2008-12-05 09:03:52

1

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

1

如果你真的做的都在使用这些整数计算,你会越来越一些奇怪的结果...

进行对话的电缆上的硬件将99.999%肯定能够做好充分的125MBytes /秒,而轻载的交换机可能也会跟上。除非你遇到灾难,否则你也不会在电线上看到任何显着的错误率。

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

0

首先,您至少需要一个“长”字来存储no。你收到的帧。

为了计算所使用的带宽,

在秒= GetIntfCounters()

启动一个定时器(超时)

B = GetIntfCounters()

PKTS /秒=( b - a)/ timeout

位/秒=(Pkts/sec * pktsize)

Bytes/sec =(Bits/sec)/ 8

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