Home » » Sequence Numbers

Sequence Numbers

Written By hnf on Monday 21 October 2013 | Monday, October 21, 2013

Sequence Numbers
  A fundamental notion in the design is that every octet of data sent  over a TCP connection has a sequence number.  Since every octet is  sequenced, each of them can be acknowledged.  The acknowledgment  mechanism employed is cumulative so that an acknowledgment of sequence  number X indicates that all octets up to but not including X have been  received.  This mechanism allows for straight-forward duplicate  detection in the presence of retransmission.  Numbering of octets  within a segment is that the first data octet immediately following  the header is the lowest numbered, and the following octets are  numbered consecutively.
  It is essential to remember that the actual sequence number space is  finite, though very large.  This space ranges from 0 to 2**32 - 1.  Since the space is finite, all arithmetic dealing with sequence  numbers must be performed modulo 2**32.  This unsigned arithmetic  preserves the relationship of sequence numbers as they cycle from  2**32 - 1 to 0 again.  There are some subtleties to computer modulo  arithmetic, so great care should be taken in programming the  comparison of such values.  The symbol "=<" means "less than or equal"  (modulo 2**32).

  The typical kinds of sequence number comparisons which the TCP must  perform include:
    (a)  Determining that an acknowledgment refers to some sequence number sent but not yet                       acknowledged.
    (b)  Determining that all sequence numbers occupied by a segment have been acknowledged                       (e.g., to remove the segment from a retransmission queue).
    (c)  Determining that an incoming segment contains sequence numberswhich are expected                         (i.e., that the segment "overlaps" the receive window).

0 comments:

Post a Comment