12 | 重传的认识:重传到底是怎么回事?
该思维导图由 AI 生成,仅供参考
超时重传
- 深入了解
- 翻译
- 解释
- 总结
TCP的重传机制对于确保可靠传输至关重要。本文介绍了超时重传和快速重传两种重传类型,并通过案例分析了它们在网络中的应用。超时重传是在发送方未收到确认时重新发送报文,而快速重传则是在对端回复连续3个重复确认时触发。文章还讨论了重传超时的动态计算和调整。通过抓包分析,文章展示了快速重传和超时重传的具体情况,以及与之相关的专家信息和重传报文的解读。特别是针对快速重传的情况,文章详细解释了快速重传报文的产生原因,以及出现大量重复确认的背后原因。此外,文章还提到了TSO(TCP Segmentation Offload)对重传报文数量的影响。总的来说,重传机制是TCP保证可靠传输的重要手段,了解重传类型和相关参数对网络排查和优化至关重要。文章还介绍了SACK(Selective Acknowledgment)对重传的影响,以及SACK在TCP中的作用。文章通过案例分析和Wireshark技巧的介绍,帮助读者更好地理解TCP重传机制的实际应用和排查方法。总的来说,本文通过深入的技术讲解和实例分析,使读者对TCP重传机制有了更全面的了解,为网络排查和优化提供了有益的参考。
《网络排查案例课》,新⼈⾸单¥59
全部留言(13)
- 最新
- 精选
- 江山如画问题1: 分情况讨论。 1. 如果是三次握手时,第二个握手报文SYN+ACK 丢失,在经过一个 RTO 时间后,由于还没收到第三个握手报文,发生超时重传,会重传这个报文。(这种情况是我猜的,没有实际验证) 2. 如果发送端先后发送了报文n,n+1,接收端也先后确认了这两个报文,如果ACK[n] 传输时丢失,ACK[n+1] 正常传输,由于后者的确认范围涵盖了前者,那么即使 ACK[n] 丢失也不会有什么影响,则不会重传 ACK[n]。 3. 如果在情况2中,第 n+1 个报文是当前数据流的最后一个报文,且 ACK[n+1] 传输时丢失了,发送端经过1个RTO时间后会触发超时重传,接收端在接收到报文后会重传 ACK[n+1]。
作者回复: 非常好,而且全面,这些理解都是正确的,感觉你进步明显:)也请继续加油~
2022-02-17311 - MeowTvづ由于Option字段最大为40字节,所以SACK中只能装4组边界信息,SACK选项的最大占用字节数=4*8+2 = 34。
作者回复: 赞:)其中的2字节是kind和length的各一个字节~
2022-02-168 - 我来也思考题一:TCP 的确认报文如果丢失了,发送端还会不会重传呢?为什么? 我觉得要看实际情况。 1. 比如后续收到了更新的 ACK 报文,说明前面的内容都接收到了。发送端自然不会再重传前面的内容。 2. 如果说后续没有 ACK 报文了,触发了发送端的 超时重传,这个时候就会重传了。
作者回复: 是的,ack本身没有ack了,否则就是无限循环了。根据不同的场景,对端会启动超时重传或者快速重传,这样就还是能保证传输。要保障传输可靠性,这就是是tcp如此复杂和精妙的原因。
2022-02-164 - taochao_zs1 不会,ack是没有ack确认报文,所有没有重传的意义。2 重传的本质是:网络/应用/操作系统不稳定导致处理不及时,网络层避免重传应该重点关注网络流量工程的规划和建设,应用层和操作系统层关注重试机制的应对保证不稳定状态下业务稳定性。
作者回复: 说的很好:)网络要做好质量可靠性,应用也需要做到比较好的容错性,两者合作,这样就最大程度的保证系统可靠性了。
2022-02-162 - 志强老师您好 我的环境rx 几秒钟就会dropped值加一,但要是在环境上tcpdump抓包,rx的dropped就不变了,取消抓包,又几秒钟开始出现dropped值加一,请问老师这可能是什么原因 环境是微服务三台部署,没有任何业务
作者回复: 有意思的问题:)你tcpdump时候有没有启用混杂模式(promiscuous mode)?可能drop的是广播包(目标MAC是全1),而启用混杂模式会收下这种报文。
2022-02-2341 - xuty您好,请问下一般如何定位重传的网络设备区间呢?
作者回复: 可以参考第24讲的“用 mtr 定位丢包点”部分的内容。双向跑mtr可以定位到一个相对准确的区间,当然如果你有网络设备权限或者网络组支持,帮忙一起看是更好啦!
2023-09-11归属地:江苏 - 不忘初心老师,对于重传有些疑问。 1. 如果发送端网络报文因为延迟多次重发后,因为接收端已经收到过该报文, 是不是直接就将该报文丢弃了。并且回复SACK吗? 2. 如果SACK机制没有打开, 会怎么样? 会回复什么呢?
作者回复: 1. 开启SACK的情况下,就是你说的 2. 没开启SACK的情况,假设接收端收到了1~1000字节的数据,而第1000~1500未收到;发送端持续重传2000~2500这些数据,那么接收端还是只ACK 1000,当然更没有SACK
2022-11-15归属地:上海 - Realm快速重传如何触发?没有SACK的情况下,32号报文从服务端发出,在网络上丢了,后面服务端又发了34,36,38...,客户端在收到这些报文时,根据seq-len一看,发现我压根没有收到序列号是seq-len的32号报文,就一直回DupAck要32号报文,就触发快速重传了,老师,是不是这样理解?
作者回复: 应该说是34 36这些报文的序列号,跟前面30(也就是32之前的报文)的nextseq连不上了,按tcp的规定,tcp头部的确认号必须是连续字节,如果“跳空”了,就只能ack最近的连续字节位置。每次收到这种“跳空”的报文,确认报文还是要回复的,只是确认号会重复,你看看这样说可以清楚一点吗
2022-02-172 - Realm“我直接给你揭晓答案:就是因为从 32 号报文之后,服务端还继续发送了 14 个数据报文,远不止 3 个,所以触发的 DupAck 也远不止是 3 个。你可以直接看下图来理解这里的逻辑” ,老师,这个下面的图,是不是34、36、38触发重传更准确一点,35好像是反方向的数据包.
作者回复: 恩是34 36 38:)
2022-02-17 - ERROR4041.不会,接收端可以根据通过ACK来告诉发送端收到的收到的重复数据,每次服务端发送最新ACK号即可,即D-SACK。 2.重传还是看影响不影响到业务,实际是允许重传存在的。像互联网线路丢包或者营销等引起流量突升的重传。
作者回复: 嗯回答挺好的:)这里面的DSACK我没有在课程中提及,但确实是一个知识点,有时候工作中也会遇到。DSACK的作用向对端表示“我重复收到了某些报文”,这样对端可以相应的做传输优化,比如拥塞控制行为的调整。 重传是TCP应对网络网络的行为,本质上不能算是“根因”,而是一种外化表现,有时候重传是正常的,有时候表示真的有问题,然后就需要针对这些重传的具体情况来分析应对了~
2022-02-16