nanog mailing list archives

IPvB translation header


From: William Allen Simpson <william.allen.simpson () gmail com>
Date: Fri, 25 Mar 2022 10:44:36 -0400

This was the IPvB (nee original IPv6) *translation* header.

Note that it was cleverly designed to translate from IPv4.
Most of the fields are in exactly the same place.  Especially,
the 32-bit Source IP address is in exactly the same place, hoping
that filters could operate on both stacks.

We were implementing on then new i386 32-bit machines, but also
tested on i286 16-bit machines.  We knew there would be 64-bit
machines (such as the DEC Alpha), so it was carefully designed
for multiple environments.


3.1.  Translation Header Format

   +‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+
   |Version|  IHV  |    Service    |        Minimal Length         |
   +‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+
   |        Identification         |  Next Header  |   Hop Limit   |
   +‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+
   |                                                               |
   +                            Source                             +
   |                                                               |
   +‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+
   |                                                               |
   +                          Destination                          +
   |                                                               |
   +‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+‐+


   Version          4 bits: constant 0xB (1011 binary).

                    Indicates the format of the internet header.  This
                    document describes version 11.

                    Note:
                                     The IPv4 Version is 0x4 (0100
                                     binary).  IPvB is the complement
                                     (binary inverse) of IPv4.

                                     Although this field is always
                                     present, and may be used internally
                                     by systems, different headers MUST
                                     be distinguished at the link layer.
                                     Some implementations of IPv4 failed
                                     to correctly check (or set) the
                                     IPv4 Version.

   IHV              4 bits.  Internet Header Variant.

                    0x0
                       Invalid; MUST be silently discarded.

                    0x6
                       IPv4 header translation.  The least significant
                       bit here reflects the most significant IPv4 Flags
                       bit, as some systems used that bit in the past.
                       (See "IPvB Translation for IPv4" [].)

                    0x8
                       Flow header (see below).

                    0xA
                       Reserved for future use.

                    The IPvB header is a fixed minimum size.  However,
                    the Version field is a scarce resource Therefore,
                    larger values are used for format variants,
                    transient indications, and other purposes.

                    Note:
                                     For IPv4, this field was the
                                     Internet Header Length (IHL) in
                                     32‐bit words.  The minimum value
                                     for a matching IPvB header is 6
                                     words.

   Service          8 bits: default 0.

                    Contains the IPv4 Type of Service (ToS).

   Minimal Length   16 bits: minimum 64 (bytes).  Smaller values MUST be
                    silently discarded.

                    The length of the datagram, including internet
                    header(s) and payload data.  All nodes must be
                    prepared to accept datagrams of up to 1480 octets.
                    It is recommended that hosts send datagrams larger
                    than 1480 octets only after assurance that the
                    destination is prepared to accept the larger
                    datagrams.

                    The number 1480 is selected to allow a reasonable
                    sized data block to be transmitted in addition to
                    the required header information, and to allow
                    typical lower‐layer encapsulations room for their
                    respective headers.  Over time, memory limitations
                    have eased considerably, and there have been some
                    indications that a larger minimum datagram size
                    throughout the internet would be beneficial.

                    Note:
                                     IPv4 has minimum required 576 and
                                     maximum 65,535 octet datagrams.
                                     Translation to IPv4 requires that
                                     the IPvB limits are only applicable
                                     to nodes indicating the presence of
                                     IPvB.  (See "IPvB Neighbor
                                     Discovery" [] and "IPvB Translation
                                     for IPv4" [].)

   Identification   16 bits: default 0.

                    Assigned by the sender.  Originally used in IPv4 to
                    aid in assembling the fragments of a datagram.
                    However, IPvB uses a Fragmentation Header instead,
                    and treats all IPv4 datagrams as Don’t Fragment
                    (DF).

   Next Header      8 bits.

                    Identifies the type of header immediately following
                    this header.  Uses the same values as the IPv4
                    Protocol field.  (See [RFC‐1700] et seq.)

   Hop Limit        8 bits: initially 255.

                    Indicates the maximum time the datagram is allowed
                    to remain in the internet routing system.  The
                    intent is to cause undeliverable datagrams to be
                    discarded, and to bound the maximum datagram
                    lifetime.  The time is measured in units of seconds,
                    but is only an upper bound on the time a datagram
                    may exist.

                    This field is modified in internet header
                    processing.  Every node that routes the datagram
                    between interfaces MUST decrement the value by at
                    least one.  For large bandwidth‐delay paths, the
                    value SHOULD decrease by more than one, and MAY
                    decrease by one for each anticipated second in
                    transit (including queuing delay) over the outgoing
                    interface.

                    If this field contains the value zero (0) before
                    sending, or some higher limit upon receipt as
                    configured for each protocol, then the datagram MUST
                    be discarded.

                    Note:
                                     IPv4 defaults to an initial value
                                     of 64 [].  (See also "IPvB
                                     Translation for IPv4" [].)

                                     Security considerations require
                                     that the initial value be well
                                     known, so that protocol
                                     implementations can detect the
                                     number of hops from its source.

   Source           64 bits.

                    The location of the node originating the datagram.

                    Note:
                                     The least significant 32 bits are
                                     aligned with the IPv4 Source field
                                     to permit serendipitous comparisons
                                     for network egress and ingress
                                     filtering of both header versions
                                     concurrently.

   Destination      64 bits.

                    The location of the routing area where an interface
                    of the intended communication peer might be found.

   The IPvB header maintains 64‐bit alignment.  Together with an IPvB
   Encapsulating Security Protocol (ESP), the header combination
   maintains 128‐bit and 256‐bit alignment.  Serendipitous alignment
   allows simple loads and stores, instead of slower byte by byte
   iterations.


Current thread: