作者回复: 哈哈,确实如此~
作者回复: 正确,这个ack报文会被忽略 以后遇到类似问题心里有底了:)
作者回复: 正确!:) 可以参考内核的这几行代码对老旧ack的处理,很直白: /* If the ack is older than previous acks * then we can probably ignore it. */ if (before(ack, prior_snd_una)) goto old_ack;
作者回复: 是的,就是这段,你找的很对。另外调整接受缓冲区,对这个设备来说是配置一个profile,跟linux还是不同的,设备的tcp是自己维护的并不是内核,所以方式也不同。如果是linux,就是你说的配置了~
作者回复: 大部分案例都有示例文件,比如本节的文件在这里:https://gitee.com/steelvictor/network-analysis/tree/master/13
作者回复: 您好,关于这两个问题: 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”。看起来略显突兀,不过也是可以解释的~
作者回复: 还行,准备一直健康工作下去:)
作者回复: 感谢你的支持,而且你也真的认真去实践了,怪不得能把之前模糊的概念都清楚了,这门课程的核心思想就是“实践出真知”:) 关于你提的nextSeq问题,你可以去找的是27741+948=29689,这个在抓包文件里就有~