我是靠谱客的博主 现代往事,最近开发中收集的这篇文章主要介绍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

最后

以上就是现代往事为你收集整理的Ethernet应用层有效网速计算方法的全部内容,希望文章能够帮你解决Ethernet应用层有效网速计算方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部