在 Wireshark 中,我可以看到“TCP 重传”和“TCP 快速重传”。它们有什么区别?Wireshark 如何区分它们?
答案1
使用 TCP 发送数据包时,数据包会随其传输一个序列号。接收方收到数据包后,会向发送方发送一个确认消息,其中包含表明数据包已收到的序列号。根据你提问的方式,我假设你知道这一点。我想把它分享给其他读者。
TCP 重传只是超时内未确认的数据包。
TCP 快速重传是指当源确认未收到数据包时...引用自快速重传 - 维基百科,自由的百科全书
如果 TCP 发送方收到三个具有相同确认号的重复确认(即,共有四个具有相同确认号的确认),则发送方可以合理地确信下一个更高序列号的段已被丢弃
答案2
我已经消化了这一点微软:
当每个出站段被传递到 Internet 协议 (IP) 层时,TCP 都会启动重传计时器。如果 TCP 在计时器到期之前未收到给定段中数据的确认,则将重传该段。
重新传输超时会根据连接的特性进行动态调整,使用 Van Jacobson 和 Mike Karels 的论文“拥塞避免和控制”中所述的平滑往返时间 (SRTT) 计算方法,该论文发表于 1988 年 11 月的 ACM SIGCOMM 数据通信会议论文集。该论文可在计算机协会的 ACM 数字图书馆中找到。有关 SRTT 计算的更多信息,请参阅RFC 793:传输控制协议 DARPA 互联网程序协议规范. 每次重新传输给定段后,该段的重新传输超时时间都会加倍。
使用此算法,TCP 可以调整自身以适应连接的正常延迟。高延迟链路上的 TCP 连接比低延迟链路上的 TCP 连接超时时间长得多,以避免在连接速度慢而不是不存在时错误超时。
在某些情况下,TCP 会在特定段的重传计时器到期之前重传数据。最常见的这种情况是由于一种称为快速重传的功能而发生的。
当支持快速重传的接收方收到一个序列号高于当前预期序列号的数据包时,它会继续处理,就好像某些数据被丢弃了一样。为了帮助发送方尽快意识到数据被丢弃,接收方会立即发送一个确认 (ACK),并将 ACK 号设置为似乎丢失的序列号。对于传入流中每个额外的 TCP 段,如果其序列号高于丢失的序列号,接收方都会发送另一个针对该序列号的 ACK。
当发送方收到一连串重复的确认同一序列号的 ACK,且指示的序列号早于当前正在发送的段的序列号时,发送方可以推断出它之前发送的一个或多个段已被丢弃。在收到一定数量的重复 ACK 后,支持快速重传算法的发送方会重新发送接收方请求的一个或多个段以填补数据空白,而无需等待丢失段的重传计时器到期。这种优化极大地提高了繁忙网络环境中的性能。
使用快速重传,发送方在重传计时器到期之前重新传输丢失的 TCP 段。由于丢失的 TCP 段的重传计时器没有到期,因此丢失的段在目的地被接收并被接收方确认的速度比没有快速重传时更快,并且发送方可以更快地将后续段发送给接收方。此过程称为快速恢复。快速重传和快速恢复在RFC 2581:TCP 拥塞控制。
答案3
重传本质上与自动重复请求 (ARQ) 相同,是指重新发送已损坏或丢失的数据包。该术语是指在分组交换计算机网络上运行的协议用来提供可靠通信的基本机制之一。但快速重传是对 TCP 的增强,可减少发送方在重传丢失的段之前等待的时间。快速重传增强的工作原理如下:如果 TCP 发送方收到指定数量的确认,通常设置为三个具有相同确认号的重复确认(即,总共四个具有相同确认号的确认),则发送方可以合理地确信下一个更高序列号的段已被丢弃,并且不会乱序到达。然后,发送方将在等待超时之前重新传输假定已丢弃的数据包。查看此链接了解更多详细信息和算法 http://www.isi.edu/nsnam/DIRECTED_RESEARCH/DR_WANIDA/DR/JavisInActionFastRetransmitFrame.html
答案4
简而言之,TCP 重传主要依赖于数据包的超时来检测丢失,而在 TCP 快速重传中,特定数据包的重复确认表示其丢失。
大部分情况下,数据包的 3 个重复确认都会被推断为数据包丢失。然后源端可以看到触发 NACK 的数据包的序列号。这是丢失数据包的序列号,可以发送给接收端。
TCP 快速重传的优点在于它不等待数据包超时才发起传输,因此可以更快地重传数据包,正如其名称所暗示的那样。