2

我需要公式来准确计算 1 Gig Nic 卡的带宽。我正在做的是以 1Gbps 的速度发送第 2 层数据包,但我的软件显示 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

4 回答 4

1

在以太网中,您还必须考虑帧间间隙,它至少为 96 个量子时间,即量子时间是发送比特的时间,即 GigaEthernet 中的 1ns(1 秒 / 1,000,000,000)。

此外,如果您遇到碰撞,将会有退避时间,该量子是在 0 到 2^<nb 碰撞> - 1 之间随机选择的。

于 2008-12-05T07:35:59.430 回答
1

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

于 2008-12-05T08:43:49.167 回答
1

如果你真的用整数做所有这些计算,你会得到一些奇怪的结果......

与电缆通信的硬件 99.999% 肯定能够达到 125MBytes/秒,轻负载的交换机也可能跟上。除非您遇到灾难,否则您也不会在线路上看到任何显着的错误率。

您的实际性能很可能受到您用于传输数据包的平台的影响 - 您对此不多说。

于 2008-12-05T09:09:44.420 回答
0

首先,您至少需要一个“长”来存储编号。您收到的帧数。

要计算正在使用的带宽,

a = GetIntfCounters()

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

b = GetIntfCounters()

Pkts/sec = (b - a)/超时

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

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

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

于 2008-12-31T07:57:10.913 回答