Ethernet应用层有效网速计算方法

此方法用于计算以太网应用层的理论传输速率,理论传输速率跟以下因素相关
第四层: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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值