TCP

前言

因特网有两个核心协议包括ip和tcp,ip负责主机之间的路由选择和寻址,而tcp负责传输。

三次握手

正常开始通讯之前都要经过三次通讯确定,第一次发送给服务器端,第二次服务返回,第三次发送应用数据。就三次通讯的模型来讲,通讯建立连接是昂贵的。图解下就非常清楚了:

拥塞预防以及控制

常见的是ip网关在连接不同带宽时经常因为差别性,导致拥塞崩溃,为此tcp引进了很多机制来解决这个问题。

流量控制

流量控制就是根据场景去限定服务器或者用户的窗口大小,比如一般情况下是从服务器下载内容到客户端,此时的瓶颈是客户端;而如果是上传资料,此时的瓶颈是服务器端。如果发生了拥塞的情况,那么就会返回一个较小的窗口,如果窗口为0,那么就会清空缓存,然后接收剩余的数据。

慢启动

慢启动存在的原因是虽然有了流量控制,但是在连接初期,我们不清楚双方的窗口大小,所以需要从初始字段指数级增长直到达到或者超过其峰值。也就是说,我们不可能开始就直接使用宽带的最大值。

拥塞预防

拥塞预防,指的是通过慢启动达到或者超过宽带最大值之后,直接减倍,然后变成小数量的线性增长,直到达到其阙值。这个过程需要多次往返。(其中一次往返的时间我们称为RTT)。
其中还有一个比较重要的概念是:慢启动重启机制,指的是一定时间后重置连接的拥塞窗口,原因是一段时间后网络情况可能发生了变化,因此将窗口重置为安全的默认值。

带宽延迟积

概念解释:数据链路的容量与其端到端的延迟的乘积。这个结果就是任意时刻处于在途未确认状态的最大数据量。
换句话就是说无论实际带宽和速度是多少,其实际能使用到的最大带宽时被贷款延迟积限制的。假设我们发送端以及接收端的窗口大小都为16kb,往返时间为100ms,最终计算得到的可用的最大速率是1.31m/s.

队首阻塞

要理解这个阻塞产生的原因,必须要了解tcp传输的机制是什么,它会每个分组都携带唯一的序列号触发,而却所有的分组必须按照顺序到达接收端,如果不是按顺序的,或者丢失数据,也就是我们说的丢包,那么后续收到的必须等待丢失的部分全部到达才能访问数据。这种效应就是队首阻塞。

针对tcp的优化建议

总结下tcp的基本特点:

  • 三次握手增加了整整一次的往返时间
  • 慢启动将整个应用到每个新连接
  • tcp的流量以及拥塞控制将影响所有连接的吞吐量
  • tcp的吞吐量由拥塞窗口的大小控制

分析结果:

  • 高速网络中的tcp的传输速度受到往返时间的控制
  • 宽度不断增长,但还是低于光速,短期内无法突破
  • 大多数情况下,tcp的瓶颈还是因为延迟而不是带宽

服务器配置调优

首先建议你将主机的操作系统升级到最新的版本,因为tcp的最佳实践以及影响性能的底层算法一直在于是俱进,大多数的变化只有在最新的内核中才有实现。

有了最新的内核,那么你可以遵循下面的最佳实践配置服务器:

  • 增大tcp的初始拥塞窗口。可以让其在第一次就传输比较多的数据,减少慢启动中的往返次数。
  • 慢启动重启,在连接空闲时禁止慢启动可以改善瞬时发送数据的长tcp连接的性能
  • 窗口缩放,启用窗口缩放可以增大最大接受窗口的大小,可以让高延迟的连接达到更好的吞吐
  • tcp快速打开,需要客户端和服务器共同支持,是一种优化选项

应用程序行为调优

  • 减少发送
  • 减短发送的距离
  • 重用tcp连接

优化清单

  • 服务器内核升级
  • 确保cwnd大小为10或其他
  • 禁用空闲后的慢启动
  • 确保启动窗口缩放
  • 减少传输冗余的数据
  • 压缩传输的数据
  • 把服务器部署到和用户近的位置,减少往返时间
  • 尽可能重用已经建立的tcp连接

更多

语雀原文链接:TCP常识

更多《web性能权威指南》的读书笔记请关注语雀专辑《前端小册》之性能篇,一起学习探讨前端那些除了三大件应该知道的技术常识。

转载于:https://juejin.im/post/5ca049fee51d456ad33055c7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值