TCPシーケンス番号

TCPシーケンス番号

同じシーケンス番号の 2 つのセグメントが宛先に到着した場合、どちらのセグメントが受け入れられるかを知りたいです。

例えば:

クライアントはサーバーにパケットを送信し、確認応答を待ちます。しかし、タイムライン内に確認応答を受信しなかったため (ネットワークの問題により、このセグメントがサーバーに到達するまでに時間がかかります)、同じセグメントを再度送信し始めます。サーバー側では、両方のパケットが同時に到達すると何が起こるでしょうか。

答え1

1つのパケットは重複としてマークされ、破棄されます。これらは同一なので、どちらが重複しているかは問題ではありません。https://stackoverflow.com/questions/12871760/パケット損失とパケット複製

答え2

両方のセグメントが同時に到着するという前提は意味がありません。 常に、一方が他方より先に到着します。 しかし、そのデータは、次のセグメントが到着する前にアプリケーションに配信されていない可能性があります。

によるとRFC793 の翻訳最初のセグメントのデータが使用されます。

セグメントは順番に処理されます。到着時の初期テストは古い重複を破棄するために使用されますが、その後の処理は SEG.SEQ の順序で行われます。セグメントの内容が古いセグメントと新しいセグメントの境界にまたがる場合は、新しい部分のみを処理する必要があります。

そうは言っても、実際の実装では異なる動作をすることは想像に難くありません。特に、部分的に重複するセグメントは非常に興味深いものになります。

答え3

基本的に、最初に処理されたものが受け入れられ、後続の重複は削除されます。

からhttps://www.rfc-editor.org/rfc/rfc793.txt

...最初のチェックシーケンス番号

  SYN-RECEIVED STATE
  ESTABLISHED STATE
  FIN-WAIT-1 STATE
  FIN-WAIT-2 STATE
  CLOSE-WAIT STATE
  CLOSING STATE
  LAST-ACK STATE
  TIME-WAIT STATE

    Segments are processed in sequence.  Initial tests on arrival
    are used to discard old duplicates, but further processing is
    done in SEG.SEQ order.  If a segment's contents straddle the
    boundary between old and new, only the new parts should be
    processed.

    There are four cases for the acceptability test for an incoming
    segment:

    Segment Receive  Test
    Length  Window
    ------- -------  -------------------------------------------

       0       0     SEG.SEQ = RCV.NXT

       0      >0     RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND

      >0       0     not acceptable

      >0      >0     RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND
                  or RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

    If the RCV.WND is zero, no segments will be acceptable, but
    special allowance should be made to accept valid ACKs, URGs and
    RSTs.

    If an incoming segment is not acceptable, an acknowledgment
    should be sent in reply (unless the RST bit is set, if so drop
    the segment and return):

      <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>

    After sending the acknowledgment, drop the unacceptable segment
    and return...

関連情報