• MeowTvづ
    2022-02-18
    这一讲的例子也说明,两端没有开启SACK技术:)

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

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

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

    
    2
  • Realm
    2022-02-18
    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;

    
    1
  • 那时刻
    2022-02-18
    根据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,就是你说的配置了~

    共 3 条评论
    1
  • Geek_糖厉子
    2023-03-21 来自上海
    在吗老师能发我一点数据包案例吗?我这需要素材

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

    
    
  • Geek_413acb
    2022-05-17
    老师,这个例子很精彩。有两个问题,麻烦看一下: 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-04-19
    老师是个健身达人啊

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

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

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

    共 2 条评论
    
  • 原则
    2023-06-07 来自广东
    老师我看抓包文件里面并不都是标准的 70 个 Dup ACK,这个只是一个大概吧? 另外,为什么会有这么多的 Dup ACK,看起来也没有这么多的数据报文发过来呀?
    
    
  • Geek_93970d
    2023-04-02 来自北京
    增大接受缓冲区为何能规避这个 BUG?接受缓存能放更多东西,但是,没开 SACK 的话,客户端会将乱序开始之后的数据都重发一遍,客户端依然需要拆包重组呀
    
    