简介
本文档介绍与高速、高延迟网络相关的问题。它从BDP中推导出计算给定条件下实际带宽使用的公式。
背景信息
随着越来越多的企业已经或正在构建地理上分散的数据中心,并通过高速链路将数据中心互联。对更好地利用带宽的需求正在增加。
带宽延迟产品(BDP)已在Internet上发布多年。然而,在这个问题看起来如何方面,没有现实的例子。BDP公式侧重于TCP窗口大小。它不提供根据距离计算可能的带宽使用量的方法。本文档简要介绍BDP并演示问题和解决方法。本文还推导了在给定条件下计算带宽使用的公式。
问题概述
您的公司有两个数据中心。您的公司将业务关键型数据从一个数据中心备份到另一个数据中心。备份管理员报告,由于网络速度慢,他们无法在备份窗口内完成备份。作为网络管理员,您被指派调查网络速度缓慢问题。您知道以下因素:
- 这两个数据中心相距1000千米。
- 这些数据中心通过1Gbps链路互连。
经调查,您注意到:
- 有足够的可用带宽。
- 不存在网络硬件或软件问题。
- 备份应用程序仅使用约10Mbps的带宽,即使剩余的990Mbps带宽是免费的。
- 备份应用程序使用TCP传输数据。
带宽延迟产品
为了回答备份应用程序仅使用10Mbps的问题,它引入了带宽延迟产品(BDP)。
BDP只是声明:
BDP(位)= total_available_bandwidth(位/秒)x round_trip_time(秒)
或者,因为RWIN/BDP通常以字节为单位,而延迟以毫秒为单位:
BDP(字节)= total_available_bandwidth(KBytes/sec)x round_trip_time(ms)
这意味着TCP窗口是一个缓冲区,它确定在服务器停止之前可以传输多少数据,并等待接收数据包的确认。吞吐量实质上受BDP的约束。如果BDP(或RWIN)低于延迟和可用带宽的乘积,则无法填写行,因为客户端无法以足够快的速度发送确认。传输不能超过(RWIN /延迟)值,因此TCP窗口(RWIN)需要足够大以适合maximum_available_bandwidth x maximum_endesided_delay。
使用上述公式。导出的带宽计算公式为:
带宽使用(Kbps)= BDP(字节)/RTT(ms)* 8
注意:此公式计算最大理论带宽使用量。它不考虑操作系统的数据包传输时间,因为它涉及许多因素,例如可用内存、网卡驱动程序、本地网卡速度、缓存,有时甚至磁盘速度。因此,当TCP窗口大小较大时,计算的带宽将大于实际带宽。当TCP窗口大小非常大时,偏差也会很大。
使用派生的公式,您可以回答为什么备份应用程序只能使用10Mbps的问题,方法是执行以下计算。
- 1000KM的RTT一般为~15,因此RTT=15ms
- 默认情况下,Windows 2003操作系统Windows大小为17,520字节。BDP=17,520字节
- 将这些数字放入公式中:
带宽使用(Kbps)=17520/15*8。
结果是9344Kbps或9.344Mbps。9.344Mbps加上TCP和IP报头。最终结果是约10Mbps。
验证
作为网络管理员,您理论上已经回答了这个问题。现在,你需要在现实世界中证实这个理论。
您可以使用任何网络性能测试工具来确认该理论。您决定运行iperf来演示问题和解决方法。
实验设置如下:
- 数据中心1中IP地址为10.10.1.1的服务器。
- 数据中心2中IP地址为172.16.2.1的客户端。
拓扑如图所示:
请按照以下步骤验证:
- 在10.10.1.1上运行iperf3 -s -p 5001,使其成为服务器并侦听TCP端口5001。
- 使用默认TCP窗口大小17,520字节进行测试。在172.16.2.1上运行iperf3 -c 10.10.1.1 - i 1 -t 360 -w 17520 -p 5001,使其成为客户端。此命令告知iperf在端口5001上连接到服务器,运行360秒,并在TCP windows大小为17,520字节时每1秒报告一次带宽使用情况。
- 要使用自定义TCP窗口大小(如6,553,500字节)进行测试,请运行iperf3 -c 10.10.1.1 -i 1 -t 360 -w 6553500 -p 5001
这是默认TCP窗口大小为17,520字节的实验测试结果。您可以看到带宽使用率约为10Mbps。
C:\Tools>iperf3.exe -c 10.10.1.1 -t 360 -p 5001 -i 1 -w 17520
Connecting to host 10.10.1.1, port 5001
[ 4] local 172.16.2.1 port 49650 connected to 10.10.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 1.30 MBytes 10.9 Mbits/sec
[ 4] 1.00-2.02 sec 919 KBytes 7.41 Mbits/sec
[ 4] 2.02-3.02 sec 1.28 MBytes 10.7 Mbits/sec
[ 4] 3.02-4.02 sec 1.14 MBytes 9.59 Mbits/sec
[ 4] 4.02-5.01 sec 1.24 MBytes 10.4 Mbits/sec
[ 4] 5.01-6.01 sec 1.33 MBytes 11.3 Mbits/sec
[ 4] 6.01-7.01 sec 1.15 MBytes 9.65 Mbits/sec
[ 4] 7.01-8.01 sec 1.12 MBytes 9.36 Mbits/sec
[ 4] 8.01-9.01 sec 1.22 MBytes 10.3 Mbits/sec
[ 4] 9.01-10.01 sec 1.13 MBytes 9.49 Mbits/sec
[ 4] 10.01-11.01 sec 1.30 MBytes 10.8 Mbits/sec
[ 4] 11.01-12.01 sec 1.17 MBytes 9.84 Mbits/sec
[ 4] 12.01-13.01 sec 1.13 MBytes 9.48 Mbits/sec
[ 4] 13.01-14.01 sec 1.28 MBytes 10.7 Mbits/sec
[ 4] 14.01-15.01 sec 1.40 MBytes 11.8 Mbits/sec
[ 4] 15.01-16.01 sec 1.24 MBytes 10.4 Mbits/sec
[ 4] 16.01-17.01 sec 1.30 MBytes 10.9 Mbits/sec
[ 4] 17.01-18.01 sec 1.17 MBytes 9.78 Mbits/sec
这是TCP窗口大小为6,553,500字节的实验测试结果。您可以看到带宽使用率约为200Mbps。
C:\Tools>iperf3.exe -c 10.10.1.1 -t 360 -p 5001 -i 1 -w 6553500
Connecting to host 10.10.1.1, port 5001
[ 4] local 172.16.2.1 port 61492 connected to 10.10.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.00-1.00 sec 29.1 MBytes 244 Mbits/sec
[ 4] 1.00-2.00 sec 25.4 MBytes 213 Mbits/sec
[ 4] 2.00-3.00 sec 26.9 MBytes 226 Mbits/sec
[ 4] 3.00-4.00 sec 18.2 MBytes 152 Mbits/sec
[ 4] 4.00-5.00 sec 25.8 MBytes 217 Mbits/sec
[ 4] 5.00-6.00 sec 28.8 MBytes 241 Mbits/sec
[ 4] 6.00-7.00 sec 26.1 MBytes 219 Mbits/sec
[ 4] 7.00-8.00 sec 21.1 MBytes 177 Mbits/sec
[ 4] 8.00-9.00 sec 22.5 MBytes 189 Mbits/sec
[ 4] 9.00-9.42 sec 9.54 MBytes 190 Mbits/sec
解决方案
从软件开发的角度看,多线程运行多个并发TCP会话可以提高带宽使用率。但是,网络管理员或系统管理员修改源代码并不可行。您可以微调操作系统。
RFC1323为高性能TCP定义了多个TCP扩展,包括Window Scale选项和选择性ACK。它们由主操作系统实施。但是,默认情况下,某些操作系统会禁用它们,甚至会写入TCP/IP堆栈来支持它们。
- 默认情况下,这些操作系统禁用RFC1323:Windows 2000、Windows 2003、Windows XP和内核低于2.6.8的Linux。
如果您在Microsoft Windows系统上遇到问题,请通过此链接微调TCP。https://support.microsoft.com/en-au/kb/224829。
有关其他操作系统,请参阅供应商关于如何配置它们的文档。
- 默认情况下,这些操作系统启用RFC1323:Windows 2008及更高版本、Windows Vista及更高版本、带内核2.6.8及更高版本的Linux。您可能需要应用补丁来改进这些功能。在某些情况下,需要禁用它们。请参阅供应商有关如何禁用它们的文档。
- 某些设备构建在Microsoft Windows 2000、Windows 2003或嵌入式操作系统之上。例如NAS、医疗保健硬件。请检查供应商的文档以验证RFC1323是否已启用。
如何区分两个地点之间的往返时间(RTT)?
通常,RTT与距离关联。下表列出了距离及其相关RTT。在正常网络条件下,您也可以使用ping测试来获取有关RTT的一些想法。
距离(千米) |
RTT(ms) |
1,000 |
15 |
4,000 |
50 |
8,000 |
120 |
注意:以上仅是指南,实际RTT时间可能不同。此外,延迟还受所使用技术的影响。例如,3G延迟可以频繁地为100ms,而不管距离如何。卫星也是如此。