Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 1千兆网卡精确带宽公式的需要_C++_Networking_Network Programming - Fatal编程技术网

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

C++ 1千兆网卡精确带宽公式的需要,c++,networking,network-programming,C++,Networking,Network Programming,我需要一个公式来精确计算1G网卡的带宽。我正在做的是以1Gbps的速度发送第二层数据包,但我的软件显示为6ooMbps 整个实验是背靠背的。没有交换机,没有路由器 这就是我所做的 // LinkSpeed = 1Gb UINT nBandwidth = LinkSpeed/100;//Mbps nBandwidth = nBandwidth/8; //Bytes/sec nBandwidth = nBandwidth/FrameLength; //Frames/Sec. Frame

我需要一个公式来精确计算1G网卡的带宽。我正在做的是以1Gbps的速度发送第二层数据包,但我的软件显示为6ooMbps

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

这就是我所做的

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

在以太网中,您还必须考虑至少96个量子时间,也就是说,量子时间是发送位的时间,即千兆以太网中的1ns(1秒/100000000)


此外,如果发生冲突,则会有,哪个量子是在0和2^-1之间随机选择的。

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

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

与有线电视通话的硬件99.999%肯定能达到125MBytes/s的全速率,而一个轻负载的交换机可能也能跟上。除非发生灾难,否则您也不会在线路上看到任何明显的错误率

您的实际性能最有可能受到您用来传输数据包的平台的影响-您对此没有说太多。

首先,您至少需要一个“long”来存储接收到的帧数

要计算正在使用的带宽

a=GetIntfCounters()

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

b=GetIntfCounters()

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

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

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

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

一个次要的问题-在千兆位上不会发生冲突,因为所有现实世界的GigE系统都是全双工的。@Willden,当两个不相关的站尝试同时传输时会怎么样?我不知道GigE,但如果它只是更快的以太网,那么这也是一个可能的冲突。在哪个共享介质上同时传输?mahesh使用直接连接,否则您的GigE NIC将连接到交换机上的端口。在任何一种情况下,每个电缆段都不超过两个全双工发射机。不一定是一个交换机。如果它们都在一个集线器上,它们基本上共享同一条线路,这就是为什么混杂模式可以在NIC上工作,让它们看到所有流量。在这种情况下,两个可以同时传输,这就是以太网具有后退定时器的原因。