概述
此方法用于计算以太网应用层的理论传输速率,理论传输速率跟以下因素相关
第四层:TCP 或 UDP
第三层:IPv4 或 IPv6
第二层:MTU值
第一层:链路速度(10Mbps ~ 100Gbps)
/**
* calc transfer speed over TCP or UDP
* @param {number} bps - 10Mbps to 100Gbps
* @param {mtu} mtu - 1500(standard), 7935(lan) or 9000(jumbo)
* @param {number} layer3protocol - IPv4 or IPv6
* @param {number} layer4protocol - TCP or UDP
* @return {number} - bytes per sec
* @example calcEffectiveSpeed(1e9, 1500, 'IPv4', 'TCP')
* @example calcEffectiveSpeed(1e9, 9000, 'IPv4', 'UDP')
* @see https://en.wikipedia.org/wiki/Frame_check_sequence#/media/File:Ethernet_Frame.png
* @see https://en.wikipedia.org/wiki/Jumbo_frame#Bandwidth_efficiency
* @see https://en.wikipedia.org/wiki/Interpacket_gap
*/
function calcEffectiveSpeed(bps, mtu=1500, layer3protocol='IPv4', layer4protocol='TCP'){
const PREAMABLE=8;
const IPG=(s)=>s<=10e6?5.875:s<=100e6?12:s<=1e9?8:s<=25e9?5:1;
const FRAME_HEADER=14;
const FCS=4;
const IPV4_HEADER=20;
const IPV6_HEADER=40;
const TCP_HEADER=20;
const UDP_HEADER=8;
let layer1overhead=PREAMABLE+IPG(bps);
let layer2overhead=FRAME_HEADER+FCS;
let layer3overhead=layer3protocol==='IPv4'?IPV4_HEADER:IPV6_HEADER;
let layer4overhead=layer4protocol==='TCP'?TCP_HEADER:UDP_HEADER;
let bytesPerSec=bps/8;
let frameCount=bytesPerSec/(mtu+layer1overhead+layer2overhead);
let efficiency=(mtu-layer3overhead-layer4overhead)*frameCount/bytesPerSec;
let effectiveBytesPerSec=bytesPerSec*efficiency;
return effectiveBytesPerSec;
}
当然,TCP因其慢启动机制,实际传输速度还受RTT、丢包率等因素的影响。参见TCP throughput calculator
最后
以上就是现代往事为你收集整理的Ethernet应用层有效网速计算方法的全部内容,希望文章能够帮你解决Ethernet应用层有效网速计算方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复