我正在阅读 Kurose 的计算机网络,在阅读有关 TCP 和 Go Back N 之间差异的 TCP 章节时,我发现了一些我不完全理解的东西。该书对这两种协议(protocol)之间的一些差异进行了如下说明:
"many TCP implementations buffer correctly received but out-of-order segs rather than discard.
also, suppose a seqof segs 1, 2, …N, are received correctively in-order,ACK(n), n < N, gets lost, and remaining N-1 acks arrive at sender before their respective timeouts TCP retransmit most one seg, i.e., seg n, instead of pkts, n, n+1, …, N TCP wouldn’t even retransmit seg n if ACK(n+1) arrived before timeout for seg n"
我理解乱序段的缓冲,但我不理解其他行为,我认为这是因为我没有完全理解Go Back N。按照那个例子,如果ACK(n + t) 在 Go Back N 超时之前到达,协议(protocol)将继续,就好像段 n 实际上已收到一样,情况就是这样,因为累积的 ACKS ......所以,Go Back N 也不会重新传输该段...... . 还是我遗漏了什么?
最佳答案
我正在查看这个问题的答案,找到它后我认为即使这是旧的,它可能对某人有帮助,所以我从 Kurose-Ross Computer Networking - A top down approach 复制了一个片段:
TCP 是 GBN 还是 SR 协议(protocol)?回想一下 TCP 确认是 累积且正确接收但无序的段不会被接收方单独确认。因此,TCP 发送方只需要维护已传输但未确认字节的最小序列号(SendBase)和下一个要发送的字节的序列号(NextSeqNum)。从这个意义上说,TCP 看起来很像 GBN 风格的协议(protocol)。但 TCP 和 Go-Back-N 之间存在一些显着差异。许多 TCP 实现 将缓冲正确接收但乱序的段 [Stevens 1994]。 还要考虑当发送方发送一系列段 1, 2, ... 时会发生什么。 . . , N,并且所有段都按顺序无误地到达接收方。进一步假设 数据包 n < N 的确认丢失,但剩余的 N – 1 个确认 在它们各自的超时之前到达发送者。在这个例子中,GBN 不仅会重传数据包 n,还会重传所有后续数据包 n+1、n+2、 . . . , N. 另一方面,TCP最多重传一个段,即段 名词此外,TCP 甚至不会重传段 n,如果确认 对于段 n + 1 在段 n 超时之前到达。
我的结论:在实践中,TCP 是 GBN 和 SR 的混合体。
关于networking - TCP 和 Go Back N 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12614393/