网站推广优化方式,网站建设培训达内,网站ui案例,教育类网站源码为什么要把服务器放在离用户很近的地理位置上#xff1f;其中一个原因是为了实现更低的延迟。当您发送的数据是短的、应该尽可能快的传输数据时#xff0c;这很有意义。但如果是大文件#xff0c;比如视频等大文件呢#xff1f;当然#xff0c;在接收第一个字节时肯定会有…为什么要把服务器放在离用户很近的地理位置上其中一个原因是为了实现更低的延迟。当您发送的数据是短的、应该尽可能快的传输数据时这很有意义。但如果是大文件比如视频等大文件呢当然在接收第一个字节时肯定会有延迟惩罚但之后不应该一帆风顺吗通过TCP发送数据时像HTTP一样一个常见的误解是带宽与延迟无关。但是对于TCP来说带宽是延迟和时间的函数。我们来看看是怎么做到的。握手在客户端开始向服务器发送数据之前它需要对TCP进行握手对TLS进行另一个握手。TCP使用三向握手来建立一个新的连接。发送方选择一个随机生成的序列号 x 并发送一个SYN数据包给接收方接收方递增 x选择一个随机生成的序列号 y 并发送一个SYN/ACK数据包。发送方递增序列号并回复一个ACK数据包和第一个字节的应用数据。TCP使用序列号是为了保证数据的有序、无漏洞的传递。握手握手引入了一个完整的往返这取决于底层网络的延迟。TLS 握手也需要最多两次往返。在TLS连接打开之前不能发送任何应用数据这意味着在这之前你的带宽是零。回程时间越低建立连接的速度就越快。流量控制流量控制是一种回避机制实现的目的是防止发送方压倒接收方。接收方将传入的TCP数据包存储到一个接收缓冲区等待应用程序处理。流量控制每当接收方承认一个数据包时接收方也会向发送方反馈缓冲区的大小。如果发送方尊重协议发送方就会避免发送更多可以装入接收方缓冲区的数据。流量控制这种机制与应用层面的速率限制没有太大区别。但是与API密钥或IP地址上的速率限制不同TCP是在连接层面上的速率限制。发送方和接收方之间的往返时间(RTT)越低发送方就越能使其输出带宽适应接收方的容量。拥堵控制TCP不仅要防止接收方不堪重负还要防止底层网络被淹没。发送方如何知道底层网络的可用带宽是多少唯一的方法就是通过测量来估算。其思路是发送方维护一个所谓的 拥塞窗口。拥塞窗口表示不等待对方的回执可以发送的未完成的数据包总数。接收器窗口的大小限制了拥塞窗口的最大大小。拥塞窗口越小在任何给定的时间内可以飞行的字节数就越少带宽的利用率就越低。当建立新连接时拥塞窗口的大小被设置为系统默认值。然后每承认一个数据包窗口的大小就会成指数级地增加。这意味着我们不能在建立连接后立即使用网络的全部容量。再次来回时间越低发送方就越能迅速开始利用底层网络的带宽。拥堵控制如果数据包丢失了怎么办当发送方通过超时检测到漏报时一个叫做 拥塞避免 的机制就会启动拥塞窗口大小就会减小。从此以后时间会使窗口大小增加一定的量超时则会使窗口大小减少另一个。如前所述拥塞窗口的大小定义了无需等待确认就可以发送的最大比特数。而发送者需要等待一个完整的往返才能得到一个确认。所以将拥塞窗口的大小除以往返时间就可以得到最大理论带宽。带宽 WinSize / RTT这个简单的等式表明带宽是延时的一个函数。TCP会非常努力地优化窗口大小因为它对往返时间无能为力。但是这并不总是能得到最佳配置。总结一下拥塞控制是一种自适应机制用于推断网络的底层带宽和拥塞情况。类似的模式也可以应用在应用层面。想一想当你在Netflix上看一部电影时会发生什么它开始模糊然后它会稳定到合理的程度直到出现打嗝质量再次恶化。这种应用于视频流媒体的机制被称为自适应比特率流媒体。记住这一点如果你使用的是HTTP那么你就得听从底层协议的安排。如果你不知道香肠是怎么做的你就无法获得最好的性能。突发请求会受到冷启动惩罚。使用TCP和TLS握手协议发送第一个字节可能需要多次往返。而且由于拥塞控制的工作方式往返时间越低底层网络的带宽利用得越好。在这个问题上已经写了整整一本书你可以做很多事情来榨取每一盎司的带宽。但是如果你必须记住一件事那就是关于TCP的事情。你不能以光速发送数据但你可以做的是把你的服务器放在离客户端更近的地方并重复使用连接来避免冷启动惩罚。