作者回复: 非常好,而且全面,这些理解都是正确的,感觉你进步明显:)也请继续加油~
作者回复: 赞:)其中的2字节是kind和length的各一个字节~
作者回复: 是的,ack本身没有ack了,否则就是无限循环了。根据不同的场景,对端会启动超时重传或者快速重传,这样就还是能保证传输。要保障传输可靠性,这就是是tcp如此复杂和精妙的原因。
作者回复: 说的很好:)网络要做好质量可靠性,应用也需要做到比较好的容错性,两者合作,这样就最大程度的保证系统可靠性了。
作者回复: 有意思的问题:)你tcpdump时候有没有启用混杂模式(promiscuous mode)?可能drop的是广播包(目标MAC是全1),而启用混杂模式会收下这种报文。
作者回复: 1. 开启SACK的情况下,就是你说的 2. 没开启SACK的情况,假设接收端收到了1~1000字节的数据,而第1000~1500未收到;发送端持续重传2000~2500这些数据,那么接收端还是只ACK 1000,当然更没有SACK
作者回复: 应该说是34 36这些报文的序列号,跟前面30(也就是32之前的报文)的nextseq连不上了,按tcp的规定,tcp头部的确认号必须是连续字节,如果“跳空”了,就只能ack最近的连续字节位置。每次收到这种“跳空”的报文,确认报文还是要回复的,只是确认号会重复,你看看这样说可以清楚一点吗
作者回复: 恩是34 36 38:)
作者回复: 嗯回答挺好的:)这里面的DSACK我没有在课程中提及,但确实是一个知识点,有时候工作中也会遇到。DSACK的作用向对端表示“我重复收到了某些报文”,这样对端可以相应的做传输优化,比如拥塞控制行为的调整。 重传是TCP应对网络网络的行为,本质上不能算是“根因”,而是一种外化表现,有时候重传是正常的,有时候表示真的有问题,然后就需要针对这些重传的具体情况来分析应对了~
作者回复: 时间有点久远了,记得没错的话,当时的具体原因应该是路由选的某条公网链路质量不稳定,容易丢包,导致了重传。跟客户协商更换线路后,质量就好了很多。 关于进一步排查路径上的准确问题节点的相关工具和方法,在课程后半程里会专门介绍,特别是当我们大部分人是网络使用者,也就是通信两端的所有者时,可以采用的排查方法。敬请期待~