9

黒瀬の Computer Networking を読んでいて、TCP の章で TCP と Go Back の違いについて読んでいるときに、NI が完全に理解していないものを見つけました。この本では、2 つのプロトコルの違いについて次のように述べています。

「多くの TCP 実装は、正しく受信されたが順序が正しくないセグメントを破棄するのではなくバッファします。

また、seqof segs 1、2、…N が順番に正しく受信され、ACK(n)、n < N が失われ、残りの N-1 個の ack がそれぞれのタイムアウト前に送信者に到着するとします。つまり、pkts, n, n+1, …, N の代わりに seg n です。ACK(n+1) が seg n のタイムアウト前に到着した場合、TCP は seg n を再送信することさえしません。

順不同セグメントのバッファリングは理解していますが、それ以外の動作は理解できず、Go Back N を完全に理解していないためだと思います。その例に従って、ACK(n+t) が到着した場合Go Back N タイムアウトの前に、プロトコルはあたかもセグメント n が実際に受信されたかのように続行されます。これは、累積 ACKS が原因で、実際に受信された場合です...したがって、Go Back N はそのセグメントを再送信しません....または am何か足りない?

4

5 に答える 5

16

私はこの質問の答えを見ていましたが、それを見つけた後、これは古いものでも誰かを助けるかもしれないと思ったので、Kurose-Ross Computer Networking - A top down approach からフラグメントをコピーしました:

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は、せいぜい1つのセグメント、すなわちセグメントnを再送信する。さらに、セグメント n + 1 の確認応答がセグメント n のタイムアウト前に到着した場合、TCP はセグメント n を再送信することさえしません。

私の結論: 実際には、TCP は GBN と SR の両方が混在しています。

于 2014-02-20T03:06:40.450 に答える
1

引用は、n 番目のセグメントが失われたのではなく、ACK(n) が失われたことを示しています。このような場合、ACK(n + x) は n + x までのすべてが正常に受信されたことを意味するため、何も再送信する必要はありません。

于 2012-09-27T18:40:13.363 に答える
0

ACK(n)までのストリーム全体の到着を確認しnます。までACK(n+1)のすべてn+1が到着したということnです。

于 2012-09-27T06:43:04.387 に答える