2008-12-05 22 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。但是,如果您考慮接口計數器,則設備正在接收幀的帶寬的唯一實際計算將是。

相關問題