在调优网络参数时查阅参考资料,发现一篇收获颇多的文,特做翻译 本文原文出自Neeldhwaj Pathak, 我在翻译过程中稍作修改。
CDN中的初始拥塞控制
抽象
本文是对内容交付网络(CDN)的TCP initcwnd值的比较研究,该值多年来一直在增长。互联网在不断发展;全球平均网络速度已达到十年前从未想过的程度。同样,网站空间;包括网络对象在内的大小也在不断增长。在我们的实验过程中,我们分析了各种CDN的initcwnd值以及它们多年来的变化。在转向我们的结果和观察之前,先介绍了所涉及概念的背景。
什么是TCP拥塞控制?
网络拥塞控制有四种相互交织的算法,_即。_慢启动,避免拥塞,快速重传和快速恢复。让我简要地解释这四种算法,然后我们可以尝试了解拥塞窗口在确定整个网络性能方面的重要性。
注意:要有效地理解本文,需要了解与TCP相关的各种定义。然而,下面解释了两个重要的定义。
cwnd(拥塞窗口)是一个TCP状态变量,用于控制在收到确认之前可以发送到网络的数据量。另外,rwnd(接收方窗口)是一个TCP变量,用于告诉接收方可以接收的数据量。两者都有助于TCP拥塞和流量控制。
慢启动是一种算法,可逐渐增加注入网络的数据量并找到网络的最佳数据承载能力。它与发送方和接收方之间的连接进行协商,以确定最佳窗口大小。拥塞窗口(cwnd)是发送方限制,而接收方的广告窗口(rwnd)是接收方限制。 最初,发送方以较小的拥塞窗口(initcwnd)值发送数据。只要接收方不断确认每个数据包或任一数据包,发送方就不断增加窗口值,达到了ssthresh限制。当这种情况发生时,避免拥塞就接管了。
在慢速启动过程中,TCP实现根据以下公式增加cwnd值。
cwnd + =分钟(N,SMSS)
N –传入ACK中已确认的先前未确认的字节数。
SMSS (Sender's Max Segment Size)–发送方的最大段大小。
当cwnd值大于初始设置的 ssthresh 值时,避免拥塞。在避免拥塞阶段,每个RTT的cwnd大约增加1个分段。以下等式可用于相同的公式。
cwnd + = SMSS * SMSS / cwnd
快速重传和快速恢复 通过使用三重重复ack的概念来帮助提高数据速率发送。当收到乱序的段时,接收方立即将重复的ack发送给发送方。当发送方收到同一数据包的三重dup确认时,它立即发送丢失之间的段,而无需等待重传计时器到期。
CDN如何运作?
对于以Web为中心的公司或Web服务,性能和可靠性是直接影响用户体验并进而提高公司盈利能力的两个主要问题。商业CDN帮助他们缓存并将Web内容交付给用户。Web内容可以包括静态内容(例如,图像,视频,javascript文件等)到动态内容(例如,实时流或多人在线游戏)。CDN服务器位于主要地理区域,使内容更接近用户。
CDN在一个区域或世界各地的各种地理位置(使用边缘缓存或POP)缓存静态(以及动态)内容,从而使资源更接近用户,从而减少了往返时间。因此,当坐在印度的用户尝试访问对象时,最近的服务器可以将其发送给用户,从而减少了RTT,从而减少了页面加载时间并提高了效率。
工作流程: 考虑下图的示例。域名为 tianxun.com 的 Skyscanner(China)已注册CDN。ChinaCache(Skyscanner中国的CDN提供商)向他们提供CDN URL,例如 res.tianxun.com 。然后,开发人员配置为从CDN URL加载静态内容。因此,当坐在中国的用户A尝试访问 tianxun.com 时,浏览器使用链接的CDN URL请求任何对象。然后,CDN将请求分发到最近的CDN服务器,并且从位于最靠近它的位置A的该服务器提供内容。类似地,当用户B尝试访问Skyscanner时,它是由CDN服务器提供的,该CDN服务器位于位置D,因为它离它最近。这有助于提高网站性能,减少原始服务器上的负载,从而改善整体客户使用体验。
CDN使用包括Anycast路由在内的各种技术来分发请求。
任播路由
Anycast是路由和寻址策略的网络技术,可确定客户端向服务器请求资源之间的最佳路径,这些路径在地理位置上是分布的。Anycast通过从托管在多个位置的服务器发布相同的IP地址来工作。网络层的动态路由有助于将数据包路由到最近的服务器(跳数最少)。我们可以将其称为单播到最近的地址,因为从所有可用的接收器中仅选择了一个接收器(最近的接收器)。
我们知道,当客户端在其数据包标头中发送带有任播IP地址的请求时,是路由器会从运行同一服务的多台服务器中选择最佳(最近)目的地。Anycast是使用边界网关协议(BGP)实现的。BGP将自治系统编号用于其域间路由。要深入了解任播的实现,我们需要了解域间路由和BGP的工作。要了解有关此内容的更多信息,请参阅BGP rfc 4271。
TCP Anycast之所以在CDN中脱颖而出的主要原因是,它有助于减少延迟,从而加快了页面加载时间,从而提高了网站的性能。这是CDN受欢迎的主要原因。
TCP初始拥塞窗口的重要性
TCP初始拥塞窗口或initcwnd在启动TCP连接期间使用。在HTTP会话开始期间,当客户端请求资源时,服务器initcwnd确定在初始数据突发期间将发送多少个数据包。
如果initcwnd值较大,则下载同一文件所需的RTT将会更少。但是由于网络环境,我们不能将initcwnd设置为一个巨大的值,并且路由器还具有有限的缓冲区的限制。如果设置的值过大,则可能导致路由器缓冲区溢出,数据包丢失,数据包重传。因此,我们需要为initcwnd设置一个与网络带宽成正比的最佳值。
自从引入此tcp参数以来,由于大多数现代Web交易的寿命很短,并且全球网络的平均速度已在相当长的时间内发展,因此RFC 6928在Google于2010年发表研究报告后才引入,以将initcwnd的默认值增加到10个细分(最多14600字节)。
现代网络和网络空间
如今,互联网以运行在短暂TCP连接之上的网络流量为主导。甚至在慢启动算法退出之前,很大一部分Internet流量就已经完成。
网络空间正在不断增长,并且正以指数级的速度增长。Web对象已明显变大。只有一小部分网络对象(约占所有Google响应的10%)可以容纳4KB的空间。
同时,网络速度和速度也都在发展。即使有相当数量的并发会话,十个网段也可能适合任何宽带访问链路上可用的队列空间。
Google发表了一篇论文,他们在其中量化了通过大规模实验使用较大的initcwnd带来的延迟收益和成本。此后,主要的商业CDN在那里增加了其服务器中的initcwnd值。
主要CDN的Initcwnd设置
2014年初,CDNPlanet发布了一系列主要CDN的initcwnd值的结果。我们想看看在过去三年中发生了什么变化。使用CDNPlanet开源的脚本,我们找出了一些主要CDN的当前initcwnd值。我们还观察到了一些有趣的行为,我们将在观察部分中介绍。
实验装置
我们在五个不同的地理区域中设置了五个EC2实例。俄勒冈州,弗吉尼亚州,悉尼,伦敦和新加坡覆盖全球大部分地区。我们使用这些实例使用不同的CDN将请求发送到不同的网站。我们配置并运行了Turbobytes提供的initcwnd checker的go脚本。
结果
这是我们根据2017年1月通过实验收集的值和CDNPlanet在2014年8月发布的值绘制的比较图。我们可以看到,大多数CDN随时间增加了initcwnd值。这可能是由于我们之前讨论的原因。该聚集结果也予以公布。
观察结果
大多数CDN都增加了其initcwnd的价值。随着全球平均网络带宽的不断增长,增加initcwnd值只会减少往返时间,页面加载时间并总体上提高性能。
我们为每个请求收集了目标服务器的IP地址。并观察到,即使我们请求来自不同地区(俄勒冈,弗吉尼亚,悉尼,伦敦和新加坡)的资源,大多数CDN的目标IP仍然保持不变。下表中对此进行了描述。
CDN
俄勒冈州IP
悉尼知识产权
伦敦知识产权
新加坡知识产权
高风
69.16.175.10
69.16.175.10
69.16.175.10
69.16.175.10
最大CDN
108.161.189.85
108.161.189.85
108.161.189.85
108.161.189.85
我们进行了另一项测试,以确认它们是否为任播IP地址。我们从不同区域进行了traceroute到相同ip地址的操作,并观察了数据包经过的中间和最后一跳区域。我们注意到,当请求来自不同区域时,过渡和最后一跳地理区域是不同的。因此,我们可以得出结论,它们是任播IP地址。
对于MaxCDN,从弗吉尼亚州,俄勒冈州,悉尼伦敦,新加坡返回的请求资源的目的地IP为108.161.189.85。上表描述了来自多个位置的临时和最后一跳区域。研究该表得出的结论是 ,MaxCDN从不同区域通告的IP是任播IP。实际上,大多数主要CDN现在都在其体系结构中使用任播ip地址。
对于列表中的两个CDN。我们在上面进行实验的Akamai和ChinaCache观察到,对于不同类型的请求,initcwnd值是不同的。例如,Skyscanner china(tianxun.com),苏富比和EnglishCentral China使用ChinaCache作为其CDN。我们获得的initcwnd值分别为10、16和20。Paytm,Flipkart和ESPN使用Akamai作为其主要CDN,我们发现的值分别为10、16和32。因此,我们认为他们可能会根据客户提供initcwnd定制。但是随后我们又做了一个有趣的观察。对于美国《福布斯》而言,initcwnd为16,而《福布斯》印度版initcwnd为32。因此,即使对于相同的客户,但在不同的地区(具有不同的域),initcwnd的值也不同。同样,对于特定请求,所有这些值都是一致的,而与源位置无关。
结论
我们可以从整个实验中得出三个主要结论。
- 随着网络空间和Web环境的发展,CDN多年来不断更新其initcwnd值。
- 许多CDN在其体系结构中实施了Anycast IP路由,以提高速度,减少延迟并提高其客户网站的性能。
- 根据客户或地理区域,某些CDN(例如Akamai)能够提供自定义的initcwnd值。