número de secuencia TCP

número de secuencia TCP

Me gustaría saber si dos segmentos del mismo número de secuencia llegan al destino, ¿cuál segmento será aceptado?

Por ejemplo:

Un cliente envía un paquete a un servidor y espera una confirmación. Pero no recibió el reconocimiento (debido a algún problema de red, este segmento tarda en llegar al servidor) dentro de la línea de tiempo, por lo que comienza a enviar el mismo segmento nuevamente. Ahora, en el lado del servidor, ¿qué sucede si ambos paquetes llegan al mismo tiempo?

Respuesta1

Un paquete se marca como duplicado y se descarta. Como son idénticos, no importa cuál sea. Verhttps://stackoverflow.com/questions/12871760/packet-loss-and-packet-duplication

Respuesta2

La premisa de que ambos segmentos lleguen al mismo tiempo no tiene sentido. Uno siempre llegará antes que el otro. Pero es posible que esos datos no hayan sido entregados a la aplicación antes de que llegue la siguiente.

De acuerdo aRFC 793se utilizarán los datos del primer segmento.

Los segmentos se procesan en secuencia. Las pruebas iniciales a la llegada se utilizan para descartar duplicados antiguos, pero el procesamiento posterior se realiza en el orden SEG.SEQ. Si el contenido de un segmento se encuentra entre el límite entre lo antiguo y lo nuevo, sólo se deben procesar las partes nuevas.

Dicho esto, no es difícil imaginar que las implementaciones en la realidad se comporten de manera diferente. En particular, los segmentos parcialmente superpuestos pueden resultar bastante interesantes.

Respuesta3

Básicamente, se aceptará lo que se procese primero; los duplicados posteriores se eliminarán.

Dehttps://www.rfc-editor.org/rfc/rfc793.txt

...primer número de secuencia de verificación

  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...

información relacionada