如何计算TCP吞吐量

如何计算TCP吞吐量为什么 80 的码农都做不了架构师 gt gt gt

FROM:  how-to-calculate-tcp-throughput-for-long-distance-links

如何计算广域网链路的 TCP 吞吐量

    刚刚点亮数据中心之间的高速网络(光线),但是你却恼怒的观察到高速广域网链路上的低的文件传输速度 – Bummer!在给思科一级支持工程师(Cicso TAC)电话和开始检修你的网络之前,快速计算一下从一个主机经过长距离的链路到另一个主机之间实际上你可以获得的 TCP 吞吐量是多少。

    使用 TCP 传输数据时,两个最重要的因素是 TCP 窗口大小 和 往返延迟。如果你知道这两个参数,你就可以计算出两个主机间的最大吞吐量,不管带宽是多少。

计算 TCP吞吐量的公式

   TCP窗口大小(bits) / 延迟(秒)  =  每秒吞吐量(bits)

    举一个简单的例子。从芝加哥到纽约有 1G 的以太网链路,往返延迟 30ms。如果使用 FTP 在芝加哥的一台服务器和纽约的一台服务器之间传输一个大文件,所能期望的最大吞吐量是多少?

tcp-throughput1.png

    首先把 TCP窗口大小 从字节变成位。这个例子中我们使用 Windows 标准的 64K 窗口大小。

    64KB = 65536 Bytes.   65536 * 8 = bits

    接着,把用位表示的窗口大小除以用秒表示的往返延迟。延迟 30ms 的话,在计算中使用 0.03秒。

     bits / 0.030 seconds = bits per second throughput = 17.4 Mbps maximum possible throughput

    这样的话,尽管在数据中心之间我有 1G 的链路带宽,但是基于 给定的窗口大小 和 往返延迟,在传输文件时我所能期望的最大的吞吐量是 17.4 Mbps。

    做什么才能变快?  增加窗口大小 或 缩减延迟。

    为了增加 TCP窗口大小,可以在每个服务器上做出手动调整,传递更大的窗口大小。这产生了一个问题:你将使用多大的窗口大小?可以使用上面公式的反向计算来确定最优的窗口大小。

计算最优 TCP窗口大小 的公式

   带宽(bits每秒) * 往返延迟(秒) = TCP窗口大小(bits) / 8 = TCP窗口大小(字节)

    因此在芝加哥和纽约之间 1G 的带宽和 30ms 的延迟的例子中,可以计算如下:

    1,000,000,000 bps * 0.030 seconds = 30,000,000 bits / 8 = 3,750,000 Bytes

    因此为 FTP连接 配置 3750KB 的 TCP窗口大小,将会填充管道,获得 1Gbps  的吞吐量。

tcp-throughput4.png

    服务器增加 TCP窗口大小,其中一个缺点是需要更多的缓冲内存,因为未应答的数据必须存储在内存中为了应对可能的重传。另一个潜在的缺陷是性能(是不是很讽刺),发生在包丢失时,因为窗口内任何的包丢失都会导致整个窗口重传 – 除非你的 TCP协议栈使用一种 TCP增强技术,叫做选择性应答(selective acknowledgements),但是大部分服务器没有使用此种技术。

    另一个选择就是在需要更大窗口的一端放置广域网加速器(WAN accelerator) 和 在加速器之间使用其他TCP优化,比如选择性应答,对服务器不需要特殊的调优或额外的内存。加速器可能也使用第7层应用具体的优化来减少往返次数。

    减少延迟?这怎么可能? 除非你能克服光速的限制,否则对于缩减延迟你什么都做不了。再一次,你有一个选择,就是设置加速器,加速器应答本地服务器的报文段,愚弄服务器让它认为看到非常低的局域网延迟。因为服务器看到非常快速的局域网应答,而不是等待远处的服务器应答,这就是为什么我们不需要调整服务器的窗口大小的原因。

tcp-throughput2.png    在这个例子中,最合适的广域网加速器是 Cisco 7371 WAAS Appliance。 WAAS指的是 Wide Area Application Services。

    WAAS设备将会使用 TCP优化,比如大的窗口 和 选择性应答。除此之外,WAAS设备会消除 TCP流 中的冗余信息,产生高的压缩比率。每个设备会记住之前看到的数据,如果再次看到相同的数据,这些数据将会被2个字节的符号替换。这个符号会被另一端的WAAS设备识别,在发送给服务器之前,它用原来的数据替换符号。

    这些优化的结果是:在芝加哥和纽约的服务器之间,服务器不需要任何调优,就会获得类似局域网的更高的吞吐量。

给定吞吐量计算最大延迟的公式

    在两个使用标准 64KB TCP窗口大小 的服务器之间,你可能想获的 10 Gbps FTP 吞吐量。为了达到10 Gbps,你所能有的最大延迟是多少?

    TCP窗口大小(bits) / 吞吐量(bits每秒) = 最大往返延迟时间

     bits / 10,000,000,000 bits per second = 52.4 microseconds

转载于:https://my.oschina.net/astute/blog/93132

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178659.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:46
下一篇 2026年3月26日 下午4:46


相关推荐

  • 互联网创业公司如何防御ddos攻击风险_怎么防止ddos

    互联网创业公司如何防御ddos攻击风险_怎么防止ddosDDoS(DistributedDenialofService,分布式拒绝服务)主要通过大量合法的请求占用大量网络资源,从而使合法用户无法得到服务的响应,是目前最强大、最难防御的攻击之一。什么是DDoS攻击?看到一个好玩的解释,源自百度百科,一群恶霸试图让对面那家有着竞争关系的商铺无法正常营业,他们会采取什么手段呢?恶霸们扮作普通客户一直拥挤在对手的商铺,赖着不走,真正的购物者却无法进入;或者总是和营业员有一搭没一搭的东扯西扯,让工作人员不能正常服务客户;也可以为商铺的经营者提供虚假信息,商铺

    2025年6月3日
    4
  • 从光场相机Lytro中获取raw data

    从光场相机Lytro中获取raw data本文针对的是从 LytroOne 和 LytroIllumn 中获取原始数据我在 VS 中配置了该程序 代码见 最后可以成功运行 通过命令行运行 过程如下 1 fopen 与 fopen s 的问题 CRT SECURE NO WARNINGS 警告 网上有些现成的解决方法 同意可以通过 nbsp 解决方法 nbsp 右击工程 属性 配置属性 C C nbsp 命令行

    2026年3月18日
    2
  • 数据收集渠道_数据挖掘数据集

    数据收集渠道_数据挖掘数据集HuggingFace–TheAIcommunitybuildingthefuture.MachineLearningDatasets|PapersWithCode

    2022年10月16日
    5
  • Fleet of Agents vs Federation of Agents:两种多智能体协作范式的深度比较

    Fleet of Agents vs Federation of Agents:两种多智能体协作范式的深度比较

    2026年3月16日
    2
  • 实例变量与成员变量的区别

    实例变量与成员变量的区别在 Objective C 中 定义一个类 需要有两部分 第一是接口 interface 第二是实现 implementati 接口对应接口文件 而实现对应了实现文件 接口文件包含了类的声明 成员变量 membervariab 和方法 method 接口文件通常是 h nbsp 实现文件通常是 m 文件 nbsp 接口中所声明的方法 method 需要在 m 文件中 通过 xcode 来实现

    2026年3月18日
    1
  • 学习笔记23–V2X技术概览

    学习笔记23–V2X技术概览本系列博客包括 6 个专栏 分别为 自动驾驶技术概览 自动驾驶汽车平台技术基础 自动驾驶汽车定位技术 自动驾驶汽车环境感知 自动驾驶汽车决策与控制 自动驾驶系统设计及应用 笔者不是自动驾驶领域的专家 只是一个在探索自动驾驶路上的小白 此系列丛书尚未阅读完 也是边阅读边总结边思考 欢迎各位小伙伴 各位大牛们在评论区给出建议 帮笔者这个小白挑出错误 谢谢 此专栏是关于 自动驾驶技术概览 书籍的笔记 6 V2X 技术概览 6 1V2X 概览车用无线通信技术 VehicletoEve

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号