networking - TCP 和 Go Back N 的区别

标签 networking tcp protocols

我正在阅读 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/

相关文章:

swift - 声明框架中结构的简单协议(protocol)一致性

iphone - 如何在iPhone中创建全局协议(protocol)方法?

objective-c - 如何使 Swift 的协议(protocol)在 .h 文件中可见?

networking - 如何通过 SOCKS 代理发送 UDP 数据包

docker - Kubernetes Pod上没有出站网络

Java - 将 DataInputStream 与套接字一起使用,缓冲与否?

c - TCP 让服务器先关闭连接 让客户端先关闭连接

node.js - 如何从 Node js 中的 'net' 模块捕获 ECONNRESET 错误?并防止整个程序被终止?

networking - 在Linux和IGMPv3上进行组播加入

python - 无法通过带有 SO_BINDTODEVICE 的两个 NIC 之间的 NAT 执行 TCP 握手