C++ 1千兆网卡精确带宽公式的需要
我需要一个公式来精确计算1G网卡的带宽。我正在做的是以1Gbps的速度发送第二层数据包,但我的软件显示为6ooMbps 整个实验是背靠背的。没有交换机,没有路由器 这就是我所做的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
// 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上工作,让它们看到所有流量。在这种情况下,两个可以同时传输,这就是以太网具有后退定时器的原因。