TCP和Go Back N之间的差异

时间:2012-09-27 05:02:22

标签: networking tcp protocols

我正在阅读Kurose的计算机网络,在阅读TCP章节中关于TCP和Go Back N之间的差异时,我发现了一些我不完全理解的东西。该书描述了以下关于两种协议之间的一些差异:

  

“许多TCP实现缓冲正确接收但无序的segs而不是丢弃。

     

另外,假设seqof segs 1,2,... N按顺序正确接收,ACK(n),   n< N,迷路,剩下的N-1确认在他们各自的超时之前到达发送者   TCP重传最多一个seg,即seg n,而不是pkts,n,n + 1,...,N   如果ACK(n + 1)在超时之前到达seg n“

,则TCP甚至不会重传seg n

我理解无序段的缓冲,但我不理解其他行为,我认为这是因为我不完全理解返回N.遵循该示例,如果ACK(n + t)在Go Back N超时之前到达,协议将继续,好像seg n实际上是收到的,这是因为累积的ACKS ...所以,Go Back N不会重新传输该段...或者我错过了什么?

5 个答案:

答案 0 :(得分:11)

我正在查看这个问题的答案,在找到它之后我认为即使这已经老了,也可能对某人有所帮助,所以我从Kurose-Ross计算机网络中复制了一个片段 - 自上而下的方法:

TCP是GBN还是SR协议?回想一下,TCP确认是 累积和正确接收但无序段不由接收器单独确认。因此,TCP发送方只需要保持发送但未确认的字节(SendBase)的最小序列号和要发送的下一个字节的序列号(NextSeqNum)。从这个意义上讲,TCP看起来很像GBN风格的协议。但 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之间的混合。

答案 1 :(得分:1)

看到这些链接,很容易理解GBN和SR:

返回N协议(GBN): enter link description here

选择性协议(SR): https://www.youtube.com/watch?v=Cs8tR8A9jm8

在GBN和SR协议中,接收方必须为其在幻灯片窗口中收到的所有段发送ACK消息。

在TCP协议中,接收方为在幻灯片窗口中收到的所有段发送ACK消息。接收器只发送ACK以获得它期望的下一个段。这意味着将向发送方发送较少的ACK消息。因此,有利于减少网络拥塞。

在异常情况下,某些段丢失(通过网络拥塞或位错误),TCP传输时间比GBN和SR长,因为接收方不能同时发送2条ACK消息。

在我看来,失败的部分很少发生。所以TCP协议优化正常情况而不是异常情况。在正常情况下,TCP优于GBN和SR

答案 2 :(得分:0)

ACK(n)确认整个流程的到达时间为n。因此,ACK(n+1)表示已达到n+1的所有内容,包括n

答案 3 :(得分:0)

引用说ACK(n)丢失了,而不是第n段丢失了。在这种情况下,不需要重新传输,因为ACK(n + x)意味着成功接收到n + x的所有内容。

答案 4 :(得分:0)

我对书中的陈述感到困惑,但我想我找到了答案:

  

还要考虑当发送者发送一系列段1,2,...时会发生什么。 。 。 ,N和所有段按顺序到达接收器时没有错误。进一步假设对分组n的确认< N迷失了,但剩下的N - 1确认在各自的超时之前到达发送者。在该示例中,GBN不仅将重传分组n,而且还重传所有后续分组n + 1,n + 2,.... 。 。另一方面,N. TCP将最多重新传输一个段,即段n。此外,如果段n + 1的确认在段n的超时之前到达,则TCP甚至不会重新发送段n。

实际上,在上面的示例中,即使数据包n+1的ACK在超时之前到达发送方,也必须知道数据包n的计时器之前可能已超时。那个到来。因此,由于数据包n超时且GBN尚未看到ACK(n+1)ACK(n+2) ...到目前为止,它将触发n之后所有数据包的重新传输。

但是,对于TCP,发件人只会在此特定时刻再次发送数据包n

P.S。这个问题已经很老了。但是,无论如何,希望这对任何人都有帮助。