Linux 内核技术实战课
邵亚方
前蘑菇街技术专家,Linux Kernel 活跃贡献者
23704 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 26 讲
Linux 内核技术实战课
15
15
1.0x
00:00/00:00
登录|注册

13 案例篇 | TCP拥塞控制是如何导致业务性能抖动的?

tcp_probe
TCP连接cwnd
拥塞窗口
发包超时时间
发包函数
TCP连接阻塞
RTO
重传机制
BBR
优化Cubic拥塞控制算法
丢包问题
乱序报文
TCP Segments
init_cwnd
net.ipv4.tcp_window_scaling
TCPZeroWindowDrop
rwnd
TCP拥塞控制基础
快速重传和快速恢复
拥塞避免
慢启动
接收方的影响
TCP拥塞控制
TCP拥塞控制与业务性能抖动

该思维导图由 AI 生成,仅供参考

你好,我是邵亚方。这节课我来跟大家分享 TCP 拥塞控制与业务性能抖动之间的关系。
TCP 拥塞控制是 TCP 协议的核心,而且是一个非常复杂的过程。如果你不了解 TCP 拥塞控制的话,那么就相当于不理解 TCP 协议。这节课的目的是通过一些案例,介绍在 TCP 拥塞控制中我们要避免踩的一些坑,以及针对 TCP 性能调优时需要注意的一些点。
因为在 TCP 传输过程中引起问题的案例有很多,所以我不会把这些案例拿过来具体去一步步分析,而是希望能够对这些案例做一层抽象,把这些案例和具体的知识点结合起来,这样会更有系统性。并且,在你明白了这些知识点后,案例的分析过程就相对简单了。
我们在前两节课(第 11 讲第 12 讲)中讲述了单机维度可能需要注意的问题点。但是,网络传输是一个更加复杂的过程,这中间涉及的问题会更多,而且更加不好分析。相信很多人都有过这样的经历:
等电梯时和别人聊着微信,进入电梯后微信消息就发不出去了;
和室友共享同一个网络,当玩网络游戏玩得正开心时,游戏忽然卡得很厉害,原来是室友在下载电影;
使用 ftp 上传一个文件到服务器上,没想到要上传很久;
……
在这些问题中,TCP 的拥塞控制就在发挥着作用。

TCP 拥塞控制是如何对业务网络性能产生影响的 ?

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

TCP拥塞控制是网络通信中的关键环节,本文深入介绍了TCP拥塞控制的原理和影响,帮助读者理解其与业务性能抖动之间的关系。文章首先解释了TCP拥塞控制的基本原理,包括慢启动和拥塞避免两个阶段。针对丢包问题,文章介绍了针对网关服务的TCP单边优化工作以及对Cubic拥塞控制算法的优化。此外,还探讨了快速重传和快速恢复的优化策略,以及RTO的改进对业务阻塞时间的影响。文章还详细介绍了TCP连接中拥塞窗口和接收窗口的动态变化,以及如何通过tcp_probe来实时观察TCP连接的数据传输状况。总的来说,本文通过深入浅出的方式,帮助读者了解了TCP拥塞控制的原理和对业务网络性能的影响,为读者提供了一定的技术参考和优化建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Linux 内核技术实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 邵亚方
    置顶
    课后作业答案: - 通过 ssh 登录到服务器上,然后把网络关掉,过几秒后再打开,请问这个 ssh 连接还正常吗?为什么? ssh使用的TCP协议,也就是它是有连接的,这个连接对内核而言就是tcp_sock这个结构体,这个结构体会记录该TCP连接的状态,包括四元组(src_ip:src_port - dst_ip:dst_port),该连接的路由信息也被保存着。关闭网络后,该TCP连接的这些信息都还在,如果两边没有数据交互的话,这些信息就不会被更新,也就你一直存在着,当你再次打开网络,该连接还可以正常使用;假如关闭网络后,该TCP连接有数据交互,此时就会检查到异常,同样的也会去更新TCP连接状态信息,就有可能会断开这个连接。除此之外,TCP还有keepalive机制,如果该连接长时间没有数据,keepalive机制也会把该连接给关闭掉。
    2020-10-11
    24
  • 我来也
    课后思考题: 这个应该是不确定的。 以前也测试过,只要在网络断开期间不主动发送数据,就会晚一点探测到连接已断开。 如果不主动发数据,可能网络恢复时,连接就自动恢复了。

    作者回复: 对的!

    2020-09-18
    2
    8
  • 黑客不够黑
    我们金融交易平台的生产环境出现过一个案例,每天早上9点开盘会有用户集中登录的情况,其中登录链路中有两个服务,部署在两台服务器上,事故当天就出现了很多用户无法登陆的情况,开发人员排查日志发现这两个服务之间的通信有非常大的延时,A服务发的消息,B服务过了很久才收到,时间5分钟到20分钟不等,我们运维小伙伴监控服务器的负载非常低,CPU,内存,io都很正常,甚至我们还有专门的程序每秒探测内网机器的存活,ping包每秒一次,延时也都在毫秒级别。所以当时判断可能是两个服务之间的tcp链接出了问题,我比较怀疑是接收方窗口变为0了,但苦于没有抓包无法验证猜想,并且此类事件再也没有出现,但是心里一直存在疑惑,所以想问问老师,在您看来这种情况比较可能原因有哪些?

    作者回复: 看你的描述,这类问题大概率跟TCP缓冲区有关系。A服务所在机器的发送缓冲区太小,或者B服务所在服务器的接受缓冲区太小,都会导致缓冲区排队严重,甚至引起丢包,接受窗口变为0也可能会出现。 我建议你可以适当的增加TCP缓冲区大小。 你可以通过ss -natp来看是否存在数据积压的情况。

    2020-11-07
    7
  • solar
    cwnd和rwnd使用的单位是什么呢?

    作者回复: TCP segment个数

    2020-10-10
    3
    6
  • Ilovek8s
    keepalive心跳的时间里如果不发送ssh命令操作,断开网络之后再重新打开,由于TCP有重试机制,是可以恢复的,但如果keepalive开始检查了,服务端发现客户端是死的之后就会关闭连接

    作者回复: 对的。

    2021-03-14
    4
  • webmin
    要分情况: 1. 如果关闭网络是发生在Client端或Server端的机器上,那么网络恢复后连接不会正常; 2. 如果关闭网络是发生在Client端与Server端之间链路中的某个路由节点上; 2.1 Client端到Server端之间有多条路可用,只要不是和CS直连这个设备有问题,那么设备可以选择其它路走,这时连接还是正常的; 2.2 Client端与Server端之间链路有NAT,且网络关闭发生与NAT端相关的设备上,那么连接就不正常; 2.3 Client端与Server端之间只有一条路,只要不是和CS直连这个设备有问题,那么如果网络在发生tcp_keepalive之前恢复,那么连接还是正常的; 3. 以上讨论的都是在TCP/IP协议情况下,网上查了一下SSH有居于UDP的方案(http://publications.lib.chalmers.se/records/fulltext/123799.pdf),如果走UDP的话这个要看SSH应用层的保活或SESSION有效期是否超过网络关闭时间,大小则可以连接,小于则关闭。

    作者回复: 很赞!总结的比较全面,很多因素都考虑到了。

    2020-09-18
    2
    4
  • jssfy
    引用:对此,我们使用 tcpdump 在 server 上抓包后发现,Client 响应的 ack 里经常出现 win 为 0 的情况,也就是 Client 的接收窗口为 0。于是我们就去 Client 上排查,最终发现是 Client 代码存在 bug,从而导致无法及时读取收到的数据包。 请问这里的前一句的接收窗口为0和后一句的代码bug是有什么逻辑关系吗?这里没太看懂

    作者回复: 哦 是应用被阻塞住 没有及时从缓冲区里读取数据 导致缓冲区满

    2020-09-19
    3
  • 我能走多远
    感谢老师分享,学习了拥塞控制的原理,慢启动,拥塞避免,快速重传和快速恢复。cwnd和rwnd使用的单位是什么呢? TCP segment个数。每个segment的长度就是mss的大小吗?

    作者回复: segment的大小最大是mss,最小的话就只是tcp header。

    2020-11-09
    2
    2
  • 董泽润
    连接是否正常,要看是否开启了 tcp_keepalive, 并且探测持续失败,连接才失效

    作者回复: 是的

    2020-09-17
    2
  • redseed
    老师你好,去年公司接入了跨境专线,使用默认对 CUBIC 算法时 TCP 的流量极不稳定,根据网上的优化建议增大了 TCP 的 sendbuf 适应这类高延迟网络,但是 TCP 的传输带宽反而下降了,想请教一下可能的原因出现在哪里?(PS. 后面我们使用了 BBR 算法并增大 sendbuf,这个对长肥管道有奇效...)
    2020-10-09
    1
    5
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部