我需要公式来准确计算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];
答案 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。但是,如果考虑接口计数器,那么设备接收帧的带宽的唯一实际计算就是。