网络排查案例课
杨胜辉
eBay 资深运维专家,流量系统负责人
22781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
实战三:不用抓包就能做的网络排查篇 (2讲)
网络排查案例课
15
15
1.0x
00:00/00:00
登录|注册

13 | 重传的再认识:没有任何丢包却也一直重传?

客户端必须重组数据包
LB只确认部分数据
客户端发送数据包
确认号是字节级别的
确认号可以是序列号+部分载荷
排查进入“极限区”
不存在的“序列号为27741”的数据包
客户端进行快速重传
LB连续发送DupAck
客户端发送数据包
观察DupAck和TCP fast retransmission
LB和网络层面抓包分析
客户端访问LB VIP慢
客户端直接访问服务器正常
客户端 -> LB -> 服务器路径测试
Response Timeout报错
抓包示例文件
确认号在中间位置的情况
接收端处理迟到的确认包
关注规律性现象
对比客户端和服务端耗时
实事求是的态度进行分析
了解重传现象和成因
网络排查要核对事实和数据
通过扩大TCP receive buffer size规避Bug
LB的Bug导致确认号异常
异常交换过程
确认号的理解
寻找丢失的数据包
快速重传原因
抓住排查重点
应用层分析
操作系统控制重传行为
TCP依托于操作系统
可能误以为是网络丢包
满屏的TCP Retransmission
附录
思考题
小结
真相大白
TCP的本质
网络排查推进
eBay HTTP请求慢问题分析
操作系统对TCP协议栈的实现
TCP重传现象
TCP重传的再认识

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

你好,我是胜辉。
在上节课,我带你深入探讨了 TCP 重传的知识点,包括超时重传和快速重传。想必你对于重传的现象和背后的原理,也已经有了不少的了解。那么现在,你可以来思考这样一种情况:用 Wireshark 打开一个抓包文件,你看到了满屏的 TCP Retransmission,第一感觉会是什么?
你应该会认为是掉包了,所以客户端重传了对吧?可能是网络路径上出了状况。
但实际上,网络状况是重传的一个重要因素,却不是唯一。另外一个因素也同样重要:操作系统对 TCP 协议栈的实现
这是因为,TCP 等传输协议不是无根之木,它们必须依托于操作系统而存在,包括各种客户端、服务端、网络设备等等。就以重传为例,表面上看是由于网络状况而引发的,但其实真正操控重传行为自身的,还是操作系统,确切地说,是 TCP 通信两端的操作系统。
所以,在这节课里,我会给你再介绍一个十分特殊的案例,带你用一种全新的视角来审视 TCP 重传。通过这节课的学习,你将会对 TCP 的基本设计,特别是其中最复杂的知识点之一的重传部分,有更加深刻的理解。这样即使以后你在工作中遇到各种奇怪的 TCP 问题的时候,也不会再轻易被它们的表面所迷惑,而是能有更加准确的判断了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过实际案例介绍了eBay的HTTP请求慢的问题排查过程,从应用层分析到抓包排查,最终发现了LB和网络层面的问题。通过Wireshark抓包分析,发现了规律性的DupAck和重传现象,揭示了重传背后的未知机制。文章深入探讨了TCP重传现象,帮助读者更深刻理解TCP的基本设计,特别是重传部分,为读者在工作中遇到TCP问题提供了更准确的判断和解决思路。文章内容详实,逻辑清晰,对网络排查和TCP重传问题有很好的指导意义。文章还介绍了TCP协议的规范和对排查过程的启发,提出了对排查期间发现的规律性现象的重点关注,以及对于“超时、处理慢”这类问题的排查思路。文章总结了一个比较罕见的案例,对读者有很好的指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络排查案例课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • MeowTvづ
    这一讲的例子也说明,两端没有开启SACK技术:)

    作者回复: 哈哈,确实如此~

    2022-02-18
    4
    6
  • 那时刻
    根据rfc793文档,for ESTABLISHED STATE,If the ACK is a duplicate (SEG.ACK < SND.UNA), it can be ignored. 在链接状态的时候,如果收到ack number小于未被ack的number,这个ack包会被忽略。我粗略看了下文档,其它状态下,貌似没有说明,不知是否有遗漏。 老师提到通过扩大 TCP receive buffer size,使得缓冲区足够大,做到了对 Bug 的规避。请问是把net.ipv4.tcp_rmem扩大到多少呢?

    作者回复: 是的,就是这段,你找的很对。另外调整接受缓冲区,对这个设备来说是配置一个profile,跟linux还是不同的,设备的tcp是自己维护的并不是内核,所以方式也不同。如果是linux,就是你说的配置了~

    2022-02-18
    3
    2
  • taochao_zs
    1 根据滑动窗口定义:左边界不会左移只会右移(推进),收到左边已确认的重复确认包会直接丢弃。 2 老师说的问题还没碰到过,以后碰到再补上;)

    作者回复: 正确,这个ack报文会被忽略 以后遇到类似问题心里有底了:)

    2022-02-18
    2
  • Realm
    1 直接丢掉,服务端说,别把我当傻子,我这里记着呢;2 没有遇到,感谢老师的“惊艳”分享,很奇葩,这种分组好的,重新拆开,又组装成新的分组,对性能影响巨大.

    作者回复: 正确!:) 可以参考内核的这几行代码对老旧ack的处理,很直白: /* If the ack is older than previous acks * then we can probably ignore it. */ if (before(ack, prior_snd_una)) goto old_ack;

    2022-02-18
    1
  • Geek_糖厉子
    在吗老师能发我一点数据包案例吗?我这需要素材

    作者回复: 大部分案例都有示例文件,比如本节的文件在这里:https://gitee.com/steelvictor/network-analysis/tree/master/13

    2023-03-21归属地:上海
  • Geek_413acb
    老师,这个例子很精彩。有两个问题,麻烦看一下: 1. 为啥有这么多的dup ack呢?不是收到data才会ack吗?但是tcpdump后面并没有看见几个发给lb的数据报啊? 2. 另外为啥最后lb突然ack了101525,而不是每个包都要求拆成2半重传呢?

    作者回复: 您好,关于这两个问题: 1. lb回复的很多个DupAck是那个“错位”位置后面的客户端发给LB的报文触发的,因为当时LB的接收窗口比较大,所以客户端连续发送很多数据,只是在大约30KB左右的地方发生了“错位”,于是后面30KB就变成了触发许多个DupAck的原因 2. 这个问题本质上是LB的bug,在示例文件中用tcp.stream eq 0 and not tcp.srcport eq 80过滤出报文,可以看到最后一次“错位”是在37961,之后LB恢复了正常,而由于大部分报文其实也已经到达LB,所以最终LB“突然ack了101525”。看起来略显突兀,不过也是可以解释的~

    2022-05-17
  • 青鸟飞鱼
    老师是个健身达人啊

    作者回复: 还行,准备一直健康工作下去:)

    2022-04-19
  • 山丘
    tcp的学习接近尾声了,把之前困扰多年的tpc层概念 MSS,MTU,窗口,拥塞,dupAck,重传,快速重传这些之前打开wireshark抓瞎的东西都搞清楚,对wireshark的了解和使用能力也大大提高了,非常感谢杨老师的课程,真是受益匪浅。 另外这一讲还有个问题没搞懂,请杨老师指教: LB对于发送过来的1460个字节只ack了512个字节,杨老师说 剩余的948字节需要和下一个包的前 512 字节,组合在一起,变成一个新的 1460 字节的包,再发送给客户端。但在抓包文件里并没有看到报文的nextSeq为27741+1460 = 29201的报文,看这个抓包文件里好像并没有重新组装报文?或者说在这个抓包文件里哪个报文是重新组装后的报文呢?

    作者回复: 感谢你的支持,而且你也真的认真去实践了,怪不得能把之前模糊的概念都清楚了,这门课程的核心思想就是“实践出真知”:) 关于你提的nextSeq问题,你可以去找的是27741+948=29689,这个在抓包文件里就有~

    2022-03-02
    2
  • Geek_93970d
    增大接受缓冲区为何能规避这个 BUG?接受缓存能放更多东西,但是,没开 SACK 的话,客户端会将乱序开始之后的数据都重发一遍,客户端依然需要拆包重组呀
    2023-04-02归属地:北京
    1
  • 原则
    老师我看抓包文件里面并不都是标准的 70 个 Dup ACK,这个只是一个大概吧? 另外,为什么会有这么多的 Dup ACK,看起来也没有这么多的数据报文发过来呀?
    2023-06-07归属地:广东
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部